Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Capacity Providers をもっと身近に / Introduction of Ca...
Search
mats
July 29, 2020
Technology
1
1.4k
Capacity Providers をもっと身近に / Introduction of Capacity Providers
2020/07/29 に行われた「夏の AWS コンテナ祭り with Amazon ECS」で使った資料です。
mats
July 29, 2020
Tweet
Share
More Decks by mats
See All by mats
「生成系AI」と「ソフトウェアライセンス」の今 / Generative AI and OSS License
mats16
4
1.7k
🦜️🔗LangChain入門 / LangChain 101
mats16
1
610
Supabase - AWS DevDay 2022
mats16
3
1.9k
AWS スタートアップ支援プログラム / AWS Activate
mats16
0
1.2k
AWS Startup ゼミ 2021 秋期講習 / AWS Startup Seminar 2021 Autumn class - AWS Dev Day
mats16
4
2.5k
Unicorns run on AWS
mats16
0
250
AWS Startup tech Meetup Online 6
mats16
0
1k
シードスタートアップに知っておいてほしいこと / What seed startups need to know
mats16
0
350
Introduction to AWS App Runner
mats16
0
1k
Other Decks in Technology
See All in Technology
事業と組織から目を逸らずに技術でリードする
ogugu9
19
5.2k
kernelvm-brain-net
raspython3
0
660
WindowsでGenesisに挑戦した話
natsutan
0
120
正解のない未知(インボイス制度対応)をフルサイクル開発で乗り越える方法 / How to overcome the unknown invoice system with full cycle development
carta_engineering
0
170
インフラからSREへ
mirakui
20
7.7k
名単体テスト 禁断の傀儡(モック)
iwamot
PRO
1
320
テストコードにはテストの意図を込めよう(2025年版) #retechtalk / Put the intent of the test 2025
nihonbuson
PRO
11
2.1k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
720
Amplifyとゼロからはじめた AIコーディング。失敗と気づき
mkdev10
1
170
ゆるくはじめるSLI・SLO
yatoum
1
120
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
71
19k
Опыт использования Nessie в Азбуке Вкуса
emeremyanina1234
0
360
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.4k
Side Projects
sachag
453
42k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
850
Docker and Python
trallard
44
3.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Optimizing for Happiness
mojombo
378
70k
Transcript
© 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
© 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
© 2020, Amazon Web Services, Inc. or its Affiliates. アジェンダ
• Capacity Providers って? • Capacity Providers ないとき • Capacity Providers あるとき • Capacity Providers の細かい話 • まとめ #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Providers って? #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Amazon
ECS Capacity Providers (Dec 3, 2019〜) • Capacity = • Provide = タスク(コンテナ)の配置先を決定するための新しい⽅法 タスクの配置先の柔軟なコントロールが可能になる 例えば、60%はオンデマンドで残りはスポット など • Capacity = タスク(コンテナ)を配置する先のコンピューティングリソース • つまり、EC2 や Fargate のこと • Provide = コンテナの実⾏に必要な量を調達 #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Providers ないとき
© 2020, Amazon Web Services, Inc. or its Affiliates. これまでの
ECS クラスターのスケーリング(その1) 基本的に EC2 の負荷の増⼤を起点にスケールするのでリアクティブ コンテナで動いているワークロード全体の状態を⾒ていない EC2 Auto Scaling Group ECS Cluster ECS Tasks #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. これまでの
ECS クラスターのスケーリング(その2) よりコンテナの動きに連動するメトリクスを⾒てはいるが、クラスタ全体のメトリクス であるため、復数のワークロードが共存する場合に適切に機能しないことも EC2 Auto Scaling Group ECS Cluster • Cluster • Cluster ECS Tasks #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Providers 登場前の課題 • コンテナのスケール前に EC2 をスケールさせる必要がある • コンテナをスケール出来る余剰を残しておく必要がある • コスト最適化の観点で不利 • 最⼩値を0にすることが出来ない • 復数の AutoScaling Group を扱う際の制御が複雑 • スケーリングまわりの設定が ECS から独⽴しており、エンジニアによっては 設定が複雑に感じることも • 込み⼊った要件の際は細かく設定できるので、いい⾯もある • そもそもコンテナと EC2 両⽅のスケーリングを考慮するのがメンドクサイ AWS Fargate で解決可能 #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Providers あるとき #ECSMatsuri
© 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
© 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
© 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
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Providers の細かい話 #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Amazon
ECS Capacity Providers で登場するリソースや機能 • Capacity Provider • Capacity Provider Strategy • Capacity Provider Reservation • Managed Scaling #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Provider #ECSMatsuri
© 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
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Provider Strategy #ECSMatsuri
© 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
© 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
© 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
© 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
© 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
© 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
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Provider Strategy #ECSMatsuri
© 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
© 2020, Amazon Web Services, Inc. or its Affiliates. Capacity
Provider Reservation クラスター内のすべてのコンテナワークロードが必要とする クラスターリソースの割合を表す新しいメトリクス 既存 / 新規 / 変更中 の Task が予約するキャパシティの予約率 このメトリクスを利⽤したスケーリングポリシーで Cluster Auto Scaling を実現している • 100が上限 → この場合リソースを使い切るまでスケールしない • ⼩さい値にする → 早めにスケールアウトし、急なスパイクに強くする #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Managed
Scaling #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Managed
Scaling Auto Scaling グループのキャパシ ティープロバイダー⽤のマネージド型 スケーリングを有効または無効にでき ます。マネージド型スケーリングが有 効になっていると、Amazon ECS が Auto Scaling グループのスケールイン およびスケールアウトのアクションを 管理します。 AutoScaling group Amazon ECS ECS が ASG を 直接制御 #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Managed
Scaling Capacity Provider EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. Managed
Scaling Capacity Provider EC2 Auto Scaling Group ECS Cluster • Capacity Provider Reservation ECS Tasks #ECSMatsuri
© 2020, Amazon Web Services, Inc. or its Affiliates. まとめ
#ECSMatsuri
© 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
© 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
© 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
© 2020, Amazon Web Services, Inc. or its Affiliates. Thank
you! Kazuki Matsuda @mats16k
© 2020, Amazon Web Services, Inc. or its Affiliates. Appendix
© 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 時点での料⾦
© 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 で稼働させるべきではなく、 ⼀⽅で中断耐性のあるワークロードに対しては、コスト最適化に⼤きく貢献する