ann-toque’s diary

@YASU11552288 の思うことをつらつらと

Amazon ECSでdocker-compose.ymlのdepends_onが立ち上げの際に、warningを出す場合の対処法

この記事は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の場合、dbredisweb の前に起動される。

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が追加されている。

aws.amazon.com

docs.aws.amazon.com

設定方法

タスク定義をGUI以外から編集する方法を知らないためGUI上での変更をまとめていく。 (タスク定義ってローカルに落として、アップロードできる方法あるのかな…ありそうなんだけど)

  1. 実行されたタスクを表示
  2. 「新しいリビジョンを作成」を選択
  3. depends_on:が記載されているコンテナを選択 f:id:ann-toque:20190505205841p:plain
  4. 「STARTUP DEPENDENCY ORDERING」に依存関係のあるコンテナを選択 & 選択したコンテナがどの状態になったら対象のコンテナを起動するか選択 状態はSTART, COMPLETE, SUCCESS, HEALTHYの4つ f:id:ann-toque:20190505205904p:plain

ハマりどころ

「ECS depends on」でググると上記のURLのようにAmazonから「コンテナの依存関係設定できるようにした」という記事か見つかるのだが、リンク先のタスク定義の日本語ページにはそう言った項目がなかった。 英語にすると dependsOn の項目が出てきた…。これに行き着くまでに時間をだいぶ掛けてしまった…。