ECS タスクでコンテナ間の起動順序を制御する方法を教えてください

ECS タスクでコンテナ間の起動順序を制御する方法を教えてください

Clock Icon2025.02.21

困っていた内容

ECS でタスク内に複数のコンテナを定義しています。
他のコンテナが開始後に起動する必要があるサイドカーがあり、起動順序を制御したいです。
起動順序を制御する方法を教えてください。

どう対応すればいいの?

ECS タスク定義のdependsOnを設定してください。

Amazon ECS タスク定義パラメータ - Amazon Elastic Container Service

dependsOn
型: ContainerDependency オブジェクトの配列
必須: いいえ
コンテナの起動と停止に定義されている依存関係。

タスク内のコンテナ間で依存関係がある場合はdependsOnで起動する順序等を制御できます。

例えばhato-task-BコンテナのdependsOnに次のような値を設定すると、hato-task-Bコンテナはhato-task-Aコンテナのヘルスチェック合格後に起動開始されます。

ECS Task Definitions dependsOn

JSON例(抜粋)
"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

参考資料

ECS Task Definitions dependsOn 1

ECS Task Definitions dependsOn 2

脚注
  1. 起動完了ではないので注意 ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.