前回
これまでの関連記事は、下記のとおり
デフォルトのキャパシティプロバイダ戦略に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のアクティビティは下図のように表示されます。