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