Elastic Container Service(ECS)Fargateのオートスケーリング設定について記載します。
Fargateでは、以下の2つのオートスケーリングの設定が可能です。
2つのオートスケーリング設定
リソースの負荷に応じたオートスケーリング設定
時間に応じたオートスケーリング設定
Fargateが高負荷時の対応方法については以下の記事もご参照ください。
Elastic Container Service(ECS) Fargate 高負荷時の対策ーメモリ使用率とCPU使用率
ECS Fargateの高負荷時の対策 「CPU使用率が高いケース」 「メモリ使用率が高いケース」 について記載します。 「スケールアウト:タスク数を増やす」 「スケールアップ:1タスクのCPUやメモリを大きくする」 「新しいデプロイの強制:タスクを全て入れ替える」 といった対策があります。
まずは、リソースの負荷に応じたオートスケーリング設定について、書いていきます!
リソースの負荷に応じたオートスケーリング設定
リソースの負荷に応じたオートスケーリング設定について、以下の順で記載していきます。
記載内容
①設定方法
②設定内容について
③メリット・注意点
まずは、設定方法についてです。
設定方法
以下の流れで設定できます。
- AWSマネージメントコンソール画面からECSを選択
- スケーリングしたいクラスターを選択
- スケーリングしたいサービスを選択
- 「サービスを更新」ボタンを押下
- 「サービスの Auto Scaling」の設定からスケーリングポリシー(以下の画面)を設定
- サービスを更新
設定内容について
以下のメトリクスに対して、ターゲット値(閾値)を設定し、オートスケーリングさせることが可能です。
設定可能なメトリクス
CPU使用率
メモリ使用量
メリット・注意点
<メリット>
- リソースを有効活用できる
- リソースの負荷に応じてスケーリングするため、負荷が低い場合はコンテナ数を抑え、負荷が高い時のみコンテナを増やすことができる
<注意点>
- コンテナが起動するまで時間を要する
- 急激なアクセス増の場合、コンテナの起動が間に合わない可能性がある
- 急激なアクセス増加が見込まれる場合、次に記載する「時間に応じたオートスケーリング設定」をしておくのがオススメです。
- 急激なアクセス増の場合、コンテナの起動が間に合わない可能性がある
時間に応じたオートスケーリング設定
時間に応じたオートスケーリング設定について、以下の順に記載していきます。
記載内容
①設定方法
②メリット・注意点
まずは、設定方法についてです。
設定方法
以下のコマンドにて設定します。
aws application-autoscaling put-scheduled-action \
--scheduled-action-name {スケジューリング名} \
--schedule "cron({cron形式で起動タイミングを設定})" \
--service-namespace ecs \
--resource-id service/{クラスター名}/{サービス名} \
--scalable-dimension ecs:service:DesiredCount \
--scalable-target-action MinCapacity=10,MaxCapacity=20
- {スケジューリング名}:管理しやすいスケジューリング名を記載
- {cron形式で起動タイミングを設定}:cron形式で記載します。時間はUTCです。毎日10時の場合、「cron(0 1 * * ? *)」と記載します。
- {クラスター名}:クラスター名を記載
- {サービス名}:サービス名を記載
- scalable-target-actionで起動させたいタスク数を指定します。
メリット・注意点
<メリット>
- コンテナをあらかじめ用意しておくことができる
- 急激なアクセス増が予測される場合、コンテナをあらかじめ起動しておくことで、急激なアクセス増に耐えることができる
<注意点>
- 設定によっては余分なリソースが生まれる
- 必要なコンテナ数以上を立ち上げるように設定してしまうと、余分なリソースが生まれることとなります。
まとめ
- リソースの負荷に応じたオートスケーリング設定
- 時間に応じたオートスケーリング設定
について見てきました。
それぞれの設定のメリットと注意点を確認し、どちらの設定を行うか検討する必要があると思います。
また、2つの設定(リソースの負荷に応じたオートスケーリングと時間に応じたオートスケーリング)を組み合わせることで、それぞれのメリットを活かしつつ、注意点を補える設定をすることも可能です。