こんばんは、小寺です。
Amazon ECSがマネージドインスタンスドレイン機能をサポートするようになりました。
https://aws.amazon.com/about-aws/whats-new/2024/01/amazon-ecs-managed-instance-draining/

アップデート内容

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにデプロイされたワークロードが正常にシャットダウンされるようになりました。
具体的には、Amazon ECS キャパシティ プロバイダーが実行中のタスクを安全に停止し、終了していないインスタンスで代替タスクを起動し、すべてのタスクが正常に停止するまで (最大 48 時間) インスタンスの終了を遅らせることにより、インスタンスの正常な終了が簡単に実現できるようになりました。

元々、ECSにワークロードをデプロイする際に、FargateではなくEC2を選ぶと容量のスケーリング、OS とセキュリティの更新の実行、インスタンスの組み合わせの構成、インスタンスがヘルシーか監視を行うなどインフラストラクチャとして運用を管理する必要があります。
特にAutoScallingの部分は手動で作りこみをしていたケースも多いかと思います。

Auto ScalingでScale Inするした場合、ドレイニング状態のインスタンスは、クラスター内でそのインスタンスが持つタスクを他のキャパシティで空きがあるインスタンスへに移動されます。
キャパシティはCPUとMemoryどちらとも収まる範囲で算出されます。
ステータスがStoppedにならずにタスクが移動するので、コネクションは途絶えずにダウンタイムなしにワークロードが継続できます。
ただしドレイニング状態にならなかった場合、Auto ScalingでScale Inすると、ランダムに選ばれたインスタンスがStopped状態になり、内部のタスクは削除される仕様でした。
この仕様を防ぐために、インスタンスの終了保護を設定されているケースもあったかもしれないですよね。

今回のアップデートでは、Auto Scaling グループ (ASG) でインスタンス更新を行い、新しいAMIバージョン、定期的なインスタンス交換の最大インスタンス寿命の設定ができるようになっています。

Managed termination機能(管理された終了保護)と何が違う?

管理された終了保護機能を有効にすると、1つ以上のタスクを実行している Amazon EC2 インスタンスは、Auto Scaling グループのスケールイン中に停止できなくなります。

Managed termination機能(管理された終了保護)とマネージドインスタンスドレイン機能の両方の機能を有効にすると、運用ワークロードの中断に対して最大限に保護ができるようになります。管理されたスケールイン保護は、さまざまなタイプの中断を伴う EC2 インスタンスの終了をブロックし、管理されたドレインにより、EC2 インスタンスを終了する必要がある場合に、実行中のワークロードが適切に処理されるようにします。

Managed terminationManaged draining差異
EnabledEnabled●タスクを実行している Amazon EC2 インスタンスがスケールイン イベントによって終了しないように保護する。
●終了保護が設定されていないインスタンス、スポット中断を受けたインスタンス、またはインスタンスの更新によって強制されたインスタンスなどの終了中のインスタンスは正常にドレインされる。
DiabledEnabled●Amazon ECS は、タスクを実行している Amazon EC2 インスタンスをスケールインから保護しない。
●終了中のインスタンスは正常にドレインされる。
EnabledDisabled●Amazon ECS は、タスクを実行している Amazon EC2 インスタンスがスケールイン イベントによって終了しないように保護する。
●スポットの中断やインスタンスの強制更新、またはタスクが実行されていない場合、インスタンスが終了する可能性がある。
●ECS は、これらのインスタンスに対して正常なドレインを実行せず、停止後に代替サービス タスクを開始します。
DisabledDisabled●Amazon EC2 インスタンスは、Amazon ECS タスクを実行している場合でも、いつでもスケールインまたは終了できる。
●Amazon ECS は、停止後に代替サービスタスクを開始できる。

利用するには

クラスターの既存のキャパシティ プロバイダーのマネージド インスタンス ドレインを有効にする場合は以下を実行します。

aws ecs update-capacity-provider \ --name cp-draining \ --auto-scaling-group-provider '{ "managedDraining": "ENABLED" }

description-capacity-providers を実行すると、マネージドインスタンスドレイン機能が有効になっていることがわかります。

aws ecs describe-capacity-providers --capacity-providers cp-draining

まとめ

今日はECS マネージド インスタンス ドレイン機能について紹介しました。
新しい Amazon ECS マネージド インスタンス ドレイン機能は、パブリック コンテナ ロードマップ上の機能リクエストから生まれたものとのことです。