この記事はAmazon ECSのタスク定義のdepends_onに関するまとめです。
※Amazon ECSに関しての説明は省きます。
docker-compose.ymlのdepends_onって何?
docker-compose.ymlには「depends_on」と呼ばれるコンテナ間の起動の依存関係を設定できる項目がある。
Compose file version 3 reference | Docker Documentation
例
以下のようなdocker-compose.ymlの場合、db
と redis
は web
の前に起動される。
version: "3" services: web: image: nginx:alpine depends_on: - db - redis redis: image: redis db: image: postgres
Amazon ECSでdocker-compose.ymlのdepends_onがwarningを出す
ここからが本題で、上記ファイルがあるディレクトリ上で ecs-cli compose --file docker-compose.yml up
を叩くと以下のようなwarningがでる。
$ecs-cli compose --file docker-compose.yml up WARN[0000] Skipping unsupported YAML option for service... option name=depends_on service name=web ...
何が起きているか
ECSは指定されたdocker-compose.ymlから、コンテナに関する設定を タスク定義 というJSONファイルに書き起こす。 この際にdepends_onは書き起こしに未対応のため、warningがでる。
解決方法
ecs-cli compose
からは依存関係の書き起こしがされないが、2019年3月からコンテナ間の依存関係に対応したよというAmazonからのお知らせがある。タスク定義の項目に dependsOnが追加されている。
設定方法
タスク定義をGUI以外から編集する方法を知らないためGUI上での変更をまとめていく。 (タスク定義ってローカルに落として、アップロードできる方法あるのかな…ありそうなんだけど)
- 実行されたタスクを表示
- 「新しいリビジョンを作成」を選択
- depends_on:が記載されているコンテナを選択
- 「STARTUP DEPENDENCY ORDERING」に依存関係のあるコンテナを選択 & 選択したコンテナがどの状態になったら対象のコンテナを起動するか選択 状態はSTART, COMPLETE, SUCCESS, HEALTHYの4つ
ハマりどころ
「ECS depends on」でググると上記のURLのようにAmazonから「コンテナの依存関係設定できるようにした」という記事か見つかるのだが、リンク先のタスク定義の日本語ページにはそう言った項目がなかった。
英語にすると dependsOn
の項目が出てきた…。これに行き着くまでに時間をだいぶ掛けてしまった…。