CodeBuild で使用するイメージを更新すると「aws ecr get-login」がエラーになったときの対処方法

CodeBuild で使用するイメージを更新すると「aws ecr get-login」がエラーになったときの対処方法

Clock Icon2024.11.13

困っていた内容

AWS CodeBuild で Docker イメージをビルドする仕組みを構築済みです。
先日、使用するイメージを
aws/codebuild/amazonlinux2-x86_64-standard:4.0
から
aws/codebuild/amazonlinux2-x86_64-standard:5.0
に変更しました。

変更後、ビルドのaws ecr get-loginaws: error: argument operation: Invalid choice, valid choices are:で失敗するようになりました。
なぜでしょうか。ビルドを成功させる方法を教えてください。

どう対応すればいいの?

aws ecr get-loginaws 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.0al2/standard/4.0)は、AWS CLI バージョン 1 を使用します。
一方でaws/codebuild/amazonlinux2-x86_64-standard:5.0al2/standard/5.0)は AWS CLI バージョン 2 を使用します。

AWS CLI バージョン 2 では、aws ecr get-loginaws ecr get-login-passwordに置き換えられているため、AWS CLI バージョン 2 を使用するイメージに変更した場合は、ビルドで使用するコマンドもaws ecr get-login-passwordに変更する必要があります。

そのため、Buildspecaws 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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.