私のec2 2015振り返り

71
私のEC2 2015振り返り 2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 1

Upload: kunihiro-morita

Post on 09-Feb-2017

1.645 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 私のEC2 2015振り返り

私のEC22015振り返り

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 1

Page 2: 私のEC2 2015振り返り

森田 邦裕@morita92hiro kunihiro.morita.52

- 経歴 - 組み込みエンジニア - ぼっちインフラエンジニア 2013~

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 2

Page 3: 私のEC2 2015振り返り

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 3

Page 4: 私のEC2 2015振り返り

EC2

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 4

Page 5: 私のEC2 2015振り返り

さまざまなアーキテクチャ誕生• Auto Scaling

• Blue-Green Deployment

• Immutable Infrastructure

• Infrastructure as Code

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 5

Page 6: 私のEC2 2015振り返り

技術的な後押し• CloudFormation

• Ansible

• Chef

• Serverspec

• Docker

• ECS

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 6

Page 7: 私のEC2 2015振り返り

201411~

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 7

Page 8: 私のEC2 2015振り返り

Lambda誕生

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 8

Page 9: 私のEC2 2015振り返り

ServerlessArchitecture

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 9

Page 10: 私のEC2 2015振り返り

EC2使ったら負けから、まだEC2使ってるの?へ

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 10

Page 11: 私のEC2 2015振り返り

言うは簡単ですが

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 11

Page 12: 私のEC2 2015振り返り

EC2必要2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 12

Page 13: 私のEC2 2015振り返り

EC2も進化してるよ!

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 13

Page 14: 私のEC2 2015振り返り

私のEC2構築

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 14

Page 16: 私のEC2 2015振り返り

Designerない

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 16

Page 17: 私のEC2 2015振り返り

JSON地獄2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 17

Page 18: 私のEC2 2015振り返り

Designer誕生後• テンプレートの作成をGUIで作れる

• 設定を振り返るときに便利

• CloudFormationを使ってない構成はCloudFormerでテンプレートにして、Designerで開いて把握しやすく

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 18

Page 20: 私のEC2 2015振り返り

Ansible動かない• デフォルトがPython2.7になった影響

• 手動でセットアップなんて・・・

• デプロイもAnsible

• 開発者に本番サーバーへSSHさせない環境

• 死活問題

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 20

Page 21: 私のEC2 2015振り返り

解決yum remove ansiblepip install ansible

結論• pipでインストール• OpsWork使えば・・・

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 21

Page 23: 私のEC2 2015振り返り

VPC Endpoint for S3

• プライベートサブネットからS3へアクセス• パブリックサブネットのインスタンスもプライベートIPアドレスでS3へアクセス

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 23

Page 24: 私のEC2 2015振り返り

S3へリバースプロキシでアクセス制限• 公開するコンテンツはアクセス制限(Basic認証)したい

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 24

Page 26: 私のEC2 2015振り返り

VPC Endpoint誕生後• VPC Endpointもしくは、VPCからバケットのアクセスをバケットポリシー制御

• S3アクセスは全てプライベートIP

• EC2のスケールについていける

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 26

Page 27: 私のEC2 2015振り返り

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

Page 29: 私のEC2 2015振り返り

Private DNSない• hostsファイルに書く

• 全EC2のhostsファイル更新が必要

• IP変わるとつらい

• ELB、RDSはIP指定できない

• 自前Private DNSサーバーだと

• 構築&運用&コスト 増

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 29

Page 30: 私のEC2 2015振り返り

Private DNS誕生後• サーバーレス、SLA100%、50円/月

• CloudFormationでEC2作成と同時や、EC2起動時にAレコード更新

• DNS名はタグに書いとく

• インスタンス差し替えもレコード更新だけ

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 30

Page 32: 私のEC2 2015振り返り

SESでメール受信ない• 自前メール受信サーバー

• 構築&運用&コスト 増• ドメイン管理してると無料でつかえるメールサービス

• Route53で管理すると使えなくなる

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 32

Page 33: 私のEC2 2015振り返り

SESでメール受信誕生後• サーバーレス、$0.1/1000通• SESからLambda、S3、SNS、WorkMailへ後続処理できる• POPサーバーとは違うのでメールクライアントの接続はできない

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 33

Page 34: 私のEC2 2015振り返り

DDoSに対するAWSのベストプラクティス7

7 AWS Solutions Architect ブログ: 「DDoSに対するAWSのベストプラクティス(日本語版)」の公開と攻撃対象領域の削減によるDDoS攻撃への備え方

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 34

Page 35: 私のEC2 2015振り返り

3行で• セキュリティグループとNetwork ACLをちゃんと設定• CloudWatchでちゃんと監視• CloudFront、ELB等マネージドサービス使ったらええんやで

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 35

Page 36: 私のEC2 2015振り返り

私のEC2運用

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 36

Page 38: 私のEC2 2015振り返り

Dashboards• お手軽• 2週間だけでOKなとき

Grafana• イケてるグラフ• 2週間以上必要なとき2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 38

Page 39: 私のEC2 2015振り返り

Dashboards

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 39

Page 40: 私のEC2 2015振り返り

Grafana

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 40

Page 42: 私のEC2 2015振り返り

ログ可視化

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 42

Page 43: 私のEC2 2015振り返り

Logsでグラフも作れる

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 43

Page 45: 私のEC2 2015振り返り

CloudWatch Logs + Elasticsearch +

Kibana12

12 Amazon Web Services ブログ: CloudWatch Logs Subscription Consumer + Elasticsearch + Kibana Dashboards

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 45

Page 46: 私のEC2 2015振り返り

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 46

Page 47: 私のEC2 2015振り返り

比較• ログ収集はfluentd使わずawslogsを使っていた

• 構築の手間 EC2 ≒ ESAnsibleで作っていた、クラスタリング不要だった

• お値段 EC2 < ES

• ログ投入の手間 EC2 > ES

• 安心感 EC2 << ES PRICELESS

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 47

Page 48: 私のEC2 2015振り返り

logstash + Elasticsearch + Kibana

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 48

Page 49: 私のEC2 2015振り返り

logstash• ローカルのログをCLIでElasticsearchへ• サービスとしてリアルタイムでログをElasticsearchへ

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 49

Page 50: 私のEC2 2015振り返り

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

Page 51: 私のEC2 2015振り返り

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

Page 52: 私のEC2 2015振り返り

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

Page 53: 私のEC2 2015振り返り

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

Page 54: 私のEC2 2015振り返り

"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

Page 56: 私のEC2 2015振り返り

StatusCheckFailed_System• ネットワーク接続の喪失• システム電源の喪失• 物理ホストのソフトウェアの問題• 物理ホストのハードウェアの問題AWS側になにか問題があって修復が必要なときのエラー

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 56

Page 57: 私のEC2 2015振り返り

修復方法• 根気強く待つ• 自分自身で解決する

• 手動でインスタンスのStop & Start -> IPが変わる!• AMI作りなおす -> IPもインスタンスIDも変わる!

• 自動でよしなに

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 57

Page 58: 私のEC2 2015振り返り

Auto Recovery

• 自動復旧

• インスタンス情報は引き継がれる

• 発生から復旧まで10分以内ぐらい?(発生経験なし)

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 58

Page 59: 私のEC2 2015振り返り

StatusCheckFailed_Instance• 失敗したシステムステータスチェック• 正しくないネットワークまたは起動設定• メモリの枯渇• 破損したファイルシステム• 互換性のないカーネルインスタンス内部に問題があって修復が必要な時のエラー2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 59

Page 60: 私のEC2 2015振り返り

修復方法• 手動で再起動

• CloudWatchアラームのトリガーで再起動

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 60

Page 61: 私のEC2 2015振り返り

自動復旧と再起動で安心の年越し!

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 61

Page 63: 私のEC2 2015振り返り

~201510• CloudFormation Designer

• Route53 PrivateDNS

• SESでメール受信• CloudWatch Dashboards / Logs

• ElasticSearch Service

• EC2 Auto Recovery / Reboot

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 63

Page 64: 私のEC2 2015振り返り

201511~

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 64

Page 65: 私のEC2 2015振り返り

Lambda

Python2.7対応Cron対応

VPC対応予定2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 65

Page 66: 私のEC2 2015振り返り

スケジュールでのジョブ実行は、Lambdaと

Pipelineどちらがいいの?— BlackBelt 10月 座談会で質問してみた

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 66

Page 67: 私のEC2 2015振り返り

Lambda!Data PipeLine!

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 67

Page 68: 私のEC2 2015振り返り

No Server is Easier To Manage Than No Serverサーバーが無いに越したことはない— Amazon CTO.2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 68

Page 69: 私のEC2 2015振り返り

Lambda!EC2!

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 69

Page 70: 私のEC2 2015振り返り

2016 EC2❓

2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 70

Page 71: 私のEC2 2015振り返り

今年の機能は今年のうちに!2015/12/12 JAWS-UG福岡 ちょっと濃い目にAWSの話をしてみよう 71