私のec2 2015振り返り
TRANSCRIPT
私のEC22015振り返り
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 1
森田 邦裕@morita92hiro kunihiro.morita.52
- 経歴 - 組み込みエンジニア - ぼっちインフラエンジニア 2013~
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 2
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 3
EC2
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 4
さまざまなアーキテクチャ誕生• Auto Scaling
• Blue-Green Deployment
• Immutable Infrastructure
• Infrastructure as Code
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 5
技術的な後押し• CloudFormation
• Ansible
• Chef
• Serverspec
• Docker
• ECS
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 6
201411~
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 7
Lambda誕生
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 8
ServerlessArchitecture
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 9
EC2使ったら負けから、まだEC2使ってるの?へ
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 10
言うは簡単ですが
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 11
EC2必要2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 12
EC2も進化してるよ!
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 13
私のEC2構築
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 14
CloudFormation Designer1
1 Amazon Web Services ブログ: 【AWS発表】AWS CloudFormation Designerと、より多くのサービスのサポート
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 15
Designerない
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 16
JSON地獄2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 17
Designer誕生後• テンプレートの作成をGUIで作れる
• 設定を振り返るときに便利
• CloudFormationを使ってない構成はCloudFormerでテンプレートにして、Designerで開いて把握しやすく
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 18
AMI 2015.032
2 Amazon Web Services ブログ: 【AWS発表】Amazon Linux AMI 2015.03 が利用可能に
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 19
Ansible動かない• デフォルトがPython2.7になった影響
• 手動でセットアップなんて・・・
• デプロイもAnsible
• 開発者に本番サーバーへSSHさせない環境
• 死活問題
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 20
解決yum remove ansiblepip install ansible
結論• pipでインストール• OpsWork使えば・・・
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 21
VPC Endpoint for S33
3 Amazon Web Services ブログ: Amazon S3のVPCエンドポイント
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 22
VPC Endpoint for S3
• プライベートサブネットからS3へアクセス• パブリックサブネットのインスタンスもプライベートIPアドレスでS3へアクセス
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 23
S3へリバースプロキシでアクセス制限• 公開するコンテンツはアクセス制限(Basic認証)したい
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 24
VPC Endpointない• パブリックIPをバケットポリシー設定
• EC2のスケールでバケットポリシー更新必要
• EIPからのアクセスとは限らない
• IPアドレスレンジ制限するもの違う4
4 Amazon Web Services ブログ: 【AWS発表】AWSのIPアドレスレンジをJSONで提供
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 25
VPC Endpoint誕生後• VPC Endpointもしくは、VPCからバケットのアクセスをバケットポリシー制御
• S3アクセスは全てプライベートIP
• EC2のスケールについていける
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 26
S3 Bucket Policy for VPC Endpoint{ "Version": "2008-10-17", "Statement": [ { "Sid": "VPCAccessPolicy", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::hoge/*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-12345678" } } } ]}
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 27
Route53 Private DNS5
5 Amazon Web Services ブログ: Route53のアップデート - プライベートDNS、他
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 28
Private DNSない• hostsファイルに書く
• 全EC2のhostsファイル更新が必要
• IP変わるとつらい
• ELB、RDSはIP指定できない
• 自前Private DNSサーバーだと
• 構築&運用&コスト 増
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 29
Private DNS誕生後• サーバーレス、SLA100%、50円/月
• CloudFormationでEC2作成と同時や、EC2起動時にAレコード更新
• DNS名はタグに書いとく
• インスタンス差し替えもレコード更新だけ
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 30
SESでメール受信6
6 Amazon Web Services ブログ: 【AWS発表】Amazon SESがメール受信、そしてその処理に対応しました
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 31
SESでメール受信ない• 自前メール受信サーバー
• 構築&運用&コスト 増• ドメイン管理してると無料でつかえるメールサービス
• Route53で管理すると使えなくなる
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 32
SESでメール受信誕生後• サーバーレス、$0.1/1000通• SESからLambda、S3、SNS、WorkMailへ後続処理できる• POPサーバーとは違うのでメールクライアントの接続はできない
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 33
DDoSに対するAWSのベストプラクティス7
7 AWS Solutions Architect ブログ: 「DDoSに対するAWSのベストプラクティス(日本語版)」の公開と攻撃対象領域の削減によるDDoS攻撃への備え方
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 34
3行で• セキュリティグループとNetwork ACLをちゃんと設定• CloudWatchでちゃんと監視• CloudFront、ELB等マネージドサービス使ったらええんやで
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 35
私のEC2運用
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 36
CloudWatch
Dashboards13
13 Amazon Web Services ブログ: 【AWS発表】CloudWatch Dashboards – メトリックビューのカスタマイズ
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 37
Dashboards• お手軽• 2週間だけでOKなとき
Grafana• イケてるグラフ• 2週間以上必要なとき2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 38
Dashboards
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 39
Grafana
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 40
CloudWatch
Logs10
10 Amazon Web Services ブログ: 【AWS発表】Amazon CloudWatch Logsが東京リージョンでも利用可能に!
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 41
ログ可視化
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 42
Logsでグラフも作れる
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 43
Elasticsearch Service11
11 Amazon Web Services ブログ: 【AWS発表】Amazon Elasticsearch Service
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 44
CloudWatch Logs + Elasticsearch +
Kibana12
12 Amazon Web Services ブログ: CloudWatch Logs Subscription Consumer + Elasticsearch + Kibana Dashboards
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 45
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 46
比較• ログ収集はfluentd使わずawslogsを使っていた
• 構築の手間 EC2 ≒ ESAnsibleで作っていた、クラスタリング不要だった
• お値段 EC2 < ES
• ログ投入の手間 EC2 > ES
• 安心感 EC2 << ES PRICELESS
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 47
logstash + Elasticsearch + Kibana
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 48
logstash• ローカルのログをCLIでElasticsearchへ• サービスとしてリアルタイムでログをElasticsearchへ
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 49
input2015-12-06T23:50:13.836060Z hoge-elb XXX.XXX.XXX.XXX:4985010.0.49.37:80 0.000129 0.001164 0.000026 200 200 0 1521"GET https://hoge.com/ HTTP/1.1" "Mozilla/5.0 (iPhone;CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46(KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 50
configinput { stdin { }}
filter { grok { match => { "message" => "^(?<timestamp>[^ ]*) (?<elb>[^ ]*) (?<client_ip>[^:]*):(?<client_port>[^ ]*) (?<backend>[^ ]*) (?<request_processing_time>[^ ]*) (?<backend_processing_time>[^ ]*) (?<response_processing_time>[^ ]*) (?<elb_status_code>[^ ]*) (?<backend_status_code>[^ ]*) (?<received_bytes>[^ ]*) (?<sent_bytes>[^ ]*) \"(?<request>[^\"]*)\" \"(?<user_agent>[^\"]*)\" (?<ssl_cipher>[^ ]*) (?<ssl_protocol>[^ ]*)" } remove_field => [ "message" ] }
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 51
date { match => [ "timestamp" , "ISO8601" ] locale => "en" remove_field => [ "timestamp" ] } useragent { source => "user_agent" } geoip { source => [ "client_ip" ] }}
output { stdout { codec => rubydebug }# elasticsearch { host => 'localhost' }}
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 52
output$ /opt/logstash/bin/logstash -f import.conf < hoge{ "@version" => "1", "@timestamp" => "2015-12-06T23:50:13.836Z", "host" => "localhost", "elb" => "hoge-elb", "client_ip" => "XXX.XXX.XXX.XXX", "client_port" => "49850", "backend" => "10.0.49.37:80", "request_processing_time" => "0.000129", "backend_processing_time" => "0.001164", "response_processing_time" => "0.000026", "elb_status_code" => "200", "backend_status_code" => "200", "received_bytes" => "0", "sent_bytes" => "1521", "request" => "GET https://hoge.com HTTP/1.1", "user_agent" => "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1",
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 53
"ssl_cipher" => "ECDHE-RSA-AES128-GCM-SHA256", "ssl_protocol" => "TLSv1.2", "name" => "Mobile Safari", "os" => "iOS 9.1", "os_name" => "iOS", "os_major" => "9", "os_minor" => "1", "device" => "iPhone", "major" => "9", "minor" => "0", "geoip" => { "ip" => "XXX.XXX.XXX.XXX", "country_code2" => "JP", "country_code3" => "JPN", "country_name" => "Japan", "continent_code" => "AS", "latitude" => 36.0, "longitude" => 138.0, "timezone" => "Asia/Tokyo", "location" => [ [0] 138.0, [1] 36.0 ] }}
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 54
CloudWatch Action
EC2 Auto Recovery8
EC2 Reboot9
9 CloudWatch 新アクション機能 – EC2インスタンスのリブート
8 Amazon Web Services ブログ: 【AWS発表】Amazon EC2の自動リカバリ(Auto Recovery)機能
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 55
StatusCheckFailed_System• ネットワーク接続の喪失• システム電源の喪失• 物理ホストのソフトウェアの問題• 物理ホストのハードウェアの問題AWS側になにか問題があって修復が必要なときのエラー
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 56
修復方法• 根気強く待つ• 自分自身で解決する
• 手動でインスタンスのStop & Start -> IPが変わる!• AMI作りなおす -> IPもインスタンスIDも変わる!
• 自動でよしなに
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 57
Auto Recovery
• 自動復旧
• インスタンス情報は引き継がれる
• 発生から復旧まで10分以内ぐらい?(発生経験なし)
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 58
StatusCheckFailed_Instance• 失敗したシステムステータスチェック• 正しくないネットワークまたは起動設定• メモリの枯渇• 破損したファイルシステム• 互換性のないカーネルインスタンス内部に問題があって修復が必要な時のエラー2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 59
修復方法• 手動で再起動
• CloudWatchアラームのトリガーで再起動
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 60
自動復旧と再起動で安心の年越し!
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 61
Elastic File System14
マダー?
14 Amazon Web Services ブログ: 【AWS発表】Amazon Elastic File System (EFS) - Amazon EC2 のための共有ファイルストレージ
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 62
~201510• CloudFormation Designer
• Route53 PrivateDNS
• SESでメール受信• CloudWatch Dashboards / Logs
• ElasticSearch Service
• EC2 Auto Recovery / Reboot
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 63
201511~
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 64
Lambda
Python2.7対応Cron対応
VPC対応予定2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 65
スケジュールでのジョブ実行は、Lambdaと
Pipelineどちらがいいの?— BlackBelt 10月 座談会で質問してみた
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 66
Lambda!Data PipeLine!
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 67
No Server is Easier To Manage Than No Serverサーバーが無いに越したことはない— Amazon CTO.2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 68
Lambda!EC2!
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 69
2016 EC2❓
2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 70
今年の機能は今年のうちに!2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 71