AWS CLI v2 ECR 換用 get-login-password

(圖說:荷蘭鹿特丹港口貨櫃起重機,將貨櫃們安置放妥,井然有序。圖片來源。)

Amazon Elastic Container Registry (ECR) 是個全託管的容器儲存庫。當我們打包好 Docker image (容器映像) 之後,可以將這些 images 存放進去 Amazon ECR 裡頭存放、備用。



我習慣用 Makefile 來記錄常用工具,但有些 base image 手邊事情一忙起來就沒得照顧,剛好今天輪到照顧他們了,卻發現原本記載在我的 Makefile 裡的 Amazon ECR 登入的指令執行失敗。之前依稀有印象看過 get-login 打算要 deprecated 的訊息,今天遇到了也就簡單記錄一下。(年紀漸長,記性越來越不靠譜了…)

AWS CLI v1 (deprecated)

原本 Makefile 裡頭用的是 AWS CLI v1 慣用的 ECR get-login 方式:

aws ecr get-login --no-include-email --region $(AWS_REGION) | /bin/bash

結果就噴出了:

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

AWS CLI v2

嗯嗯,好喔。手邊的電腦在二月換上了 AWS CLI v2(當然也有踩雷),並且 aws ecr get-login 已經失效,需要改用 aws ecr get-login-password

參考了一些資訊之後,先依照文件上的範例來進行,結果也滿順利的。

目前改成這樣:

aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com

完整的 Makefile 段落如下:

publish: build
	@ echo '[] Login ECR ...'
	aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com

	@ echo '[] Publishing to ECR ...'
	docker push $(REPOSITORY_URI):latest
	docker push $(REPOSITORY_URI):$(VERSION)

延伸閱讀

Loading comments…