ECRのImage URLにアカウントIDを直接ハードコーディングしてしまうと
本番環境とステージング環境でアカウントIDが別れている場合などにdocker-compose.ymlが共通にできません。
この問題を環境変数で解決します。
docker-composeファイル
image: ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/xxx:latest
アカウントIDを環境変数から参照するようにします。
参考URL
Compose における環境変数 | Docker Documentation
https://matsuand.github.io/docs.docker.jp.onthefly/compose/environment-variables/
シェル上からの実行
プロファイル、アカウントID指定版(面倒)
AWS_PROFILE=xxx AWS_ACCOUNT_ID=xxx ecs-cli compose up --create-log-groups --cluster-config xxx
プロファイル名以外にアカウントIDも指定が必要になるため書き換えミスが発生しそうです。
プロファイルのみ版(簡単)
AWS_PROFILE=xxx AWS_ACCOUNT_ID=`aws sts get-caller-identity | jq -r .Account` ecs-cli compose up --create-log-groups --cluster-config xxx
プロファイル名をもとにアカウントIDを補完するようにしました。
一時環境変数としてAWS_PROFILE, AWS_ACCOUNT_IDを渡す時にAWS_ACCOUNT_IDの評価時にAWS_PROFILEを参照しているところがミソです。
標準でアカウントID解決するやりかたあるのではと探したんですが見つけらなかったのでシェル芸に逃げました。
参考URL
【小ネタ】AWS CLIでAWS Account IDが取れるようになりました! | Developers.IO
https://dev.classmethod.jp/articles/get-aws-account-id-with-get-caller-identity/
jq コマンドを使う日常のご紹介 - Qiita
https://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af