見出し画像

【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 システムの改善

  1. イメージのライフサイクル管理

    • 重要イメージの保護: ライフサイクルポリシーで保護するイメージを明確化。

    • クロスリージョンレプリケーション: 他リージョンにバックアップを保存。

  2. ECR参照方式の見直し

    • タグベース(例: release-v1.2.3)の参照に切り替え、SHA256ダイジェストの直接参照を回避。

タスク定義例

{
  "containerDefinitions": [
    {
      "name": "app",
      "image": "<ECRリポジトリ>/sim_package:release-v1.2.3",
      "essential": true
    }
  ]
}

4.2 運用フローの改善

  1. デプロイ前チェックの自動化

    • イメージの存在確認スクリプトを導入。

  2. モニタリングの強化

    • CloudWatch を活用し、タスク失敗時にアラートを設定。

    • ECRのイメージ更新履歴 を定期的に監視。


5. チェックリスト:運用の最適化

日次確認

  • ECR内のイメージが最新状態か。

  • ECSタスクのヘルスチェックが正常か。

週次確認

  • ライフサイクルポリシーが正しく適用されているか。

  • IAMロールの権限が正しいか。

月次確認

  • バックアップが適切に保存されているか。

  • タスク失敗率の分析を行ったか。


6. まとめ

ECRイメージ不足によるECSタスク失敗は、以下の手順で効率的に対応できます:

  1. 問題の早期特定(イメージ確認、権限チェック)。

  2. タグベースの参照やライフサイクル管理による再発防止。

  3. CloudWatchアラームや自動化スクリプトによる監視体制の強化。

これらの対策を実施することで、運用の安定性を向上させ、サービスの信頼性を保つことが可能です。


参考情報



いいなと思ったら応援しよう!