はじめに
AWS プロファイルを指定するだけでさくっと ECR ログインを実現する手段が欲しかったのでスクリプトを用意した。
背景
AWS CLI で ECR ログインする際に利用されていた get-login
は AWS CLI v1 では非推奨、AWS CLI v2 ではそもそもコマンド自体が使えなくなっている。代わりに aws ecr get-login-password
を利用するようにとのこと。
で、get-login-password
を利用して ECR ログインするコマンドを素直に書くと以下のようになる。
$ aws ecr get-login-password | docker login --username AWS --password-stdin <registry url>
しかし <registry url>
が厄介で、デフォルトのプライベートレジストリ URL は https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com
である。
そう、AWS プロファイルが複数あってログイン先を必要に応じて切り替えたいとき、レジストリ URL はプロファイル毎に基本違うわけで aws ecr
の方だけ --profile <profile>
オプションを指定しても意味がない。
対応方法
aws sts
コマンドでアカウントIDを取得できるので、これを組み合わせて以下のような簡単なスクリプトを用意した。
#!/bin/bash
set -eu
readonly aws_profile=$1
readonly aws_account_id=`aws sts get-caller-identity --profile=${aws_profile} | awk ' $1 == "\"Account\":" { gsub(/\",*/, ""); print $2 } '`
aws ecr get-login-password --profile ${aws_profile} | docker login --username AWS --password-stdin https://${aws_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com
これで
$ ./ecr-login.sh <aws_profile_name>
とかを実行すればプロファイル指定で ECR ログインできるようになる。function 化して .rc に書くのもよいかもしれない。