📝

ECS on EC2 のキャパシティプロバイダーでコンテナインスタンスがスケールインする時間について

に公開

明確な時間は定義されていませんが、目安となる時間を確認してみました。

準備

  • ECS クラスターについて: EC2 起動タイプのデフォルト設定で作成
  • タスク定義: httpd を起動するだけのコンテナを定義

サービスの作成

以下の設定でサービスを作成します。

  • クラスター: 準備で作成済みのクラスター
  • タスク定義: 準備で作成済みのタスク定義
  • コンピューティングオプション: キャパシティープロバイダー戦略
  • キャパシティープロバイダー戦略: デフォルトのクラスターを使用
  • 必要なタスク: 1

上記以外はデフォルト設定です。
サービスの作成が完了するとタスクが 1 つ起動します。

コンテナインスタンスは 2 つ起動していました。

サービスのタスク数を 0 に設定してみる

サービスのスケーリングの設定でタスクの最小数と最大数を 0 に設定します。

これにより起動中のタスクは自動的に停止されます。

ただし、タスク数が 0 になってもコンテナインスタンスはすぐには終了していません。


CloudWatch アラームを確認してみる

クラスターの自動スケーリングで Amazon ECS キャパシティーを自動的に管理する - Amazon Elastic Container Service

Amazon ECS は、ターゲットの追跡スケーリングポリシーを作成し、Auto Scaling グループにアタッチします。

実は ECS クラスターの作成時には以下の CloudWatch アラームが作成されていました。

  • TargetTracking-Infra-ECS-Cluster-test-xxx-ECSAutoScalingGroup-xxx-AlarmHigh-xxx
  • TargetTracking-Infra-ECS-Cluster-test-yyy-ECSAutoScalingGroup-yyy-AlarmLow-yyy

このアラームによってコンテナインスタンスのスケーリングが管理されているようです。
スケーリングの基準については CapacityProviderReservation と targetCapacity の関係性で決まっています。
詳細な基準については上記のドキュメントをご参照ください。

スケールインの場合、「CapacityProviderReservation の値は targetCapacity 未満」が該当します。

キャパシティのパーセンテージを使用しているタスクが自分の targetCapacity のパーセンテージよりも少なく、終了できるインスタンスが少なくとも 1 つあります。CapacityProviderReservation メトリクスの値が減少すると、関連する CloudWatch アラームが動作します。このアラームは Auto Scaling グループの DesiredCapacity 値を更新します。Auto Scaling グループはこの値を使用して EC2 コンテナインスタンスを終了し、クラスターから登録解除します。

デフォルトでは ECS クラスターのターゲットキャパシティーは 100 です。

上述のアラームのうち、「AlarmLow」を確認すると以下のしきい値が定義されていました。

  • 15 分内の15データポイントのCapacityProviderReservation < 100

このしきい値を確認する限りではコンテナインスタンスがスケールインするのに最低でも 15 分はかかると思われました。

スケールインの発生

15 分程度経過後に「AlarmLow」の CloudWatch アラームがアラーム状態になりました。

アラームをトリガーにコンテナインスタンスの 1 台がスケールインで終了しました。

ただし、2 台目のスケールインはすぐには行われませんでした。
2 台目のスケールインは 1 台目のスケールインから約 5 ~ 6 分後に行われていました。

以上より、スケールインの時間については CloudWatch アラームでの評価が基準になっていると思われました。
ただし、明確な基準はなく以下のブログでは 30 分程度かかったという報告もあります。
ECS on EC2におけるスケーリングの辛みを「Capacity Provider」で解決する | DevelopersIO

設定変更から30分ほどかかっています。

そのため、スケールインの目安については 15 分 ~ 30 分程度であると思われました。
ただし、あくまで個人的な検証での結果であるため、気になる方は自身の環境で複数回検証を実施することを推奨します。

技術的なお問い合わせに関するガイドライン | AWS サポート

  • AWS では各サービスの性能指標についてご案内しておりません(ドキュメントで公開されているものはこの限りではありません)。
  • 「性能」の多くは、お客様の環境やワークロードに依存します。一般的にご案内できる情報を AWS が持ち得ない点をご理解ください。
  • お客様ご自身の環境で実際に測定していただくことが、適切な指標になりうると考えております。実測したい環境を容易に複製し、破棄できるのがクラウドのメリットです。ご活用ください。

まとめ

今回は ECS on EC2 のキャパシティプロバイダーでコンテナインスタンスがスケールインする時間について紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion