Slide 1

Slide 1 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Kazuki Matsuda @mats16k Startup Solutions Architect | Amazon Web Services Japan Capacity Providers をもっと⾝近に 夏のAWSコンテナ祭り with Amazon ECS #ECSMatsuri

Slide 2

Slide 2 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Kazuki Matsuda @mats16k Startup Solutions Architect Amazon Web Services Japan --- インターネット広告代理店(のアドサーバ作っている部⾨)でインフラエンジニアに ➡ アドテク系スタートアップ⼆⼈⽬のエンジニア(SRE、アプリ開発、情シス、データエンジニア、採⽤) ➡ AWS でスタートアップ⽀援 & コンテナのスペシャリスト AWS Fargate / AWS Lambda あたりが好きです 最近は AWS Amplify と Amazon Chime SDK がイチオシ #ECSMatsuri

Slide 3

Slide 3 text

© 2020, Amazon Web Services, Inc. or its Affiliates. アジェンダ • Capacity Providers って? • Capacity Providers ないとき • Capacity Providers あるとき • Capacity Providers の細かい話 • まとめ #ECSMatsuri

Slide 4

Slide 4 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Providers って? #ECSMatsuri

Slide 5

Slide 5 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Amazon ECS Capacity Providers (Dec 3, 2019〜) • Capacity = • Provide = タスク(コンテナ)の配置先を決定するための新しい⽅法 タスクの配置先の柔軟なコントロールが可能になる 例えば、60%はオンデマンドで残りはスポット など • Capacity = タスク(コンテナ)を配置する先のコンピューティングリソース • つまり、EC2 や Fargate のこと • Provide = コンテナの実⾏に必要な量を調達 #ECSMatsuri

Slide 6

Slide 6 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Providers ないとき

Slide 7

Slide 7 text

© 2020, Amazon Web Services, Inc. or its Affiliates. これまでの ECS クラスターのスケーリング(その1) 基本的に EC2 の負荷の増⼤を起点にスケールするのでリアクティブ コンテナで動いているワークロード全体の状態を⾒ていない EC2 Auto Scaling Group ECS Cluster ECS Tasks #ECSMatsuri

Slide 8

Slide 8 text

© 2020, Amazon Web Services, Inc. or its Affiliates. これまでの ECS クラスターのスケーリング(その2) よりコンテナの動きに連動するメトリクスを⾒てはいるが、クラスタ全体のメトリクス であるため、復数のワークロードが共存する場合に適切に機能しないことも EC2 Auto Scaling Group ECS Cluster • Cluster • Cluster ECS Tasks #ECSMatsuri

Slide 9

Slide 9 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Providers 登場前の課題 • コンテナのスケール前に EC2 をスケールさせる必要がある • コンテナをスケール出来る余剰を残しておく必要がある • コスト最適化の観点で不利 • 最⼩値を0にすることが出来ない • 復数の AutoScaling Group を扱う際の制御が複雑 • スケーリングまわりの設定が ECS から独⽴しており、エンジニアによっては 設定が複雑に感じることも • 込み⼊った要件の際は細かく設定できるので、いい⾯もある • そもそもコンテナと EC2 両⽅のスケーリングを考慮するのがメンドクサイ AWS Fargate で解決可能 #ECSMatsuri

Slide 10

Slide 10 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Providers あるとき #ECSMatsuri

Slide 11

Slide 11 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Capacity Providers による ECS クラスターのスケーリング コンテナワークロードの状態を反映したメトリクスを元にスケーリング EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks Capacity Provider が⾃動的に設定 #ECSMatsuri

Slide 12

Slide 12 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Providers による ECS クラスターのスケーリング • 復数の Capacity Provider を利⽤ することも可能 • 戦略に基づいてタスクを配置する (詳細は後述) EC2 Auto Scaling Group EC2 Auto Scaling Group CapacityProvider A CapacityProvider B ECS Tasks 4 weight: 1 weight: 1 ECS Cluster #ECSMatsuri

Slide 13

Slide 13 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Providers による ECS クラスターのスケーリング • 復数の Capacity Provider を利⽤ することも可能 • 戦略に基づいてタスクを配置する (詳細は後述) • 例えば、オンデマンド 60% スポットインスタンス 40% • EC2 ⾃体の⽐率ではなく、 ECS Task の配置先の⽐率 EC2 Auto Scaling Group EC2 Auto Scaling Group CapacityProvider A CapacityProvider C ECS Tasks 10 weight: 3 weight: 2 ECS Cluster Spot Instance #ECSMatsuri

Slide 14

Slide 14 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Providers の細かい話 #ECSMatsuri

Slide 15

Slide 15 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Amazon ECS Capacity Providers で登場するリソースや機能 • Capacity Provider • Capacity Provider Strategy • Capacity Provider Reservation • Managed Scaling #ECSMatsuri

Slide 16

Slide 16 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider #ECSMatsuri

Slide 17

Slide 17 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider • ECS とコンテナ実⾏基盤(AutoScaling Group、Fargate)の間のインターフェー スとしてリソースの抽象化を⾏う • AutoScaling Group や Fargate という グループを1つの Capacity Provider と 定義して、クラスタに紐づけて利⽤ { "autoScalingGroupArn": "string", "managedScaling": { "status": "ENABLED"|"DISABLED", "targetCapacity": integer[1-100], "minimumScalingStepSize": integer, "maximumScalingStepSize": integer }, "managedTerminationProtection": "ENABLED"|"DISABLED" } ECS Cluster EC2 Auto Scaling Group CapacityProvider - Targaet Capacity : 60 - Managed Scaling : True - Managed Termination Protection : True #ECSMatsuri

Slide 18

Slide 18 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy #ECSMatsuri

Slide 19

Slide 19 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy • タスクをどの Capacity Provider に 配置するかを決定する「戦略」 • Task 実⾏や Service を作成する際に 指定する • base と weight を使⽤して、複数の Capacity Provider にまたがって配置 することも可能 Default Capacity Provider Strategy • ECS クラスタがデフォルトで利⽤する Capacity Provider Strategy • Capacity Provider Strategy を指定せずに Task を実⾏した際に利⽤される ECS Cluster EC2 Auto Scaling Group EC2 Auto Scaling Group CapacityProvider A CapacityProvider B ECS Tasks ECS Tasks weight: 2 weight: 1 #ECSMatsuri

Slide 20

Slide 20 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy • weight : 実⾏するタスクの総数に対する指定 した Capacity Provider での相対的な割合 • base : その Capacity Provider での最⼩実⾏ タスク数 ECS Cluster EC2 Auto Scaling Group EC2 Auto Scaling Group CapacityProvider A CapacityProvider B ECS Tasks 6 weight: 5 weight: 1 aws ecs run-task --cluster FargateCluster --task-definition task-def-family:revision --count 6 --capacity-provider-strategy capacityProvider=CapacityProviderA,weight=5 capacityProvider=CapacityProviderB,weight=1 #ECSMatsuri

Slide 21

Slide 21 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy • weight : 実⾏するタスクの総数に対する指定 した Capacity Provider での相対的な割合 • base : その Capacity Provider での最⼩実⾏ タスク数 ECS Cluster aws ecs run-task --cluster FargateCluster --task-definition task-def-family:revision --count 6 --capacity-provider-strategy capacityProvider=CapacityProviderA,weight=2,base=2 capacityProvider=CapacityProviderB,weight=1 EC2 Auto Scaling Group EC2 Auto Scaling Group CapacityProvider A CapacityProvider B ECS Tasks 6 base: 2 weight: 1 weight: 1 #ECSMatsuri

Slide 22

Slide 22 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy with AWS Fargate • Fargate 利⽤時も基本的な考え⽅は同じ • Fargate Spot は別の CapacityProvider で扱う 注意点 ※ 2020-07-29 時点 • 特定の Capacity Provider で起動できない場合 にフォールバックすることは出来ない • AutoScaling Group の Capacity Provider と 混在させて Storategy を組むことは出来ない ECS Cluster AWS Fargate AWS Fargate Spot CapacityProvider A CapacityProvider B ECS Tasks ECS Tasks base: 1 weight: 1 weight: 1 #ECSMatsuri

Slide 23

Slide 23 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy with AWS Fargate • Fargate 利⽤時も基本的な考え⽅は同じ • Fargate Spot は別の CapacityProvider で扱う 注意点 ※ 2020-07-29 時点 • 特定の Capacity Provider で起動できない場合 にフォールバックすることは出来ない • AutoScaling Group の Capacity Provider と 混在させて Storategy を組むことは出来ない ECS Cluster AWS Fargate CapacityProvider A CapacityProvider C ECS Tasks base: 1 weight: 1 weight: 1 EC2 AutoScaling Group #ECSMatsuri

Slide 24

Slide 24 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy with AWS Fargate • Fargate 利⽤時も基本的な考え⽅は同じ • Fargate Spot は別の CapacityProvider で扱う 注意点 ※ 2020-07-29 時点 • 特定の Capacity Provider で起動できない場合 にフォールバックすることは出来ない • AutoScaling Group の Capacity Provider と 混在させて Storategy を組むことは出来ない ECS Cluster AWS Fargate CapacityProvider A CapacityProvider C ECS Tasks EC2 AutoScaling Group ECS Tasks #ECSMatsuri

Slide 25

Slide 25 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Strategy #ECSMatsuri

Slide 26

Slide 26 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Reservation Capacity Provider EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks #ECSMatsuri

Slide 27

Slide 27 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider Reservation クラスター内のすべてのコンテナワークロードが必要とする クラスターリソースの割合を表す新しいメトリクス 既存 / 新規 / 変更中 の Task が予約するキャパシティの予約率 このメトリクスを利⽤したスケーリングポリシーで Cluster Auto Scaling を実現している • 100が上限 → この場合リソースを使い切るまでスケールしない • ⼩さい値にする → 早めにスケールアウトし、急なスパイクに強くする #ECSMatsuri

Slide 28

Slide 28 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Managed Scaling #ECSMatsuri

Slide 29

Slide 29 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Managed Scaling Auto Scaling グループのキャパシ ティープロバイダー⽤のマネージド型 スケーリングを有効または無効にでき ます。マネージド型スケーリングが有 効になっていると、Amazon ECS が Auto Scaling グループのスケールイン およびスケールアウトのアクションを 管理します。 AutoScaling group Amazon ECS ECS が ASG を 直接制御 #ECSMatsuri

Slide 30

Slide 30 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Managed Scaling Capacity Provider EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks #ECSMatsuri

Slide 31

Slide 31 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Managed Scaling Capacity Provider EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks #ECSMatsuri

Slide 32

Slide 32 text

© 2020, Amazon Web Services, Inc. or its Affiliates. まとめ #ECSMatsuri

Slide 33

Slide 33 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider の実体 • CloudWatch に専⽤のメトリクスを作る • Strategy に基づいてタスク実⾏状況 (コンテナオーケストレーション)を メトリクスに反映する Capacity Provider EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks #ECSMatsuri

Slide 34

Slide 34 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity Provider の実体 Capacity Provider EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks • Managed Scaling を有効にすると、Alarm と Scaling Policy が設定される • Alarm と Scaling Policy の設定変更は Capacity Provider からのみ⾏える #ECSMatsuri

Slide 35

Slide 35 text

© 2020, Amazon Web Services, Inc. or its Affiliates. まとめ • Capacity Providers のコアはタスク配置時(コンテナオーケストレーション) の Strategy の考慮とメトリクスコントロール • 基本的な仕組みは CloudWatch や EC2 Auto Scaling のものを利⽤している • Capacity Provider 側で Managed Scaling の設定をするだけで、 CloudWatch Alarm や EC2 Auto Scaling の設定が可能 #ECSMatsuri

Slide 36

Slide 36 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Thank you! Kazuki Matsuda @mats16k

Slide 37

Slide 37 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Appendix

Slide 38

Slide 38 text

© 2020, Amazon Web Services, Inc. or its Affiliates. AWS Fargate Spot - 柔軟な設定の選択肢 ‒ 50 のCPU/メモリ設定から - 通常の Fargate の価格と⽐較して 最⼤70% の割引 Price 1 vCPU $0.01553623 1 GB Mem $0.00169927 AWS Fargate Pricing https://aws.amazon.com/fargate/pricing/ Price 1 vCPU $0.05056 1 GB Mem $0.00553 Fargate Spot Standard Fargate ※ 上記はTokyoリージョン 2020-07-29 時点での料⾦

Slide 39

Slide 39 text

© 2020, Amazon Web Services, Inc. or its Affiliates. AWS Fargate Spot AWS にキャパシティが必要になったと き、Fargate Spot で稼働するタスクは 2分前の通知とともに中断される - ECS Task State Change として Amazon EventBridge にイベント送信 - SIGTERM シグナルが実⾏中のタスクに送信 クリーンアップアクションを実⾏する には、コンテナ内から SIGTERM シグナルを受信する必要がある Task の中断について AWS Fargate Spot Spot 中断 Amazon EventBridge Task Container Container Task Container Container Service ECS Task State Change として イベント送信 SIGTERM シグナル が実⾏中のタスク に送信 中断が許容できないワークロードを Fargate Spot で稼働させるべきではなく、 ⼀⽅で中断耐性のあるワークロードに対しては、コスト最適化に⼤きく貢献する