ECS タスクでコンテナ間の起動順序を制御する方法を教えてください
困っていた内容
ECS でタスク内に複数のコンテナを定義しています。
他のコンテナが開始後に起動する必要があるサイドカーがあり、起動順序を制御したいです。
起動順序を制御する方法を教えてください。
どう対応すればいいの?
ECS タスク定義のdependsOn
を設定してください。
Amazon ECS タスク定義パラメータ - Amazon Elastic Container Service
dependsOn
型: ContainerDependency オブジェクトの配列
必須: いいえ
コンテナの起動と停止に定義されている依存関係。
タスク内のコンテナ間で依存関係がある場合はdependsOn
で起動する順序等を制御できます。
例えばhato-task-B
コンテナのdependsOn
に次のような値を設定すると、hato-task-B
コンテナはhato-task-A
コンテナのヘルスチェック合格後に起動開始されます。
"containerDefinitions": [
{
"name": "hato-task-A",
"image": "public.ecr.aws/amazonlinux/amazonlinux:2023",
"healthCheck": {
"command": [
"CMD-SHELL",
"curl -f http://localhost/ || exit 1"
],
},
},
{
"name": "hato-task-B",
"image": "public.ecr.aws/amazonlinux/amazonlinux:2023",
"dependsOn": [
{
"containerName": "hato-task-A",
"condition": "HEALTHY"
}
],
}
],
なお、依存するコンテナの状態条件はcondition
で選択できます。
START
:開始されている[1]COMPLETE
:完了(終了)しているSUCCESS
:正常に完了(終了)しているHEALTHY
:ヘルスチェックに合格している
また、依存関係が満たされないとその状態でスタックする場合があるためstartTimeout
(タイムアウトを開始)も併せて設定することを推奨します。
ECS で依存関係を設定したタスクのヘルスステータスがUNHEALTHYのまま終了しないときの対処方法 | DevelopersIO
参考資料
起動完了ではないので注意 ↩︎