Amazon Elastic Container Service(Amazon ECS)のタスク定義で複数コンテナを追加して依存関係を設定したときにハマったのでメモ。

コンテナの依存関係については下記が参考になります。

タスク定義パラメータ – Amazon ECS
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/task_definition_parameters.html

ECSとFargateでコンテナの起動順が制御できるようになりました – Carpe Diem
https://christina04.hatenablog.com/entry/ecs-fargate-dependson-parameter

なにが起こったのか

タスク定義

以下のようなコンテナをタスク定義に登録しました。

  • コンテナA
    • Essential(基本): false
  • コンテナB
    • Essential(基本): false
    • DependsOn(コンテナの依存関係):
      • Condition: SUCCESS 、ContainerName: コンテナA
  • コンテナC
    • Essential(基本): true
    • DependsOn(コンテナの依存関係):
      • Condition: SUCCESS 、ContainerName: コンテナB

    正常動作時はコンテナA、コンテナB、コンテナCの順に起動してコマンドを実行して終了します。

エラー時に期待した挙動にならなかった

上記設定でコンテナAでエラーとなった場合、以下のような挙動を期待しました。連なってくれるでしょうと。

  • コンテナA: STOP(ERROR)
  • コンテナB: STOP
    • コンテナAがSUCCESSを返さなかったから
  • コンテナC: STOP
    • コンテナBがSUCCESSを返さなかったから

ところが、期待した挙動とはならずにコンテナBはPENDINGのまま沈黙しました。
コンテナのタイムアウトを設定しなきゃダメなのかと試してみても変わらず沈黙。

  • コンテナA:STOP(ERROR)
  • コンテナB: PENDING
  • コンテナC: PENDING

コンテナBでエラーとなった際にはコンテナCはSTOPとなりました。
こちらは期待したどおりです。

  • コンテナA: STOP(SUCCESS)
  • コンテナB: STOP(ERROR)
  • コンテナC: STOP
    • コンテナBがSUCCESSを返さなかったから

期待する動作をさせるには

以下のようにコンテナCの依存関係にコンテナAを追加してやると期待する動作となりました。

  • コンテナA
    • Essential(基本): false
  • コンテナB
    • Essential(基本): false
    • DependsOn(コンテナの依存関係):
      • Condition: SUCCESS 、ContainerName: コンテナA
  • コンテナC
    • Essential(基本): true
    • DependsOn(コンテナの依存関係):
      • Condition: SUCCESS 、ContainerName: コンテナA
      • Condition: SUCCESS 、ContainerName: コンテナB

コンテナAでエラーになるとコンテナCもSTOPしてタスクが終了します。

  • コンテナA: STOP(ERROR)
  • コンテナB: STOP
    • コンテナAがSUCCESSを返さなかったから
  • コンテナC: STOP
    • コンテナAがSUCCESSを返さなかったから

まとめ

複数コンテナを追加して依存関係を設定したときの挙動がハマることでわかりましたが、コンテナ数が増えると大変そうなのもみえてきました・・・

参考

タスク定義パラメータ – Amazon ECS
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/task_definition_parameters.html

ECSとFargateでコンテナの起動順が制御できるようになりました – Carpe Diem
https://christina04.hatenablog.com/entry/ecs-fargate-dependson-parameter

元記事はこちら

Amazon ECSでコンテナの依存関係を設定したときのエラー時の挙動が想定外でハマった