ECS の CannotPullContainerError は ECR lifecycle による image 退避が原因のことがある
AWS
ECS
ECR
インフラ運用
知識
ECS task が CannotPullContainerError / TaskFailedToStart で起動失敗するとき、task definition が digest 固定で参照している image が ECR の lifecycle 保持ポリシー(例: 最新100件保持)で削除されているのが直接原因のことがある。
落とし穴: buildx/OCI マルチアーキ push は manifest list + child manifest + attestation を ECR に作るため、論理的な1 push が ECR 上は複数 image としてカウントされる。結果、デプロイ回数から想像するより遥かに速く保持上限を食い潰し、まだ現行 task-def が参照している古い image が押し出されて pull 不能になる。
診断の初手は「ECS の digest エラーが指す image が現在も ECR に存在するか」を確認すること。恒久対策は、参照中 image を lifecycle で消さないよう保持数・tag ルール(環境別リポジトリ分割や tag ベースの除外)を見直す。