EC2 インスタンスで実行されている Amazon ECS ワークロードを安全に停止する - Amazon Elastic Container Service

EC2 インスタンスで実行されている Amazon ECS ワークロードを安全に停止する

マネージドインスタンスドレイニングを使用すると、Amazon EC2 インスタンスの正常な終了が容易になります。この結果、ワークロードを安全に停止し、終了しないインスタンスに再スケジュールできます。インフラストラクチャのメンテナンスと更新は、ワークロードの中断を心配することなく実行できます。マネージドインスタンスドレイニングを使用することで、Amazon EC2 インスタンスの置換を必要とするインフラストラクチャ管理ワークフローを簡素化しつつ、アプリケーションの耐障害性と可用性を確保できます。

Amazon ECS マネージドインスタンスドレイニングは、Auto Scaling グループのインスタンス置換と連動します。インスタンスの更新とインスタンスの最大有効期間に基づいて、お客様は最新の OS およびキャパシティに関するセキュリティ要件に常に準拠できます。

マネージドインスタンスドレイニングは、Amazon ECS キャパシティープロバイダーでのみ使用できます。Amazon ECS コンソール、AWS CLI、または SDK を使用して Auto Scaling グループのキャパシティープロバイダーを作成または更新するときに、マネージドインスタンスドレイニングを有効にできます。

以下のイベントは Amazon ECS マネージドインスタンスドレイニングの対象となります。

  • Auto Scaling グループのインスタンス更新 - インスタンス更新を使用すると、バッチによる手動ではなく、Auto Scaling グループ内の Amazon EC2 インスタンスのローリング置換を実行できます。これは、多数のインスタンスを置換する必要がある場合に便利です。インスタンス更新は、Amazon EC2 コンソールまたは StartInstanceRefresh API により開始されます。マネージドターミネーション保護を使用している場合は、StartInstanceRefresh を呼び出す際に必ず Replace を選択してスケールイン保護をしてください。

  • インスタンスの最大有効期間 - Auto Scaling グループインスタンスの置換に至るまでの最大有効期間を定義できます。これは、内部のセキュリティポリシーやコンプライアンスに基づいて置換インスタンスをスケジュールするのに役立ちます。

  • Auto Scaling グループのスケールイン - スケーリングポリシーとスケジュールされたスケーリングアクションに基づいて、Auto Scaling グループはインスタンスの自動スケーリングをサポートします。Amazon ECS キャパシティープロバイダーとして Auto Scaling グループを使用することで、タスクが実行されていないときに Auto Scaling グループのインスタンスをスケールインすることができます。

  • Auto Scaling グループのヘルスチェック - Auto Scaling グループは、異常のあるインスタンスの終了を管理するための多くのヘルスチェックをサポートしています。

  • AWS CloudFormation スタックの更新 - AWS CloudFormation スタックに UpdatePolicy 属性を追加することで、グループが変更されたときにローリング更新を実行できます。

  • スポットキャパシティーの再調整 - Auto Scaling グループは、Amazon EC2 のキャパシティー再調整通知に基づいて、中断のリスクが高いスポットインスタンスを事前対応的に置換しようとします。Auto Scaling グループは、置換インスタンスが起動して正常になると、古いインスタンスを終了します。Amazon ECS マネージドインスタンスドレイニングでは、非スポットインスタンスをドレインするのと同じ方法でスポットインスタンスをドレインします。

  • スポット中断 - スポットインスタンスは 2 分間の通知の後に終了します。Amazon ECS マネージドインスタンスドレイニングでは、それに応じてインスタンスがドレイニング状態になります。

マネージドインスタンスドレイニングがある Amazon EC2 Auto Scaling のライフサイクルフック

Auto Scaling グループのライフサイクルフックを使用すると、お客様はインスタンスライフサイクルの特定のイベントによってトリガーされるソリューションを作成し、その特定のイベントが発生したときにカスタムアクションを実行できます。Auto Scaling グループでは、最大 50 個のフックを使用できます。複数の終了フックが存在する場合があり、それらは同時に実行されるため、Auto Scaling グループはすべてのフックが終了するのを待ってからインスタンスを終了します。

Amazon ECS マネージド型のフック終了に加えて、独自のライフサイクル終了フックを設定することもできます。ライフサイクルフックには default action があります。Amazon ECS マネージドフックなどの他のフックがカスタムフックによるエラーの影響を受けないようにするために、continue をデフォルトとして設定することをお勧めします。

Auto Scaling グループの終了ライフサイクルフックを既に設定していて、Amazon ECS マネージドインスタンスドレイニングも有効にしている場合、両方のライフサイクルフックが実行されます。ただし、相対的なタイミングは保証されません。ライフサイクルフックには、タイムアウトが終了したときに実行するアクションを指定する default action 設定があります。障害が発生した場合は、continue をカスタムフックのデフォルト結果として使用することをお勧めします。このようにすることで、他のフック、特に Amazon ECS マネージドフックは、カスタムライフサイクルフックのエラーの影響を受けなくなります。abandon による別の結果では、ほかのすべてのフックがスキップされるので、避けるべきです。Auto Scaling グループのライフサイクルフックの詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Amazon EC2 Auto Scaling のライフサイクルフック」を参照してください。

タスクとマネージドインスタンスドレイニング

Amazon ECS マネージドインスタンスドレイニングでは、コンテナインスタンスにある既存のドレイニング機能を使用します。コンテナインスタンスドレイニング機能は、Amazon ECS サービスに属するレプリカタスクの置換と停止を実行します。スタンドアロンタスク (RunTask によって呼び出されたタスクなど) は、PENDING または RUNNING の状態にある場合には影響を受けません。そのようなタスクは、完了するまで待つか、手動で停止する必要があります。コンテナインスタンスは、すべてのタスクが停止されるか、48 時間が経過するまで DRAINING 状態のままになります。デーモンタスクは、すべてのレプリカタスクが停止した後に、最後に停止します。

マネージドインスタンスドレイニングとマネージドターミネーション保護

マネージドインスタンスドレイニングは、マネージド終了が無効になっている場合でも機能します。マネージド終了保護の詳細については、「Amazon ECS が終了するインスタンスの制御」を参照してください。

次の表は、マネージドターミネーションとマネージドドドレイニングのさまざまな組み合わせの動作をまとめたものです。

マネージドターミネーション

マネージドドドレイニング

結果

有効

有効 Amazon ECS は、タスクを実行している Amazon EC2 インスタンスがスケールインイベントによって終了するのを防ぎます。終了保護が設定されていないインスタンス、スポット中断を受けたインスタンス、インスタンス更新によって強制されたインスタンスなど、終了中のインスタンスがすべて正常にドレインされます。

無効

有効 Amazon ECS は、タスクを実行している Amazon EC2 インスタンスがスケールインされないように保護することはしません。ただし、終了されるインスタンスはすべて正常にドレインされます。

有効

無効 Amazon ECS は、タスクを実行している Amazon EC2 インスタンスがスケールインイベントによって終了するのを防ぎます。ただし、スポット中断や強制的なインスタンス更新によって、またはタスクがまったく実行されていない場合に、インスタンスは終了する可能性があります。Amazon ECS はこれらのインスタンスに対して正常なドレインを実行せず、停止後に置換サービスタスクを起動します。

無効

無効 Amazon EC2 インスタンスは、Amazon ECS タスクを実行している場合でも、いつでもスケールインまたは終了できます。Amazon ECS は、インスタンスが停止した後に置換サービスタスクを起動します。
マネージドインスタンスドレイニングとスポットインスタンスドレイニング

スポットインスタンスドレイニングでは、Amazon ECS エージェントに環境変数 ECS_ENABLE_SPOT_INSTANCE_DRAINING を設定できます。これにより、Amazon ECS は 2 分間のスポット中断に応答して、インスタンスをドレイン中ステータスに移行できます。Amazon ECS マネージドインスタンスドレイニングを使用すると、スポット中断だけでなく、さまざまな理由で終了中の Amazon EC2 インスタンスを正常にシャットダウンできます。例えば、Amazon EC2 Auto Scaling のキャパシティー再調整を使用して、中断のリスクが高まっているスポットインスタンスを事前対応的に置換できます。そして、マネージドインスタンスドレイニングにより、置換対象のスポットインスタンスの正常シャットダウンが実行されます。マネージドインスタンスドレイニングを使用する場合、スポットインスタンスドレイニングを個別に有効にする必要がないため、Auto Scaling グループのユーザーデータの ECS_ENABLE_SPOT_INSTANCE_DRAINING が冗長になります。スポットインスタンスドレイニングの詳細については、「スポットインスタンス」を参照してください。

マネージドインスタンスドレイニングと EventBridge の連携

Amazon ECS マネージドインスタンスドレイニングイベントは Amazon EventBridge に発行され、Amazon ECS はマネージドインスタンスドレイニングをサポートするために、アカウントのデフォルトバスに EventBridge マネージドルールを作成します。これらのイベントを Lambda、Amazon SNS、および Amazon SQS などのほかの AWS サービスにフィルタリングして、モニタリングおよびトラブルシューティングできます。

  • Amazon EC2 Auto Scaling は、ライフサイクルフックを呼び出すときに EventBridge にイベントを送信します。

  • スポット中断通知は EventBridge に発行されます。

  • Amazon ECS は、エラーメッセージを生成します。このエラーメッセージは、Amazon ECS コンソールおよび API を介して取得することができます。

  • EventBridge には、一時的な障害を軽減するための再試行メカニズムが組み込まれています。

Amazon ECS マネージドインスタンスドレイニングのトラブルシューティング

マネージドインスタンスドレイニングに関する問題のトラブルシューティングが必要になる場合があります。以下は、使用中に発生する可能性のある問題と解決方法の例です。

自動スケーリングの使用時に、最大インスタンス有効期間を超えてもインスタンスが終了しません。

Auto Scaling グループの使用中に最大インスタンス有効期間に到達および超過した後もインスタンスが終了しない場合、スケールインから保護されていることが原因である可能性があります。マネージド終了を無効にし、マネージドドレイニングがインスタンスのリサイクルを処理できるようにすることができます。