Upload
-
View
2.305
Download
0
Embed Size (px)
Citation preview
CloudWatch Events を使ったECS の AutoScaling
千葉 淳
2016/2/5
2
自己紹介
所属:クラスメソッド株式会社
仕事:ソリューションアーキテクト
名前:千葉 淳(ちば じゅん)
好きなAWSサービス: Lambda
3
アジェンダ
1.はじめに
2.CloudWatch Events とは?
3.ECS の AutoScaling の構成
4.ECS の AutoScaling の設定
5.まとめ
4
はじめに
•今日のお話し
ECS ではコンテナの AutoScaling は未対応
なので、 CloudWatch Events で AutoScaling を実装した話
構成や設定方法、 ECS スケールの課題なんかをお話します!
5
デモ
動け、動け!動いてよ! EC2!
6
CloudWatch Events とは?
• 2015/1/15 に発表された新サービス
• CloudWatch + SNS との違いは設定・管理が楽(CloudWatch Events で一元管理できる )
• API ドリブンで Lambda を発火させられる
7
デモ
CloudWatch Events で pending を検知、即 stop絶対に起動させない ( なぜやった )
8
デモ – CloudWatch Events の設定 -
トリガー設定 挙動設定
指定インスタンスが Pending 指定インスタンスを Stop
9
CloudWatch Events 比較
• 参考: http://dev.classmethod.jp/cloud/aws/introducing-cloudwatch-events/
10
CloudWatch Events をガンガン使う
• ブループリントが用意されている EBS の定期スナップショット
EC2 の定期起動・停止
• 様々な API をトリガーに Lambda を発火
11
CloudWatch Events をガンガン使う
• ブループリントが用意されている EBS の定期スナップショット
EC2 の定期起動・停止
• 様々な API をトリガーに Lambda を発火
夢は無限大
12
今日はこの CloudWatch Events を使って
ECS をスケールアップしてみます!
13
アーキテクチャ編
14
ECS を AutoScaling するための構成
15
ECS スケールシーケンス詳細
CloudWatch で負荷検知
AutoScaling(ECS クラスタ増減 )
CloudWatch Events でLambda 発火
ECS サービスの Desired 変更
コンテナ pull
コンテナ起動
ELB 組み込み
16
設定編
17
ELB 作成
HTTP:80 で作成
18
ECR – リポジトリ作成 -
リポジトリを作成
リポジトリへの push 等の権限を付与( 許可アカウント、 IAM を指定 )
19
ECR – イメージの push -
# docker pull httpd:2.4# aws ecr get-login --region us-east-1 | bash# docker tag httpd:2.4 [AWS アカウント
ID].dkr.ecr.us-east-1.amazonaws.com/ecs-sample-rep:latest
# docker push [AWS アカウント ID].dkr.ecr.us-east-1.amazonaws.com/ecs-sample-rep:latest
ECR へ push するために EC2 を作成し、 AWS CLI を利用できる環境を用意( アクセスキーの設定もしておく )
ECR に push される
20
ECS - Task Definitions の作成 -ECR に push したイメージを指定
任意の実行コマンドを指定(html ファイル作成、 httpd 起動など )
ポート番号を指定
21
ECS – Clusters の作成 -
ECS クラスタを作成(AutoScaling で起動した EC2 が登録される )
22
ECS – サービスの作成 -
作成した Task Definitions を指定
ELB 、ポート番号を指定
23
AutoScaling – 起動設定 -
【 ECS クラスタ用の AMI を指定】AMI : amzn-ami-2015.09.e-amazon-ecs-optimized参考 :http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/launch_container_instance.html
【ユーザーデータ】ECS エージェントの設定。 ECS クラスタ名を指定する
#!/bin/bashecho ECS_CLUSTER=docker-build >> /etc/ecs/ecs.config
24
AutoScaling – グループ設定 -
ECS で ELB 組み込み制御を行うのでここでは指定しない
スケーリングポリシーは環境に合わせて指定
25
Lambda - ECS の Desired をアップデート -
ソースコードはこちらhttp://dev.classmethod.jp/cloud/aws/ecs-cloudwatch-events/
26
Lambda – 処理概要 -
① CloudWatch Events の Input configure から ECS クラスタ名や AutoScaling 名を取得
② AutoScaling の現在の Desired の値を取得
③ ECS サービスの Dsired の値を、 AutoScaling の Dsired の値に
アップデート
27
CloudWatch Events – ルール作成 -
・スケールアウト・インをトリガー
・対象の AutoScaling グループ名を指定
・ ECS スケール用の Lambda ファンクションを指定
・ Configure input を指定 ( 次ページ )
28
CloudWatch Events – Configure input の指定 -
{ "AutoScalingName": "ecs-cluster", "EcsClusterName": "docker-build", "EcsRegion": "us-east-1", "EcsServiceName": "sample-app"}※ 改行を削除し、 Configure input へ入力
AutoScalingName“: AutoScaling グループ名を指定EcsClusterName“: ECS クラスタ名を指定EcsRegion : ECS が存在するリージョンを指定EcsServiceName“: ECS サービス名を指定
29
デモ
ECR の AutoScaling
30
デモ
AutoScaling のDesired を増やす
ECS サービスのDesired をアップデート
31
課題
• AutoScaling 発動から ELB 組み込みまでの時間が長い
• コンテナ単位の AutoScaling はできない
※スケールは ECS クラスタ単位
32
今回の構成での AutoScaling 時間• 5 分の壁
通常 時間 ( 秒 )スケール検知 60EC2 作成 120ECS 登録 20コンテナ起動完了 ( サイズ 200MB) 80ELB 経由での crul 成功時間 15合計 最大約 5 分参考: EC2 ネイティブは最大 3 分半
スパイクアクセスに対応するにはCloudFront との併用も検討
33
コンテナ単位での AutoScaling ができないECS インスタンス上のコンテナは同じものを配置する
EC2 のリソースをトリガーにスケールします
コンテナ A のみスケールするということは実施できません
1 インスタンスに同じコンテンは 1 つしか起動できません
ポートの競合が発生します
34
まとめ
• ECS でオートスケーリングが実現できた
• ただし、課題があるスケールに時間がかかる
コンテナ単位でのスケールができない
【今後の展望 ( 要望 ) 】柔軟なスケーリングを目指してEC2レイヤーをマネージド化
Container as a Service へ
35
クラスメソッドは
人々の創造的活動に貢献し続けます !!
36
2/20(土曜日 )Coming Soon!
37
Developers.IO 2016開催
38
Developers.IO 2016開催
セキュリティ
IoTデータ分析
機械学習
iOS アプリAndroid アプリ
モバイルバックエンド
39
Developers.IO 2016開催
MIT出身、元 NASA 、元 AWS のエンジニア登壇
旬な話題をお届けします!