Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Fargate の Amazon ECS タスクで発生する "cannotpullcontainererror" エラーの解決方法を教えてください。
AWS Fargate で Amazon Elastic Container Service (Amazon ECS) タスクを開始するために、"cannotpullcontainererror" エラーを解決したいです。
簡単な説明
"cannotpullcontainererror" エラーが原因で、Fargate でAmazon ECS タスクを開始できない場合があります。これらのタスクの Amazon Virtual Private Cloud (Amazon VPC) ネットワーク構成では、イメージを保存したリポジトリに ECS がアクセスできる必要があります。ネットワークを正しく構成していない場合、Amazon ECS on Fargate はイメージをプルできず、コンテナを開始できません。
解決策
"cannotpullcontainererror" エラーを解決するには、次の手順を実行します。
VPC で Amazon ECS インフラストラクチャがイメージリポジトリに到達できることを確認する
タスクが作成されたサブネットに関連付けられているルートテーブルでは、Amazon ECS インフラストラクチャがリポジトリエンドポイントに到達可能である必要があります。このエンドポイントには、インターネットゲートウェイ、NAT ゲートウェイ、または VPC エンドポイント経由で到達できます。
構成で AWS PrivateLink を使用しない場合は、次の手順を実行します。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで [サブネット] を選択します。
- ECS Fargate タスクが使用しているサブネットを選択します。
- [ルートテーブル] タブに切り替えます。
- Destination 列を参照し、ルートテーブルのデフォルトルート (0.0.0.0/0) では、パブリックインターネットアクセスが許可されていることを確認します。このアクセスは、NAT ゲートウェイ経由でもインターネットゲートウェイ経由でもかまいません。
重要: NAT ゲートウェイまたはインターネットゲートウェイは、デフォルトルートのターゲットである必要があります。ルートテーブルの例については、「ルーティングオプションの例」を参照してください。NAT ゲートウェイまたはインターネットゲートウェイを使用しない場合は、カスタム構成でパブリックインターネットアクセスを許可する必要があります。
インターネットゲートウェイ (パブリックサブネット) を使用する場合は、タスクにパブリック IP が割り当てられていることを確認します。タスクまたはサービスを作成する際、[VPC とセキュリティグループ] セクションで [パブリック IP の自動割り当て] を [有効] に設定します。
構成で PrivateLink を使用する場合は、VPC エンドポイントのセキュリティグループが Fargate インフラストラクチャによる使用を許可していることを確認してください。
注: Fargate でホストされる Amazon ECS タスクがバージョン 1.3.0 以前を使用している場合は、Amazon Elastic Container Registry (Amazon ECR) VPC エンドポイント com.amazonaws.region.ecr.dkr が必須です。これらのタスクでは、Amazon Simple Storage Service (Amazon S3) ゲートウェイエンドポイントも必要となります。 Fargate でホストされる Amazon ECS タスクがバージョン 1.4.0 以降を使用している場合は、Amazon ECR VPC エンドポイント com.amazonaws.region.ecr.dkr および com.amazonaws.region.ecr.api が必須です。これらのタスクでは、Amazon S3 ゲートウェイエンドポイントも必要となります。
構成で PrivateLink を使用する場合は、次の手順を実行します。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで [エンドポイント] を選択します。
- エンドポイントのリストから目的のエンドポイントを選択し、[サブネット] タブに切り替えます。サブネットのリストには、Amazon ECR に対し、VPC エンドポイント com.amazonaws.region.ecr.dkr および com.amazonaws.region.ecr.api が表示され、Fargate サブネットに関連付けられています。Amazon S3 ゲートウェイもサブネットのリストに含まれています。
注: サブネットがリストに表示されない場合は、[サブネットの管理] を選択します。次に、アベイラビリティーゾーンに応じたサブネットを選択します。次に、[サブネットの変更] を選択します。 - [ポリシー] タブに切り替え、正しいポリシー要件が満たされていることを確認します。
- VPC エンドポイント com.amazonaws.region.ecr.api および com.amazonaws.region.ecr.dkr にアタッチされたセキュリティグループが、Fargate の Amazon ECS タスクから受信する接続をポート 443 で許可していることを確認します。この設定を確認するには、リストから目的のエンドポイントを選択します。
- [セキュリティグループ] タブを選択します。
- [グループ ID] で目的のセキュリティグループ ID を選択します。
- [インバウンドルール] タブに切り替え、Fargate の ECS タスクからの接続をポート 443 で許可するルールが表示されていることを確認します。
VPC DHCP オプションセットを確認する
次の手順を実行します。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで [Your VPC] を選択します。
- 目的の Fargate タスクを含む VPC を選択します。
- [詳細タブ] に表示される DHCP オプションセットの設定を書き留めます。
- ナビゲーションペインで [DHCP オプションセット] を選択します。
- 書き留めた DHCP オプションセットを選択します。
- [アクション] を選択し、[詳細の表示] を選択します。
- ドメインネームサーバーが AmazonProvidedDNS に設定されていることを確認します。AmazonProvidedDNS に設定されていない場合は、条件付き DNS 転送を構成します。
タスク実行ロールの権限を確認する
次の手順を実行します。
- AWS Identity and Access Management (IAM) コンソールを開きます。
- ナビゲーションペインで [ロール] を選択します。
- Fargate タスクが使用しているタスク実行ロールを選択します。
- タスク実行ロールに Amazon ECR からイメージを取得する権限があることを確認します。
イメージが存在することを確認する
次の手順を実行します。
- Amazon ECR コンソールを開きます。
- Fargate タスクがイメージを取得する元となる Amazon ECR リポジトリを選択します。
- Amazon ECR の URI とタグがタスク定義で指定した値と同じであることを確認します。イメージが見つからない場合は、ライフサイクルポリシーがイメージを管理していないかを確認してください。
注: Amazon ECR を使用しない場合は、指定したイメージリポジトリに image:tag が表示されていることを確認します。
Fargate タスクに割り当てられたエフェメラルストレージを確認する
デフォルトでは、Fargate タスクには 20 GiB のエフェメラルストレージが割り当てられます。イメージサイズが大きすぎる場合、次のようなエラーが発生します。
"CannotPullContainerError: ref pull has been retried 1 time(s): failed to extract layer no space left on device: unknown"
注: このストレージは一時ファイル、ログ、その他のプロセスに使用されるため、イメージのサイズが小さい場合もこのエラーが発生する可能性があります。
この問題を解決するには、タスク定義の割り当てを編集します。詳細については、「Amazon ECS での Fargate タスクエフェメラルストレージ」を参照してください。
注: プラットフォームバージョン 1.4.0 以降を使用する Fargate タスクには、20 GiB 以上のエフェメラルストレージが割り当てられます。エフェメラルストレージの合計容量は最大 200 GiB まで増やすことができます。
- トピック
- Containers
- 言語
- 日本語
