状況
- 2020/4/24 約6:00(?)以降、突然 AWS ECS / AWS Batch でジョブの実行に失敗するようになった。(AWS Batchのステータス
RUNNABLE
で停止してしまっていた。) - コンピューティング環境はEC2インスタンスを利用(非Fargate)
- 当日のAM3:00頃まではジョブが正常に稼働していたことを確認済み。
- 実行するdocker image、ジョブ定義などには一切変更を加えておらず、全くもって原因不明でした。しばらくハマったので、対処方法を記録しておきます。どなたかの手助けになれば幸いです。
結論(原因)
- AWS ECS / Batch 上でコンテナの死活管理などを司る
Amazon ECS コンテナエージェント
のコンテナが起動に失敗しており、EC2インスタンスを正常にコンピューティング環境のリソースとして認識できていなかったのが原因。 - 突然この時間から起動に失敗するようになった原因は不明だが、おそらくバージョンが古すぎたことが要因。
1.17.0
を利用していた。 - コンピューティング環境内のEC2インスタンスが0台となってしまっており、結果的にジョブが実行できず、ジョブが
RUNNABLE
で停滞していた。
対処方法
-
Amazon ECS コンテナエージェントバージョン
をバージョンアップすることで、正常にコンテナエージェントが起動してジョブが実行されることを確認した。 - バージョンアップのやり方にはいくつかの方法があるが、今回はコンピューティング環境で利用しているAMIを更新することで対応した。
- AWS Batchの場合はコンピューティング環境作成時点の最新のAMIが常に使われ続ける仕様であるため、コンピューティング環境自体を再作成した。
更新前後のAMIの情報など
- 詳細は以下の公式ドキュメントを参照
- https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs-agent-versions.html
更新前に利用していたEC2インスタンスの情報
- AMI ID
- ami-e3166185
- リリース
- 2017.09.h
- Amazon ECS コンテナエージェントバージョン
- 1.17.0
- ecs-initバージョン
- 1.17.0-2
更新後のEC2インスタンスの情報
- AMI ID
- ami-031cb62cff0e27519
- リリース
- 2018.03.20200402
- Amazon ECS コンテナエージェントバージョン
- 1.39.0
- ecs-initバージョン
- 1.39.0-1
調査時のログ
- ecs agentのコンテナが起動に失敗しており、リスタートしてもエラーになってしまった。
| [ec2-user@ip-XXX ~]$ docker container ls -a |
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| dc4b71e9133b amazon/amazon-ecs-agent:latest "/agent" 4 hours ago Created ecs-agent |
| [ec2-user@ip-XXX ~]$ docker ps |
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| # ecs agentの起動に失敗している |
| [ec2-user@ip-XXX ~]$ docker container start dc4 |
| Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"/sbin/docker-init\": stat /sbin/docker-init: no such file or directory": unknown |
| Error: failed to start containers: dc4 |
- 上記を確認後、原因の切り分けとして、起動中のAWS Batchインスタンスを「同様のものを起動」から複製起動した。
- その際にAMIを最新版に更新
- この手順を踏むことで、ジョブが正常に実行されることを確認