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

CloudWatch Eventsを使った ECSのAutoScaling

Editor's Notes

  • #3 * パワハラならぬプロハラ、キラカード扱いです
  • #38 セキュリティ IoT データ分析 機械学習 iOS、Adnroidアプリ、バックエンド
  • #39 セキュリティ IoT データ分析 機械学習 iOS、Adnroidアプリ、バックエンド
  • #40 AWSJ ソラコム SAP トレンドマイクロ ソフォス ぷらっとホーム