Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Amazon ECR からイメージを取得しようとすると発生する ResourceInitializationError エラーを解決する方法を教えてください。
Amazon Elastic Container Service (Amazon ECS) タスクが Amazon Elastic Container Registry (Amazon ECR) からイメージを取得しようとする際、ResourceInitializationError というエラーが発生します。
簡単な説明
Amazon ECS タスクの起動時に、次のいずれかの ResourceInitializationError エラーメッセージが表示されることがあります。
「Unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. (タスクが Amazon ECR からレジストリ認証を取得できません。タスクと Amazon ECR 間の接続に問題があります)Check your task network configuration. (タスクネットワークの設定を確認してください)RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout」
または、
「unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s) (シークレットまたはレジストリ認証を取得できません: 実行リソースを取得できません: ecr レジストリ認証を取得できません: サービス呼び出しが 3 回再試行されました:) RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout.Please check your task network configuration」 (タスクネットワークの設定を確認してください)
これらのエラーは、Amazon ECS タスクが Amazon ECR からコンテナイメージまたは認証情報を取得できない場合に発生します。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
タスク接続をテストする
タスク接続をテストするには、AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用します。ランブックは、Amazon ECS クラスターリソースが配置されているリージョンと同じ AWS リージョンで実行する必要があります。さらに、最後に失敗したタスクの ID を使用します。失敗したタスクが Amazon ECS サービスに属している場合は、そのサービス内で最後に失敗したタスクを使用します。失敗したタスクは、オートメーション中に ECS:DescribeTasks で確認できる必要があります。デフォルトでは、停止したタスクは Stopped 状態になってから 1 時間表示されます。
オートメーションの出力に応じて、次の手動トラブルシューティング手順のいずれかを実行します。
サブネットからインターネットへのルートを確認する
Amazon ECS タスクをデプロイしたサブネットのルートテーブルを確認します。タスクにインターネットへのデフォルトルート (0.0.0.0/0) があり、タスクセキュリティグループがポート 443 でのアウトバウンドトラフィックを許可していることを確認します。
パブリックサブネット
AWS Fargate タスクがパブリックサブネットにある場合は、そのタスクにパブリック IP アドレスを割り当てる必要があります。
タスクの Elastic ネットワークインターフェイスとプライベート IP アドレスを確認するには、次の AWS CLI コマンド describe-tasks を実行します。
aws ecs describe-tasks --cluster cluster-name --tasks task-arn
注: 実際のものでそれぞれ、cluster-name をクラスター名に、task-arn をタスクの ARN に置き換えます。
タスクのネットワークインターフェイスにパブリック IP アドレスがアタッチされているかどうかを確認するには、次の describe-network-interfaces コマンドを実行します。
aws ec2 describe-network-interfaces --network-interface-ids example-eni
注: example-eni は、実際のタスクのネットワークインターフェイスに置き換えます。
Amazon ECS がタスクに関連するネットワークインターフェイスにパブリック IPv4 アドレスを自動的に割り当てるように設定します。新しいタスクを実行したり、新しいサービスを作成したりする際、[パブリック IP] で [有効] を選択します。
既存のタスクまたはサービスには、パブリック IP アドレスを自動的に割り当てられません。パブリック IP アドレスの自動割り当てを有効にしてサービスを再作成する場合は、次の create-service コマンドを実行します。
aws ecs create-service --cluster cluster-name --service-name service-name --task-definition taskdef:revision --desired-count 1 --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[subnet-aaaaaa,subnet-bbbbbb],securityGroups=[sg-ccccccc],assignPublicIp=ENABLED}"
注: 実際のものでそれぞれ cluster-name をクラスター名に、service-name をサービス名に、taskdef:revision をタスク定義に置き換えます。実際のものでそれぞれ、subnet-aaaaaa と subnet-bbbbbb をサブネットに、sg-ccccccc をセキュリティグループに置き換えます。
クラスターの Amazon Virtual Private Cloud (Amazon VPC) 接続で DNS のホスト名と DNS 解決が有効になっていることを確認します。
プライベートサブネット
タスクがプライベートサブネットにある場合は、インターネット接続ソースに応じて次の設定を確認します。
- NAT ゲートウェイを使用する場合は、パブリックサブネットに配置します。
- AWS PrivateLink を使用する場合は、VPC エンドポイントのセキュリティグループが VPC CIDR またはサービスセキュリティグループからのインバウンドトラフィックをポート 443 で許可していることを確認します。
ネットワーク ACL とセキュリティグループの設定を確認する
ネットワークアクセスコントロールリスト (ネットワーク ACL) とセキュリティグループが、サブネットからのポート 443 へのアウトバウンドアクセスを許可していることを確認します。
注: Fargate タスクは、Amazon ECS エンドポイントへの送信トラフィックとアクセスを許可するために、ポート 443 へのアウトバウンドアクセスが可能である必要があります。
(PrivateLink のみ) Amazon VPC エンドポイントを確認する
PrivateLink を使用する場合は、次の必須エンドポイントを作成する必要があります。
- Amazon ECR には、com.amazonaws.region.ecr.dkr と com.amazonaws.region.ecr.api を作成します。
- Amazon Simple Storage Service (Amazon S3) には、com.amazonaws.region.s3 を作成します。
- Amazon CloudWatch を使用してアプリケーションログを保存する場合は、com.amazonaws.region.logs も作成します。
注: 上記のエンドポイントで、region はお使いのリージョンに置き換えます。
詳細については、「Amazon ECR VPC エンドポイントに関する考慮事項」を参照してください。
VPC にインターネットゲートウェイがなく、タスクで awslogs ログドライバーを使用する場合は、CloudWatch Logs 用の VPC エンドポイントを作成します。
VPC エンドポイントのセキュリティグループが、Fargate タスクのセキュリティグループまたは VPC CIDR 範囲からのトラフィックを TCP ポート 443 で許可していることを確認します。
IAM ロールとアクセス許可を確認する
AWS Identity and Access Management (IAM) のタスク実行ロールには、AmazonECSTaskExecutionRolePolicy または同等のアクセス許可があることを確認します。
ロールのアクセス許可とタスク実行ロールの詳細については、「Amazon ECS のタスク実行 IAM ロール」を参照してください。
関連情報

関連するコンテンツ
- 質問済み 1年前lg...