in Command-line Interface #AWS #DevOps

Migrating from aws ecr get-login to aws ecr get-login-password

I'm not entirely sure when the change happens, but recently as I was upgrading AWS CodeBuilds to use a newer version of Ubuntu, I ran into some problems with aws ecr get-login.

Without making any code changes, my build started to fail with the following:

[Container] 2021/06/21 20:44:19 Running command $(aws ecr get-login --no-include-email --region us-east-1)

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-registry-policy | delete-repository delete-repository-policy | describe-image-scan-findings describe-images | describe-registry describe-repositories | get-authorization-token get-download-url-for-layer | get-lifecycle-policy get-lifecycle-policy-preview | get-registry-policy 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 put-registry-policy | put-replication-configuration set-repository-policy | start-image-scan start-lifecycle-policy-preview | tag-resource untag-resource | upload-layer-part get-login-password | wait help

At a glance I spotted the get-login-password and jumped to the conclusion that they simply renamed the command. Easy fix!

Except that assumption was wrong, and my next build failed a bit differently:

[Container] 2021/06/21 21:16:25 Running command $(aws ecr get-login-password --no-include-email --region us-east-1)

Unknown options: --no-include-email

At this point it was time to do some digging to figure out what the new syntax was supposed to be.

Turns out, the newer command didn't need any of the arguments and could be easily piped directly to the docker login command as such:

[Container] 2021/06/21 21:21:46 Running command aws ecr get-login-password | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com

Login Succeeded

And we were off to the races and my builds started to pass again!