39
CloudWatch Events をををを ECS を AutoScaling をを を 2016/2/5

CloudWatch Eventsを使ったECSのAutoScaling

  • Upload
    -

  • View
    2.305

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CloudWatch Eventsを使ったECSのAutoScaling

CloudWatch Events を使ったECS の AutoScaling

千葉 淳

2016/2/5

Page 2: CloudWatch Eventsを使ったECSのAutoScaling

2

自己紹介

所属:クラスメソッド株式会社

仕事:ソリューションアーキテクト

名前:千葉 淳(ちば じゅん)

好きなAWSサービス: Lambda

Page 3: CloudWatch Eventsを使ったECSのAutoScaling

3

アジェンダ

1.はじめに

2.CloudWatch Events とは?

3.ECS の AutoScaling の構成

4.ECS の AutoScaling の設定

5.まとめ

Page 4: CloudWatch Eventsを使ったECSのAutoScaling

4

はじめに

•今日のお話し

ECS ではコンテナの AutoScaling は未対応

なので、 CloudWatch Events で AutoScaling を実装した話

構成や設定方法、 ECS スケールの課題なんかをお話します!

Page 5: CloudWatch Eventsを使ったECSのAutoScaling

5

デモ

動け、動け!動いてよ! EC2!

Page 6: CloudWatch Eventsを使ったECSのAutoScaling

6

CloudWatch Events とは?

• 2015/1/15 に発表された新サービス

• CloudWatch + SNS との違いは設定・管理が楽(CloudWatch Events で一元管理できる )

• API ドリブンで Lambda を発火させられる

Page 7: CloudWatch Eventsを使ったECSのAutoScaling

7

デモ

CloudWatch Events で pending を検知、即 stop絶対に起動させない ( なぜやった )

Page 8: CloudWatch Eventsを使ったECSのAutoScaling

8

デモ – CloudWatch Events の設定 -

トリガー設定 挙動設定

指定インスタンスが Pending 指定インスタンスを Stop

Page 9: CloudWatch Eventsを使ったECSのAutoScaling

9

CloudWatch Events 比較

• 参考: http://dev.classmethod.jp/cloud/aws/introducing-cloudwatch-events/

Page 10: CloudWatch Eventsを使ったECSのAutoScaling

10

CloudWatch Events をガンガン使う

• ブループリントが用意されている EBS の定期スナップショット

EC2 の定期起動・停止

• 様々な API をトリガーに Lambda を発火

Page 11: CloudWatch Eventsを使ったECSのAutoScaling

11

CloudWatch Events をガンガン使う

• ブループリントが用意されている EBS の定期スナップショット

EC2 の定期起動・停止

• 様々な API をトリガーに Lambda を発火

夢は無限大

Page 12: CloudWatch Eventsを使ったECSのAutoScaling

12

今日はこの CloudWatch Events を使って

ECS をスケールアップしてみます!

Page 13: CloudWatch Eventsを使ったECSのAutoScaling

13

アーキテクチャ編

Page 14: CloudWatch Eventsを使ったECSのAutoScaling

14

ECS を AutoScaling するための構成

Page 15: CloudWatch Eventsを使ったECSのAutoScaling

15

ECS スケールシーケンス詳細

CloudWatch で負荷検知

AutoScaling(ECS クラスタ増減 )

CloudWatch Events でLambda 発火

ECS サービスの Desired 変更

コンテナ pull

コンテナ起動

ELB 組み込み

Page 16: CloudWatch Eventsを使ったECSのAutoScaling

16

設定編

Page 17: CloudWatch Eventsを使ったECSのAutoScaling

17

ELB 作成

HTTP:80 で作成

Page 18: CloudWatch Eventsを使ったECSのAutoScaling

18

ECR – リポジトリ作成 -

リポジトリを作成

リポジトリへの push 等の権限を付与( 許可アカウント、 IAM を指定 )

Page 19: CloudWatch Eventsを使ったECSのAutoScaling

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 される

Page 20: CloudWatch Eventsを使ったECSのAutoScaling

20

ECS - Task Definitions の作成 -ECR に push したイメージを指定

任意の実行コマンドを指定(html ファイル作成、 httpd 起動など )

ポート番号を指定

Page 21: CloudWatch Eventsを使ったECSのAutoScaling

21

ECS – Clusters の作成 -

ECS クラスタを作成(AutoScaling で起動した EC2 が登録される )

Page 22: CloudWatch Eventsを使ったECSのAutoScaling

22

ECS – サービスの作成 -

作成した Task Definitions を指定

ELB 、ポート番号を指定

Page 23: CloudWatch Eventsを使ったECSのAutoScaling

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

Page 24: CloudWatch Eventsを使ったECSのAutoScaling

24

AutoScaling – グループ設定 -

ECS で ELB 組み込み制御を行うのでここでは指定しない

スケーリングポリシーは環境に合わせて指定

Page 25: CloudWatch Eventsを使ったECSのAutoScaling

25

Lambda - ECS の Desired をアップデート -

ソースコードはこちらhttp://dev.classmethod.jp/cloud/aws/ecs-cloudwatch-events/

Page 26: CloudWatch Eventsを使ったECSのAutoScaling

26

Lambda – 処理概要 -

① CloudWatch Events の Input configure から ECS クラスタ名や AutoScaling 名を取得

② AutoScaling の現在の Desired の値を取得

③ ECS サービスの Dsired の値を、 AutoScaling の Dsired の値に

 アップデート

Page 27: CloudWatch Eventsを使ったECSのAutoScaling

27

CloudWatch Events – ルール作成 -

・スケールアウト・インをトリガー

・対象の AutoScaling グループ名を指定

・ ECS スケール用の Lambda ファンクションを指定

・ Configure input を指定 ( 次ページ )

Page 28: CloudWatch Eventsを使ったECSのAutoScaling

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 サービス名を指定

Page 29: CloudWatch Eventsを使ったECSのAutoScaling

29

デモ

ECR の AutoScaling

Page 30: CloudWatch Eventsを使ったECSのAutoScaling

30

デモ

AutoScaling のDesired を増やす

ECS サービスのDesired をアップデート

Page 31: CloudWatch Eventsを使ったECSのAutoScaling

31

課題

• AutoScaling 発動から ELB 組み込みまでの時間が長い

• コンテナ単位の AutoScaling はできない

 ※スケールは ECS クラスタ単位

Page 32: CloudWatch Eventsを使ったECSのAutoScaling

32

今回の構成での AutoScaling 時間• 5 分の壁

通常 時間 ( 秒 )スケール検知 60EC2 作成 120ECS 登録 20コンテナ起動完了 ( サイズ 200MB) 80ELB 経由での crul 成功時間 15合計 最大約 5 分参考: EC2 ネイティブは最大 3 分半

スパイクアクセスに対応するにはCloudFront との併用も検討

Page 33: CloudWatch Eventsを使ったECSのAutoScaling

33

コンテナ単位での AutoScaling ができないECS インスタンス上のコンテナは同じものを配置する

EC2 のリソースをトリガーにスケールします

コンテナ A のみスケールするということは実施できません

1 インスタンスに同じコンテンは 1 つしか起動できません

ポートの競合が発生します

Page 34: CloudWatch Eventsを使ったECSのAutoScaling

34

まとめ

• ECS でオートスケーリングが実現できた

• ただし、課題があるスケールに時間がかかる

コンテナ単位でのスケールができない

【今後の展望 ( 要望 ) 】柔軟なスケーリングを目指してEC2レイヤーをマネージド化

Container as a Service へ

Page 35: CloudWatch Eventsを使ったECSのAutoScaling

35

クラスメソッドは

人々の創造的活動に貢献し続けます !!

Page 36: CloudWatch Eventsを使ったECSのAutoScaling

36

2/20(土曜日 )Coming Soon!

Page 37: CloudWatch Eventsを使ったECSのAutoScaling

37

Developers.IO 2016開催

Page 38: CloudWatch Eventsを使ったECSのAutoScaling

38

Developers.IO 2016開催

セキュリティ

IoTデータ分析

機械学習

iOS アプリAndroid アプリ

モバイルバックエンド

Page 39: CloudWatch Eventsを使ったECSのAutoScaling

39

Developers.IO 2016開催

MIT出身、元 NASA 、元 AWS のエンジニア登壇

旬な話題をお届けします!