Fargate での Amazon ECS タスクの「cannotpullcontainererror」エラーはどのように解決すればよいですか?
最終更新日: 2020 年 11 月 3 日
「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 を使用していない場合は、次の手順を実行します。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで、[Subnets] (サブネット) を選択します。
- ECS Fargate タスクが使用しているサブネットを選択します。
- [Route Table] (ルートテーブル) タブをクリックします。
- [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 インフラストラクチャでそれらを使用できることを確認します。
注: Fargate の起動タイプとプラットフォームバージョン 1.3.0 以前を使用する Amazon ECS タスクのみが、Amazon Elastic Container Registry (Amazon ECR) および Amazon Simple Storage Service (Amazon S3) のゲートウェイエンドポイントについて com.amazonaws.region.ecr.dkr VPC エンドポイントを必要とします。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインから [Endpoints] (エンドポイント) を選択します。
- エンドポイントのリストからエンドポイントを選択し、[Subnets] (サブネット) タブを選択します。Amazon ECR 用の VPC エンドポイントである com.amazonaws.region.ecr.dkr および com.amazonaws.region.ecr.api は、サブネットのリストにあり、Fargate サブネットに関連付けられている必要があります。また、サブネットのリストに Amazon S3 ゲートウェイが表示されるはずです。
注: サブネットが一覧に表示されない場合は、[Manage Subnets] (サブネットの管理) を選択します。次に、アベイラビリティーゾーンに基づいてサブネットを選択し、[Modify Subnets] (サブネットの変更) を選択します。 - [Policy] (ポリシー) タブを選択し、正しいポリシー要件が満たされていることを確認します。
- com.amazonaws.region.ecr.api および com.amazonaws.region.ecr.dkr VPC エンドポイントにアタッチされたセキュリティグループが、Fargate の Amazon ECS タスクからのポート 443 での着信接続を許可することを確認するには、エンドポイントのリストからエンドポイントを選択します。
- [Security Groups] (セキュリティグループ) タブを選択します。
- [Group ID] (グループ ID) で、セキュリティグループ ID を選択します。
- [Inbound rules] (インバウンドルール) タブを選択し、Fargate の ECS タスクから 443 の接続を許可するルールが表示されていることを確認します。
VPC DHCP オプションセットを確認する
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで、[Your VPCs] (お客様の VPC) を選択します。
- Fargate タスクを含む VPC を選択します。
- [Details] (詳細) タブで、[DHCP options set] (DHCP オプションセット) の設定を確認します。
- ナビゲーションペインで、[DHCP Options Sets] (DHCP オプションセット) を選択します。
- 手順 4 でメモした DHCP オプションセットを選択します。
- [Actions] (アクション)、[View details] (詳細を表示) の順に選択します。
- ドメインネームサーバーが AmazonProvidedDNS に設定されていることを確認します。AmazonProvidedDNS に設定されていない場合は、条件付き DNS 転送を設定します。
タスク実行ロールのアクセス許可を確認する
- IAM コンソールを開きます。
- ナビゲーションペインで [Roles] (ロール) を選択します。
- Fargate タスクが使用しているタスク実行ロールを選択します。
- タスク実行ロールに、Amazon ECR からイメージをプルするためのアクセス許可があることを確認します。
イメージが存在することを確認する
- Amazon ECR コンソールを開きます。
- Fargate タスクがイメージをプルする Amazon ECR リポジトリを選択します。
- Amazon ECR の URI とタグが、タスク定義で指定されているものと同じであることを確認します。
注: Amazon ECR を使用していない場合は、指定したイメージリポジトリに image:tag が表示されていることを確認します。</p