Fargate での Amazon ECS タスクの「cannotpullcontainererror」エラーはどのように解決すればよいですか?

所要時間2分
0

「cannotpullcontainererror」エラーを解決して、AWS Fargate で Amazon Elastic Container Service (Amazon ECS) タスクを開始できるようにしたいと考えています。

簡単な説明

「cannotpullcontainererror」エラーにより、タスクが開始できないことがあります。Fargate で Amazon ECS タスクを開始するには、Amazon Virtual Private Cloud (Amazon VPC) ネットワーク設定により、イメージが保存されているリポジトリに Amazon ECS インフラストラクチャがアクセスできるようにする必要があります。正しいネットワークがなければ、Fargate の Amazon ECS でイメージを取り出すことができず、コンテナを起動できません。

解決方法

VPC ネットワーク設定で、Amazon ECS インフラストラクチャがイメージリポジトリに到達できるようになっていることを確認する

タスクが作成されたサブネットに関連付けられたルートテーブルは、Amazon ECS インフラストラクチャがリポジトリエンドポイントに到達できるようにする必要があります。エンドポイントには、インターネットゲートウェイ、NAT ゲートウェイ、または VPC エンドポイントを介して到達できます。

AWS PrivateLink を使用していない場合は、次のステップを実行します。

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインで、[Subnets] (サブネット) を選択します。
  3. ECS Fargate タスクが使用しているサブネットを選択します。
  4. [Route Table] (ルートテーブル) タブをクリックします。
  5. [Destination] (送信先) 列で、ルートテーブルのデフォルトルート (0.0.0.0/0) でパブリックインターネットアクセスが許可されていることを確認します。このアクセスには、NAT ゲートウェイまたはインターネットゲートウェイのいずれかを使用できます。
    重要: NAT ゲートウェイまたはインターネットゲートウェイは、デフォルトルートのターゲットである必要があります。ルートテーブルの例については、「ルーティングオプションの例」を参照してください。NAT ゲートウェイまたはインターネットゲートウェイを使用していない場合は、カスタム設定でパブリックインターネットアクセスが許可されていることを確認してください。

インターネットゲートウェイ (パブリックサブネット) を使用している場合は、タスクにパブリック IP が割り当てられていることを確認します。これを行うには、タスクまたはサービスを作成するときに、[VPC and security groups] (VPC およびセキュリティグループ) セクションで [Auto-assign public IP] (自動割り当てパブリック IP) を [ENABLED] (有効) に設定して ECS タスクを起動します 。

PrivateLink を使用している場合は、VPC エンドポイントのセキュリティグループが Fargate インフラストラクチャでそれらを使用できることを確認します。

注: バージョン 1.3.0 以前を使用して Fargate でホストされている Amazon ECS タスクには、com.amazonaws.region.ecr.dkr Amazon Elastic Container Registry (Amazon ECR) VPC エンドポイントと Amazon Simple Storage Service (Amazon S3) ゲートウェイエンドポイントが必要です。バージョン 1.4.0 以降を使用して Fargate でホストされている Amazon ECS タスクには、com.amazonaws.region.ecr.dkr および com.amazonaws.region.ecr.api Amazon ECR VPC エンドポイントと Amazon S3 ゲートウェイエンドポイントの両方が必要です。

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインから [Endpoints] (エンドポイント) を選択します。
  3. エンドポイントのリストからエンドポイントを選択し、[Subnets] (サブネット) タブを選択します。Amazon ECR 用の VPC エンドポイントである com.amazonaws.region.ecr.dkr および com.amazonaws.region.ecr.api は、サブネットのリストに表示され、Fargate サブネットに関連付けられます。また、サブネットのリストに Amazon S3 ゲートウェイが表示されます。
    注: サブネットが一覧に表示されない場合は、[Manage Subnets] (サブネットの管理) を選択します。次に、アベイラビリティゾーンに基づいてサブネットを選択します。 その後、[Modify Subnets] (サブネットを変更) を選択します。
  4. [Policy] (ポリシー) タブを選択し、正しいポリシー要件が満たされていることを確認します
  5. com.amazonaws.region.ecr.api および com.amazonaws.region.ecr.dkr VPC エンドポイントにアタッチされたセキュリティグループが、Fargate の Amazon ECS タスクからのポート 443 での着信接続を許可することを確認するには、エンドポイントのリストからエンドポイントを選択します。
  6. [Security Groups] (セキュリティグループ) タブを選択します。
  7. [Group ID] (グループ ID) で、セキュリティグループ ID を選択します。
  8. [Inbound rules] (インバウンドルール) タブを選択し、Fargate の ECS タスクから 443 の接続を許可するルールが表示されていることを確認します。

VPC DHCP オプションセットを確認する

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインで、[Your VPCs] (お客様の VPC) を選択します。
  3. Fargate タスクを含む VPC を選択します。
  4. [Details] (詳細) タブで、[DHCP options set] (DHCP オプションセット) の設定を確認します。
  5. ナビゲーションペインで、[DHCP Options Sets] (DHCP オプションセット) を選択します。
  6. 手順 4 でメモした DHCP オプションセットを選択します。
  7. [Actions] (アクション)、[View details] (詳細を表示) の順に選択します。
  8. ドメインネームサーバーAmazonProvidedDNS に設定されていることを確認します。AmazonProvidedDNS に設定されていない場合は、条件付き DNS 転送を設定します。

タスク実行ロールの許可を確認する

  1. IAM コンソールを開きます。com.amazonaws.region.ecr.api および com.amazonaws.region.ecr.dkr VPC エンドポイントにアタッチされたセキュリティグループが、Fargate の Amazon ECS タスクからのポート 443 での着信接続を許可することを確認するには、エンドポイントのリストからエンドポイントを選択します。
  2. ナビゲーションペインで [Roles] (ロール) を選択します。
  3. Fargate タスクが使用しているタスク実行ロールを選択します。
  4. タスク実行ロールに、Amazon ECR からイメージをプルするための許可があることを確認します

イメージが存在することを確認する

  1. Amazon ECR コンソールを開きます。
  2. Fargate タスクがイメージをプルする Amazon ECR リポジトリを選択します。
  3. Amazon ECR の URI とタグが、タスク定義で指定されているものと同じであることを確認します。

注: Amazon ECR を使用していない場合は、指定したイメージリポジトリに image:tag が表示されていることを確認します。


AWS公式
AWS公式更新しました 2年前
コメントはありません