ECS サービスで ELB のヘルスチェックに失敗した場合の挙動を教えてください
困っていた内容
ECS サービスに ELB を設定してウェブアプリケーションを実行する予定です。
ELB を設定すると、起動したタスクが自動的に ELB のターゲットに登録されますが、ヘルスチェックに失敗した場合は登録解除されますか?
ECS サービスでタスクを実行中に ELB のヘルスチェックに失敗した場合の挙動を教えてください。
どうなるの?
ELB のヘルスチェックに失敗すると、自動的に登録解除を含むタスクの置き換えが実施されます。
Amazon ECS サービス - Amazon Elastic Container Service
ロードバランサーのターゲットグループのヘルスチェックが失敗すると、サービススケジューラーによって、異常であると判断されたタスクが置き換えられます。
前提として ECS サービスでタスクを実行している場合、タスクが異常と判断された場合は ECS サービスによって自動的に代替となるタスクが起動し、異常なタスクは停止されます。
ECS サービスに ELB を設定している場合は、ELB のヘルスステータスも考慮され、ELB のヘルスチェックに失敗すると ECS サービスによって置き換えが行われます。
置き換え動作は ECS サービスの最大ヘルス率(maximumPercent
)等次第ですが、まず代替となるタスクの起動が行われ、異常と判断されたタスクの停止処理(ELB からの登録解除等)が実施されます。
(異常なタスクは、代替となるタスクが起動するまで、可能な限り実行されます)
詳しい挙動は次のブログも参考になると思います。
参考資料
Amazon ECS ではサービスの maximumPercent の使用を優先し、代替タスクが正常になるまで異常なタスクを可能な限り実行し続けます。
コンテナのヘルスチェックまたはロードバランサーのターゲットグループのヘルスチェックが失敗すると、サービススケジューラーによって、異常であると判断されたタスクが置き換えられます。この置き換え動作は、maximumPercent および desiredCount のサービス定義パラメータによって異なります。タスクが異常とマークされた場合、サービススケジューラーによってまず置き換えタスクが開始されます。次に以下が発生します。
- 置き換えタスクのヘルスステータスが HEALTHY になると、サービススケジューラーが異常のあるタスクを停止します。
- 置き換えタスクのヘルスステータスが UNHEALTHY の場合、スケジューラーは異常のある置き換えタスクまたは既存の異常タスクのいずれかを停止して、タスク総数が desiredCount と等しくなるようにします。
maximumPercent パラメーターによって、置き換えタスクを先に開始できないようにスケジューラーが制限されている場合、スケジューラーは異常のあるタスクをランダムに 1 つずつ停止して容量を解放してから置き換えタスクを開始します。異常のあるタスクがすべて正常なタスクに置き換えられるまで、起動と停止のプロセスが続きます。異常なタスクがすべて置き換えられ、正常なタスクだけが実行中になると、合計タスク数が desiredCount を超える場合、タスク数が desiredCount になるまで、正常なタスクが無作為に停止されます。
- [アップデート] ヘルスチェックに失敗した ECS タスクのスケジューリングの挙動がアップデートされました | DevelopersIO
- Amazon ECS でタスクの起動方法の選択肢を教えてください | DevelopersIO
コンテナで問題が発生してタスクが停止した場合も、ECS サービスによって自動的に新しいタスクへ置き換えが行われます。(利用者が直接タスクの停止・起動指示等を行う必要はありません)
maximumPercent
…(中略)…
Amazon ECS スケジューラはこのパラメータを使用して、置き換えタスクを開始するためのクラスターリソースが使用可能である限り、最初に置き換えタスクを開始してから、異常なタスクを停止することで、異常なタスクを置き換えます。