2020年8月27日木曜日

ECS Capacity providers を試す(2)

 

前回


これまでの関連記事は、下記のとおり


デフォルトのキャパシティプロバイダ戦略にAutoScalingGroupを指定したEcsクラスタを試します。

現在起動しているタスクのCPU・メモリ割り当ては下図のとおり。


現在使用しているインスタンス(t2.small)は ENIが3つなので、起動タイプを指定してタスクを3つ起動すると下図のようなエラーになります。
CPU・メモリは足りていますが、
EC2インスタンスとタスク2個でENIを3つ使用するので、ENI不足でエラーになります。


キャパシティプロバイダを使用すれば、EC2インスタンスが自動的にスケールアウトして、このエラーは発生しないと思われるので試してみます。

既存サービスのタスクを増やす

(1) タスクを2個にする

タスクが1つ起動した状態では、下図のとおり、インスタンスのCPU・メモリには余裕があります。2つにしても、スケールアウトは発生しません。


CloudFromationでサービスの「必要数」を2に変更してスタックを更新すると、タスクが増えます。
cfnディレクトリで下記コマンドを実行して、スタックを更新します。
$ make cfnsvc01 CFNCMD=update-stack ECS_COUNT=2

スタック更新完了後も、インスタンスは1つです。同じインスタンスにタスクが2つ起動しています。


(2) タスクを3個にする

タスク2つ起動した状態では、下図のとおり、インスタンスのCPU・メモリには余裕がありますが、ENIを上限まで使っているので、スケールアウトが必要です。


cfnディレクトリで下記コマンドを実行するとサービスの「必要数」を 3 に変更してスタックを更新します。
$ make cfnsvc01 CFNCMD=update-stack ECS_COUNT=3

スタック更新完了後は、インスタンスが2つに増えています。
新しいインスタンスでタスクが1つ起動しています。


イベントは下図のとおり。エラーはありません。


AutoScalingグループのアクティビティは下図のように表示されます。
リストの一番上がスケールアウトです。


スケールアウトしたのは t3.small のスポットインスタンスです。


既存サービスのタスクを減らす


タスクの起動数をゼロにして、スケールインさせてみます。
cfnディレクトリで下記コマンドを実行するとサービスの「必要数」を 0 に変更してスタックを更新します。
$ make cfnsvc01 CFNCMD=update-stack ECS_COUNT=0

スタック更新完了後、タスク起動数がゼロの状態で、15分以上放置すると、スケールインしてインスタンスがゼロになりました。(AutoScalingGroupの最小キャパシティをゼロにしているので)


AutoScalingGroupのアクティビティは下図のように表示されます。


インスタンスがゼロの状態で既存サービスのタスクを起動


インスタンスがゼロの状態で、タスクを起動してみます。
cfnディレクトリで下記コマンドを実行すると「必要数」を 1 に変更してスタックを更新します。
$ make cfnsvc01 CFNCMD=update-stack ECS_COUNT=1

スタック更新完了後、インスタンスは2つ起動していました。


AutoScalingGroupのアクティビティは下図のように表示されます。