CodeBuild で使用するイメージを更新すると「aws ecr get-login」がエラーになったときの対処方法
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
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






