CodeBuild で使用するイメージを更新すると「aws ecr get-login」がエラーになったときの対処方法
困っていた内容
AWS CodeBuild で Docker イメージをビルドする仕組みを構築済みです。
先日、使用するイメージを
aws/codebuild/amazonlinux2-x86_64-standard:4.0
から
aws/codebuild/amazonlinux2-x86_64-standard:5.0
に変更しました。
変更後、ビルドのaws ecr get-login
がaws: error: argument operation: Invalid choice, valid choices are:
で失敗するようになりました。
なぜでしょうか。ビルドを成功させる方法を教えてください。
どう対応すればいいの?
aws ecr get-login
をaws ecr get-login-password
に変更してください。
# 変更前
$(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
# 変更後
aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
2024年11月時点でaws/codebuild/amazonlinux2-x86_64-standard:4.0
(al2/standard/4.0
)は、AWS CLI バージョン 1 を使用します。
一方でaws/codebuild/amazonlinux2-x86_64-standard:5.0
(al2/standard/5.0
)は AWS CLI バージョン 2 を使用します。
AWS CLI バージョン 2 では、aws ecr get-login
がaws ecr get-login-password
に置き換えられているため、AWS CLI バージョン 2 を使用するイメージに変更した場合は、ビルドで使用するコマンドもaws ecr get-login-password
に変更する必要があります。
そのため、Buildspec
でaws ecr get-login
を使用している場合は、イメージ変更に併せてaws ecr get-login-password
に変更してください。
参考資料
ecr get-login を削除し、ecr get-login-password に置き換えました
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com