

# Amazon ECS コンテナインスタンスをドレインする
<a name="container-instance-draining"></a>

クラスターからコンテナインスタンスを削除する必要がある場合があります。例えば、システム更新を実行したり、クラスターキャパシティーをスケールダウンしたりする場合などです。Amazon ECS では、コンテナインスタンスを`DRAINING` ステータスに遷移する能力を提供します。これは、*コンテナインスタンスのドレイン*と呼ばれます。コンテナインスタンスを `DRAINING` に設定すると、Amazon ECS によって新規タスクがそのコンテナインスタンスに配置されなくなります。

## サービスのドレイニング動作
<a name="draining-service-behavior"></a>

`PENDING` 状態にあるサービスの一部であるタスクは、直ちに停止されます。クラスター内に利用可能なコンテナインスタンス容量がある場合、サービススケジューラによって置き換えタスクが開始されます。十分なコンテナインスタンス容量がない場合、問題を示すサービスイベントメッセージが送信されます。

`RUNNING` 状態にあるコンテナインスタンス上のサービスの一部であるタスクは、`STOPPED` 状態に移行します。サービススケジューラは、サービスのデプロイタイプ、デプロイ設定パラメータ、`minimumHealthyPercent` および `maximumPercent` に従って、タスクを置き換えようとします。詳細については、「[Amazon ECS サービス](ecs_services.md)」および「[Amazon ECS サービス定義パラメータ](service_definition_parameters.md)」を参照してください。
+ `minimumHealthyPercent` が 100% を下回っている場合、タスクの代替中、スケジューラは一時的に `desiredCount` を無視できます。例えば、`desiredCount` が 4 つのタスクの場合、最小値 50% でスケジューラは 2 つの既存タスクを停止してから 2 つの新規タスクを開始できます。最小が 100% の場合、サービススケジューラは、代替タスクが正常な状態と見なされるまで既存タスクを削除できません。ロードバランサーを使用しないサービスのタスクが `RUNNING` 状態にある場合、正常な状態と見なされます。ロードバランサーを使用するサービスのタスクは、`RUNNING` 状態にあり、そのタスクをホストするコンテナインスタンスがロードバランサーによって正常と報告された場合に、正常であると見なされます。
**重要**  
スポットインスタンスを使用していて、`minimumHealthyPercent` が 100% 以上の場合、サービスには、スポットインスタンスが終了する前にタスクを置き換えるための十分な時間がありません。
+ `maximumPercent` パラメータは、タスクの置き換え中に実行できるタスク数の上限を表します。これは、置き換えのバッチサイズを定義するために使用できます。例えば、`desiredCount` が 4 つのタスクで、最大が 200% であればドレインされる 4 つのタスクを停止する前に 4 つの新規タスクを開始できます (これを行うために必要なクラスターリソースを使用できる場合)。最大が 100% の場合、代替タスクは、ドレインするタスクが停止するまで開始できません。
**重要**  
`minimumHealthyPercent` と `maximumPercent` の両方が 100% の場合、サービスは既存のタスクを削除できず、代替タスクを開始することもできません。これにより、コンテナインスタンスのドレインの成功を防止し、新たなデプロイが防止されます。

## スタンドアロンタスクのドレイニング動作
<a name="draining-standalone-behavior"></a>

`PENDING` または `RUNNING` 状態のスタンドアロンタスクは影響を受けません。自分で停止するか、手動で停止するまで待つ必要があります。コンテナインスタンスは `DRAINING` ステータスのままです。

## Amazon ECS マネージドインスタンスのドレイニング動作
<a name="managed-instances-draining-behavior"></a>

Amazon ECS マネージドインスタンスの終了は、コストを最適化し、システムの健全性を維持しながら、ワークロードを正常に移行します。終了システムには、インスタンスの終了に関する 3 つの異なる決定パスがあり、それぞれのタイミングの特性やお客様に影響する事項が異なります。

お客様が開始した終了  
コンテナインスタンスをすぐにサービスから削除する必要がある場合に、インスタンスの削除を直接制御できます。`force` リクエストパラメータを true に設定して、`deregister-container-instance` を実行します。つまり、実行中のワークロードがあっても、即時終了が必要になります。

システムによるアイドル終了  
Amazon ECS マネージドインスタンスは、タスクを実行していないアイドル状態の Amazon ECS コンテナインスタンスを終了することで、コストを継続的にモニタリングし、プロアクティブに最適化します。ECS はヒューリスティック遅延を使用して、コンテナインスタンスが終了する前に新しく起動されたタスクを取得する時間を提供します。これは、`scaleInAfter` Amazon ECS マネージドインスタンスのキャパシティープロバイダー設定パラメータを使用してカスタマイズできます。

インフラストラクチャの更新の終了  
Amazon ECS マネージドインスタンスでは、ワークロードの可用性を維持しながら、マネージドコンテナインスタンスのソフトウェアを自動的に管理および更新することで、セキュリティとコンプライアンスを確実にします。詳細については、[Amazon ECS マネージドインスタンスでのパッチ適用](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-patching.html)を参照してください。

終了システムは、ワークロードの継続性とインフラストラクチャ管理要件のバランスを取る、2 段階のアプローチを実行します。

**フェーズ 1: 正常な完了期間**  
このフェーズでは、システムはワークロードの継続性を優先する、正常なドレイニング戦略を実行します。サービスタスクは、通常の Amazon ECS スケジューリングプロセスによって正常にドレインされます。スタンドアロンタスクは自然に完了する可能性があるため、実行が継続されます。システムは、自然な完了プロセスを通じて停止状態に達するように、すべてのタスクをモニタリングします。

**フェーズ 2: 厳格な期限の適用**  
正常な完了が、許容可能な期間内に終了目標を達成しない場合、システムは厳格な期限の適用を実行します。厳格な期限では、通常ドレイン開始日時に 7 日を加えて設定されるため、運用要件は維持されますが、正常な完了にはかなりの時間がかかります。強制には、強制登録解除手順の自動実行と、完了ステータスを考慮しない残りのすべてのタスクの即時終了が含まれます。

インスタンスで実行されているすべてのタスクが `STOPPED` 状態に移行すると、コンテナインスタンスのドレインが完了します。コンテナインスタンスは、再びアクティブ化または削除されるまで、`DRAINING` 状態のままです。コンテナインスタンス上のタスクの状態を確認するには、[ListTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTasks.html) オペレーションを `containerInstance` パラメータと共に使用して、インスタンス上のタスクのリストを取得した後、各 Amazon リソースネーム (ARN) または各タスクの ID で [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html) オペレーションを実行して、タスクの状態を確認します。

コンテナインスタンスがタスクのホスティングを再開する準備ができたら、コンテナインスタンスの状態を `DRAINING` から `ACTIVE` に変更します。Amazon ECS サービススケジューラは、コンテナインスタンスを再度検討してタスクを配置します。

## 手順
<a name="drain-instances"></a>

次の手順に従って、新しい AWS マネジメントコンソール を使用してコンテナインスタンスをドレインする設定ができます。

また、[UpdateContainerInstancesState](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateContainerInstancesState.html) API アクションまたは [update-container-instances-state](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-container-instances-state.html) コマンドを使用して、コンテナインスタンスのステータスを `DRAINING` に変更することも可能です。

**AWS マネジメントコンソール**

1. コンソール ([https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)) を開きます。

1. ナビゲーションペインで **[Clusters]** (クラスター) を選択してください。

1. **[Clusters]** (クラスター) ページで、インスタンスをホストするクラスターを選択します。

1. **[Cluster : *name*]** (クラスター: 名前) のページで、**[Infrastructure]** (インフラストラクチャ) タブを選択します。次に、**[Container instances]** (コンテナインスタンス) タブを選択し、ドレインしたい各コンテナインスタンスのチェックボックスをオンにします。

1. **[アクション]**、**[ドレイン]** の順に選択します。