
【AWS】ECSタスクが失敗!ECRイメージ不足の原因と解決のための備忘録
はじめに
503 Service Temporarily Unavailable
ECSを利用したサービス運用では、タスク起動エラーに直面することが少なくありません。本記事では、特に ECRイメージ不足 によるタスク失敗問題にフォーカスし、原因から解決策、再発防止のための運用改善までを解説します。
1. 問題の概要
1.1 主なエラー内容
ECSタスクの失敗時に以下のエラーが発生する場合があります:
CannotPullContainerError: Error response from daemon: manifest for <ECRリポジトリ>/sim_package@sha256:<ダイジェスト値> not found: manifest unknown: Requested image not found
1.2 発生時の影響
タスクの起動失敗(タスクの起動スタートをマネコンとかで確認できます。)
サービスの一部または全体が停止。ログを見るとEnvoyプロキシ(Nginxと似た機能を持つOSS)のシャットダウン
ロードバランサーがヘルスチェックに失敗し、503エラーを返す可能性。エンドユーザーへの影響
アプリケーションの応答が停止し、サービス可用性が低下。
2. 原因の特定
以下の3つのカテゴリで原因を分析できます:
2.1 イメージ管理の問題
手動削除 または ECRライフサイクルポリシー により必要なイメージが削除されている。
タグの不整合(例: タグの付け忘れ、誤ったタグ参照)。
2.2 アクセス権限の問題
IAMロールやポリシーに必要な権限が不足している。
クロスアカウントでのECR参照設定が不適切。
2.3 CI/CDパイプラインの問題
イメージのプッシュに失敗しているが、エラーが検出されていない。
デプロイ時にタグやダイジェストが最新ではないイメージを参照している。
3. 解決策:問題のトラブルシューティング
3.1 即時対応フロー
以下の手順で問題を特定し、解決します。
flowchart TD
A[タスク失敗] --> B{イメージ存在確認}
B -- No --> C[最新イメージのプッシュ]
B -- Yes --> D{権限を確認}
D -- NG --> E[ポリシーの修正]
D -- OK --> F[タスクの再デプロイ]
3.2 具体的な確認コマンド
1. イメージが存在するか確認
aws ecr describe-images \
--repository-name sim_package \
--region <リージョン>
2. タグ一覧の確認
aws ecr list-tags-for-resource \
--resource-arn arn:aws:ecr:<リージョン>:<アカウントID>:repository/sim_package
3. 権限ポリシーの確認
aws ecr get-repository-policy \
--repository-name sim_package \
--region <リージョン>
4. 再発防止のための運用改善
4.1 システムの改善
イメージのライフサイクル管理
重要イメージの保護: ライフサイクルポリシーで保護するイメージを明確化。
クロスリージョンレプリケーション: 他リージョンにバックアップを保存。
ECR参照方式の見直し
タグベース(例: release-v1.2.3)の参照に切り替え、SHA256ダイジェストの直接参照を回避。
タスク定義例
{
"containerDefinitions": [
{
"name": "app",
"image": "<ECRリポジトリ>/sim_package:release-v1.2.3",
"essential": true
}
]
}
4.2 運用フローの改善
デプロイ前チェックの自動化
イメージの存在確認スクリプトを導入。
モニタリングの強化
CloudWatch を活用し、タスク失敗時にアラートを設定。
ECRのイメージ更新履歴 を定期的に監視。
5. チェックリスト:運用の最適化
日次確認
ECR内のイメージが最新状態か。
ECSタスクのヘルスチェックが正常か。
週次確認
ライフサイクルポリシーが正しく適用されているか。
IAMロールの権限が正しいか。
月次確認
バックアップが適切に保存されているか。
タスク失敗率の分析を行ったか。
6. まとめ
ECRイメージ不足によるECSタスク失敗は、以下の手順で効率的に対応できます:
問題の早期特定(イメージ確認、権限チェック)。
タグベースの参照やライフサイクル管理による再発防止。
CloudWatchアラームや自動化スクリプトによる監視体制の強化。
これらの対策を実施することで、運用の安定性を向上させ、サービスの信頼性を保つことが可能です。