share facebook facebook twitter menu hatena pocket slack

2019.12.25 WED

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

甲斐 甲

WRITTEN BY 甲斐 甲

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でコンテナの依存関係を設定したときのエラー時の挙動が想定外でハマった

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。