ちょっと話題の記事

[アップデート]AWS CLI v2 で $ aws ecr get-login を使うときの注意点

AWS CLI v2 で $ aws ecr get-login を使いたいときの注意点を書きました。
2020.02.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大阪オフィスのYui(@MayForBlue)です。

つい昨日、Amazon ECRを触っていたら、AWS CLI v1 → v2 の移行で使用できなくなっているコマンドがあることを知ったのでその話です。

$ aws ecr get-login-password を使う

結論から言うと、ECRにログインするために必要な以下のコマンドがv2で使用できなくなっていました。

$ aws ecr get-login

公式のリファレンスを確認すると、以下のページに記載がありました。 AWS CLI version 2 replaces ecr get-login with ecr get-login-password

このコマンドをv2で使用すると、以下のように、コマンドが使用できない旨のメッセージが表示されます。

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: argument operation: Invalid choice, valid choices are:

batch-check-layer-availability           | batch-delete-image                      
batch-get-image                          | complete-layer-upload                   
create-repository                        | delete-lifecycle-policy                 
delete-repository                        | delete-repository-policy                
describe-image-scan-findings             | describe-images                         
describe-repositories                    | get-authorization-token                 
get-download-url-for-layer               | get-lifecycle-policy                    
get-lifecycle-policy-preview             | get-repository-policy                   
initiate-layer-upload                    | list-images                             
list-tags-for-resource                   | put-image                               
put-image-scanning-configuration         | put-image-tag-mutability                
put-lifecycle-policy                     | set-repository-policy                   
start-image-scan                         | start-lifecycle-policy-preview          
tag-resource                             | untag-resource                          
upload-layer-part                        | get-login-password                      
wait                                     | help

v2では代わりに以下のコマンドを使用します。

$ aws ecr get-login-password | docker login --username AWS --password-stdin MY-REGISTRY-URL

元のコマンドはdocker login コマンドに必要な情報を全て戻り値として返す仕様だったのですが、新しいコマンドはパスワードのみを返す仕様のため、docker loginコマンドに直接パイプして使用することができます。 こちらを使うことで、パスワードをシェルの履歴またはログに公開するリスクをなくすことができます。

(元のコマンドの戻り値の例)

$ docker login -u AWS -p <パスワード> -e none https://<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com

なお、$ aws ecr get-login はv1でも非推奨となっており、AWS CLIバージョン1.17.10以降では$ aws ecr get-login-password を使用することができます。

Note: This command is deprecated. Use get-login-password instead. (日本語訳) 注:このコマンドは非推奨です。代わりにget-login-passwordを使用してください。

(引用元:AWS CLI コマンドリファレンスget-login

The aws ecr get-login-password command is available in the AWS CLI version 1.17.10 and later, and the AWS CLI version 2. The older aws ecr get-login command is still available in the AWS CLI version 1 for backward compatibility. (日本語訳) このコマンド(aws ecr get-login-password)は、AWS CLIバージョン1.17.10以降、およびAWS CLIバージョン2で使用できます。以前のコマンド(aws ecr get-login)は、下位互換性のためにAWS CLIバージョン1でも引き続き使用できます。

(引用元:AWS CLI version 2 replaces ecr get-login with ecr get-login-password

最後に

小さなアップデートですが、すぐにソースが見つけられずに困ったので、記事にしました。 この記事がどなたかのお役に立てば幸いです。

以上、大阪オフィスのYui(@MayForBlue)でした(`・ω・´)

参考リンク

AWS CLI v1 → v2 の移行による変更は以下のリンクで確認することができます。 Breaking Changes – Migrating from AWS CLI version 1 to version 2

AWS CLI コマンドリファレンス get-login get-login-password

AWS CLI v2 のGAについてはコチラ [アップデート] リソース名の補完など強力な機能追加!AWS CLI v2 が GA されました!