私のEC2
2015振り返り
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
Serverless
Architecture
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 ansible
pip 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 ≒ ES
Ansibleで作っていた、クラスタリン
グ不要だった
• お値段 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
input
2015-12-06T23:50:13.836060Z hoge-elb XXX.XXX.XXX.XXX:49850
10.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
config
input {
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

私のEC2 2015振り返り