はじめに
AWS ECS Fargateを使ってタスク起動をしようとした際に、ECRからイメージをプルしようとして失敗する「ResourceInitializationError」が発生しました。
このエラーは、ECSタスクからECRへの通信に関する設定不備が原因となることが多く、解決のために細かいチェックが必要となります。
書こうと思ったきっかけ
実際にFargateの環境で、タスク起動時にECRからイメージをpullしようとして失敗した経験から、このエラーの原因分析と対処法をしっかり整理しておきたいと思い、記事を作成しました。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
同じことを繰り返さないため、また同じ問題に遭遇した方の参考になればと考えています。
発生したエラー
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. Check your task network configuration. RequestError: send request failed caused by: Post "https://api.ecr.ap-northeast-1.amazonaws.com/": dial tcp xxx.xxx.xxx.xxx:443: i/o timeout
エラー内容を分析
-
unable to pull secrets or registry auth
- ECRからのイメージ取得に失敗
-
connection issue between the task and Amazon ECR
- ECSタスクからECRへの通信失敗
-
i/o timeout
- TCP接続が途中でタイムアウト
原因候補
パターン | 内容 | 対応例 |
---|---|---|
タスク実行ロールIAM許可なし | ECR pull権限がない |
AmazonECSTaskExecutionRolePolicy or AmazonEC2ContainerRegistryReadOnly を付与 |
ネットワーク設定ミス | NAT Gatewayなし、Public IPなし | NAT Gatewayを設置 or Public Subnetから起動 |
セキュリティグループルールの不備 | Outboundで443番を許可していない | Outboundを0.0.0.0/0に443を許可 |
VPCエンドポイントなし | Private SubnetからECRに直接できない |
ecr.api と ecr.dkr をVPC Endpointで設定 |
確認したタスク定義
-
executionRoleArn
もtaskRoleArn
も正しく設定されている -
networkMode: awsvpc
も正しい -
requiresCompatibilities: ["FARGATE"]
も問題なし - ログの設定(
awslogs
) も正しい
まとめ
ECS Fargateを使う際に発生するECRからのイメージpull失敗は、IAM許可やネットワーク設定の不備が原因となることが多いです。
「タスク起動でどこまで通信できているか」を通信経路に次々と調査することで、原因特定はどうにも解決できるかと思います...!
同じ現象で困っている方の参考になれば幸いです!