omuronの備忘録

個人的な備忘録

(小ネタ) ECR リポジトリが存在しないときにワンライナーで作成する

CodeBuildECR に 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 して、存在しなければ勝手に作ってくれると思ってたんですが...
これは私の勘違いだったんでしょうか?