AWS から出ていた記事
かなり前の記事ですが、AWS から以下の記事が出ています
- タイトル: Restart individual containers in Amazon ECS tasks with container restart policies
- container restart policies を設定することで、 Amazon ECS タスクの中の個別のコンテナを再起動できるようになりました
これまではタスク内の特定のコンテナが死んだ時にタスク全体が死んでいたのですが、コンテナの Restart Policy を有効にすることで、そのコンテナが死んだ時はタスク全体を再起動することなく、コンテナだけが再起動されます。
設定項目はこれです
restartPolicy
enabled
-- (Boolean) restart policy を有効にするかどうかignoredExitCodes
-- コンテナの restart をしない終了コードを配列で指定restartAttemptPeriod
-- 例えばここに60を指定した場合、60秒に1回 restart が試される。つまり、コンテナが死んだからといって即座に restart されるわけではない。
Restart policy はデフォルトでは無効になっています。
設定例を見たい場合は以下のドキュメントを参照してください。
コンテナの再起動回数を見たい場合は、ECS task metadata endpoint か、 CloudWatch の Container Insights から確認できます。
- task metadata endpoint について
- Container Insights について
- https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-ECS.html
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
感想
このように個別に状態を管理したいのであればタスクを分けるべきです。ただし、コンテナのリソースを有効に使いたい場合など、場面によっては有効に活用できるかもしれません。
参考
*1:これはどういう時にありえるんだろう...