猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Amazon ECS タスクの中のコンテナが死んだらそのコンテナだけ再起動

AWS から出ていた記事

かなり前の記事ですが、AWS から以下の記事が出ています

docs.aws.amazon.com

  • タイトル: Restart individual containers in Amazon ECS tasks with container restart policies
  • container restart policies を設定することで、 Amazon ECS タスクの中の個別のコンテナを再起動できるようになりました

これまではタスク内の特定のコンテナが死んだ時にタスク全体が死んでいたのですが、コンテナの Restart Policy を有効にすることで、そのコンテナが死んだ時はタスク全体を再起動することなく、コンテナだけが再起動されます。

設定項目はこれです

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_restart_policy

  • restartPolicy
    • enabled -- (Boolean) restart policy を有効にするかどうか
    • ignoredExitCodes -- コンテナの restart をしない終了コードを配列で指定
    • restartAttemptPeriod -- 例えばここに60を指定した場合、60秒に1回 restart が試される。つまり、コンテナが死んだからといって即座に restart されるわけではない。

Restart policy はデフォルトでは無効になっています。

設定例を見たい場合は以下のドキュメントを参照してください。

docs.aws.amazon.com

コンテナの再起動回数を見たい場合は、ECS task metadata endpoint か、 CloudWatch の Container Insights から確認できます。

Considerations(参考情報)

Restart policy を有効にする場合は以下の点に注意してください

  • EC2 を使っている場合は Container Agent バージョン1.86.0 以降のみ対応しています。なお、基本的には最新の ContaiAgent を使うことを推奨します。バージョンアップについては https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html を参考にしてください。
  • Fargate の場合は、Platform version 1.4.0 以降で対応しています。詳細は https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform-linux-fargate.html を参考にしてください。
  • container definition で firelensConfiguration を指定している場合は、Container restart policy を有効にすることができません、
  • Amazon ECS agent がコンテナから切断されている時に、Restart policy が設定されたコンテナが終了したとしても、コンテナはリスタートされないので注意してください。 *1

感想

このように個別に状態を管理したいのであればタスクを分けるべきです。ただし、コンテナのリソースを有効に使いたい場合など、場面によっては有効に活用できるかもしれません。

参考

blog.msysh.me

*1:これはどういう時にありえるんだろう...