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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
mats
July 29, 2020
Technology
1
1.6k
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
2.4k
🦜️🔗LangChain入門 / LangChain 101
mats16
1
680
Supabase - AWS DevDay 2022
mats16
3
2.1k
AWS スタートアップ支援プログラム / AWS Activate
mats16
0
1.3k
AWS Startup ゼミ 2021 秋期講習 / AWS Startup Seminar 2021 Autumn class - AWS Dev Day
mats16
4
2.7k
Unicorns run on AWS
mats16
0
320
AWS Startup tech Meetup Online 6
mats16
0
1.1k
シードスタートアップに知っておいてほしいこと / What seed startups need to know
mats16
0
400
Introduction to AWS App Runner
mats16
0
1.1k
Other Decks in Technology
See All in Technology
"作る"から"使われる"へ:Backstage 活用の現在地
sbtechnight
0
190
AIエージェント、 社内展開の前に知っておきたいこと
oracle4engineer
PRO
2
150
PMとしての意思決定とAI活用状況について
lycorptech_jp
PRO
0
140
楽しく学ぼう!ネットワーク入門
shotashiratori
1
470
OSC仙台プレ勉強会 AlmaLinuxとは
koedoyoshida
0
190
AI時代の「本当の」ハイブリッドクラウド — エージェントが実現した、あの頃の夢
ebibibi
0
150
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
3
470
AWS CDK「読めるけど書けない」を脱却するファーストステップ
smt7174
3
180
銀行の内製開発にて2つのプロダクトを1つのチームでスクラムしてみてる話
koba1210
1
140
Claude Code Skills 勉強会 (DevelersIO向けに調整済み) / claude code skills for devio
masahirokawahara
1
22k
身体を持ったパーソナルAIエージェントの 可能性を探る開発
yokomachi
1
130
[JAWSDAYS2026]Who is responsible for IAM
mizukibbb
0
870
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Agile that works and the tools we love
rasmusluckow
331
21k
Designing Experiences People Love
moore
143
24k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
The Curse of the Amulet
leimatthew05
1
10k
Test your architecture with Archunit
thirion
1
2.2k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
480
Darren the Foodie - Storyboard
khoart
PRO
3
2.9k
Embracing the Ebb and Flow
colly
88
5k
The Language of Interfaces
destraynor
162
26k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
300
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 で稼働させるべきではなく、 ⼀⽅で中断耐性のあるワークロードに対しては、コスト最適化に⼤きく貢献する