Slide 1

Slide 1 text

ECS Capacity Providersと これからのオートスケーリング RecoChoku Tech Night 5社合同 AWS re:Invent 2019 参加報告会 rinrin

Slide 2

Slide 2 text

2 • 林 裕一郎 a.k.a rinrin(@rinrinhhhh) • re:Inventは2回目 • AWSを利用したアーキテクチャ設計/移行 • 画像解析 • EKSを使いたいECS派 • でも本当はサーバーレス❤ • クラフト❤ 自己紹介 ΩλϜϥɾϗʔϧσΟϯάε ɾɾɾ テックリード Co-Founder CTO フォトライフ提案企業グループ お手伝い

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

5 re:Invent期間中のECS事情 • Fargate Spot • ECS Capacity Providers • ECS Cluster Auto Scaling • Windows グループ管理サービスアカウント (gMSA) をサポート • (期間前) • ECS ServiceイベントがCloudWatch Eventsに対応 • FireLensがKinesis Data Streamsに対応 新サービス • KeynoteはML一色で少し寂しい… • 現地ではコンテナ飲み会で激論 • ECS派 vs EKS派 • https://dev.classmethod.jp/cloud/aws/ container-happy-hour/ 現地の雰囲気 TODAY TODAY TODAY

Slide 6

Slide 6 text

6 今までのオートスケーリング

Slide 7

Slide 7 text

7 • スケールアウトは簡単 • EC2の起動に時間がかかるので、迅速なスケー ルアウトが必要な場合は、オーバープロビジョ ニングするのもあり 今までのスケールアウト Auto Scaling group ECS Amazon CloudWatch Task Task Task Task ① ECS Serviceがスケールアウト Auto Scaling group ECS Task Task Task Task ③ EC2も追いかけてスケールアウト ②タスクのCPU予約率が100%より多い etc

Slide 8

Slide 8 text

8 • まだタスクが動いているEC2インスタンスを ASGが終了させてしまう • ASGはECSのことは知らない 今までのスケールインの問題 Auto Scaling group ECS Task Task ① ECS Serviceがスケールイン Auto Scaling group ECS Task Task ③ EC2も追いかけてスケールイン ②タスクのCPU予約率が50%以下 etc !?

Slide 9

Slide 9 text

9 • 引越し方式 • 事前にDRAINING状態にして、タスクの移動と新しいタスクの起動を抑制 する • https://aws.amazon.com/jp/blogs/news/how-to-automate-container- instance-draining-in-amazon-ecs/ (Amazon Web Services ブログ) • ブロック方式 • 許可したインスタンスしか終了させない • https://developers.cyberagent.co.jp/blog/archives/14664/ (CyberAgent Developers Blog) • ちなみにスポットインスタンス終了は、自動でDRAINING状態にしてくれる https://aws.amazon.com/jp/about-aws/whats-new/2019/09/amazon-ecs- supports-automated-draining-for-spot-instances-running-ecs-services/ 今までのスケールインの対策 Auto Scaling group ECS Task Task ASGのライフサイクルフックで、 事前にインスタンスをDRAININGに ②タスクのCPU予約率が50%以下 etc 移動 Auto Scaling group ECS Task Task スケールインからの保護が有効 タスク数が0なら保護を解除して終了対象に 引越し方式 ブロック方式

Slide 10

Slide 10 text

10 オートスケーリングは地味にめんどくさかった…

Slide 11

Slide 11 text

11 • Capacity Providerを介してインフラを管理 • ASGと連携してオートスケーリング (Amazon ECS Cluster Auto Scaling) • Fargateも対応 Amazon ECS Capacity Providers Amazon ECS Cluster Auto Scaling NEW Auto Scaling group ECS Capacity Provider Capacity Provider Strategy ECS Capacity Provider Capacity Provider Strategy Task Task Task Task

Slide 12

Slide 12 text

12 • Capacity Provider Reservationという新しい メトリックが自動で作成される • クラスタリソースが何%利用されているか • 維持するクラスタリソースの割合(%)は Capacity Provider作成時に指定 • ASG側にターゲット追跡スケーリングポリ シーとCloudWatch Alarmが自動で作成され る Capacity Providerのスケールアウト Auto Scaling group ECS Task Task Capacity Provider Capacity Provider Strategy Auto Scaling group ECS Task Task Task Task Capacity Provider Capacity Provider Strategy ① ECS Serviceがスケールアウト ③ EC2も追いかけてスケールアウト ② Capacity Provider Reservationメト リックが100%よりも多い Task Task

Slide 13

Slide 13 text

13 • Managed termination protection • タスクが実行されているインスタンスは終了 しないように保護 • 今までの苦労 Capacity Providerのスケールイン Auto Scaling group ECS Task Task Capacity Provider Capacity Provider Strategy Auto Scaling group ECS Task Task Capacity Provider Capacity Provider Strategy ① ECS Serviceがスケールイン ③ EC2も追いかけてスケールイン ② 15分間Capacity Provider Reservation メトリックが70%よりも少ない

Slide 14

Slide 14 text

14 • 複数のCapacity Providerを組み合わせること が可能 • Weightを使って利用比率を設定 スポットインスタンスの利用 ECS Default Capacity Provider Capacity Provider Strategy Capacity Provider Weight: 1 Weight: 2 タスク数 オンデマンド スポット 1 1 0 2 1 1 3 1 2 4 2 2 5 2 3 6 2 4 7 3 4 タスクの増え方 オンデマンド(Weight: 1)が1増えたら スポットは(Weight: 2)は2増える Auto Scaling group オンデマンド Auto Scaling group スポット

Slide 15

Slide 15 text

15 • インフラチームの手が回らない案件は、スピード優先でFargateを導入! • 高い(予算に合わない) • カーネルパラメータがいじれない(net.core.somaxconn etc) • リソースが使い切れない • リソースが使い切れないから、オートスケーリングの設定もシンプルにできない • ECS on EC2でもコンテナインスタンスの管理が楽ちんになるサービス出ないかなー フォトクリエイトのコンテナ事情 before re:Invent

Slide 16

Slide 16 text

16 on EC2でもオートスケーリング楽やん! よし!Fargateやめよう!...?

Slide 17

Slide 17 text

17 • スポットインスタンスのFargate版 • 70%割引 • 2019/12現在、利用者が少ないためほぼ落ちない Fargate Spot NEW

Slide 18

Slide 18 text

18 • オンデマンドとスポットのFargateをCapacity Providersで組み合わせる • EC2スポットインスタンスと比べるとまだ高い が、あまりにも簡単 Fargate Spot + Capacity Providers ECS Default Capacity Provider Capacity Provider Strategy Capacity Provider AWS Fargate AWS Fargate Spot Weight: 1 Weight: 2

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

22 Baseの指定値まではWeightを無視して増加する (一つのCapacity Providerのみで指定可能) ※タスク実行でしか使われない

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

24 Fargate : Fargate Spot = 2 : 3

Slide 25

Slide 25 text

25 簡単すぎ

Slide 26

Slide 26 text

26 • 自動生成されるCloudWatch Alarmのデータポイントをカスタマイズしたい • スケールアウトは1ポイント(1分間隔)、スケールインは15ポイント(1分間隔) • CloudFormationのサポート • 本番導入には切実 • Terraformはもう来てた https://www.terraform.io/docs/providers/aws/r/ecs_capacity_provider.html • Capacity Providerの変更(今は削除&作成で代替) • Capacity Providerの削除(今はDeactiveで見えなくなってるだけ) • Fargateのカーネルパラメータ対応 • 特定のパラメータだけでもいいから頼む… 今後期待すること

Slide 27

Slide 27 text

27 オートスケーリングはAWSに任せて 本質的な開発に集中しよう!