CodeBuild
で ECR
に push しようとしたときにエラーが発生しました。
[Container] 2021/01/21 09:04:15 Running command docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/***:$BRANCH_NAME The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/***] 20e0a6dcff7f: Preparing 029c325415ee: Waiting name unknown: The repository with name '***' does not exist in the registry with id '123456789012' [Container] 2021/01/21 02:04:15 Command did not exit successfully docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/***:$BRANCH_NAME exit status 1 [Container] 2021/01/21 09:04:15 Phase complete: POST_BUILD State: FAILED [Container] 2021/01/21 09:04:15 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/***:$BRANCH_NAME. Reason: exit status 1
リポジトリが存在しないエラーが発生。
あれ? ECR リポジトリって事前作成必要だっけ?
なくても勝手に作ってくれなかったかな。
以前同じような実装したときに、ECR にリポジトを事前作成した記憶がまったくない。
とりあえずリポジトリが存在しない場合に作成するように変更することにしました。
CodeBuild の AssumeRole に権限を付与して
- ecr:DescribeRepositories - ecr:CreateRepository
docker push
前に存在確認してなければ作成。
aws ecr describe-repositories --repository-names $REPOSITORY_NAME || aws ecr create-repository --repository-name $REPOSITORY_NAME docker push $REPOSITORY_NAME:$BRANCH_NAME
docker push
して、存在しなければ勝手に作ってくれると思ってたんですが...
これは私の勘違いだったんでしょうか?