aws CodePipelineを使って、コードをビルドする際に「BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE」のエラーに遭遇したので解決方法を紹介します。
目次
原因: CodeBuildからリポジトリへのアクセス権限がない
「BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE」となってしまう原因はCodeBuildのiamがecrのリポジトリにアクセスする権限がないためです。
ecrのリポジトリからCodeBuildのiamに対して許可を出せば解決します。
解決方法: ecrからアクセス許可
「Amazon Elastic Container Registry」の対象リポジトリのチェックして、アクション>許可をクリック。
このような条件で許可をします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CodeBuildAccessPrincipal",
"Effect": "Allow",
"Principal": {
"Service": "codebuild.amazonaws.com",
"AWS": "<CodeBuildの IAM ロール>"
},
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Condition": {
"StringEquals": {
"aws:SourceArn": "arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>",
"aws:SourceAccount": "<AWS-account-ID>"
}
}
}
]
}
CodeBuildの IAM ロールとaws:SourceArnはCodeBuildのコンソールから確認できます。
対象のビルドプロジェクトをチェックして「詳細を表示」ボタンを押します。
遷移したページ内にあるサービスロールがCodeBuildの IAM ロール、プロジェクト ARNがaws:SourceArnとなります。
aws:SourceAccountはaws:SourceArnからAWS-account-IDをコピペします。
参考
Amazon ECR sample for CodeBuild – AWS CodeBuild
Provides information about the Amazon ECR sample that is designed to work with AWS CodeBuild.
コメント