CircleCIでECRにコンテナイメージをpushする時に、AWS CLI v1でDeprecatedになっていたコマンドを使っている箇所があったので修正した。
修正対象
次のようなCircleCIのconfigを修正の対象となる。
- run:
name: Push to ECR
command: |
$(aws ecr get-login --registry-ids XXXXXXXXXXXX --no-include-email --region ap-northeast-1)
ECRにログインするためのaws ecr get-login
は、以下のとおり既にdeprecatedになっている。
Note: This command is deprecated. Use get-login-password instead.
Ref: AWS CLI Command Reference - get-login
そこで、代替となるコマンドを使えるよう修正をおこなう。 加えて、AWS CLI v1を使っている場合はv2を使うように修正する。
Orbを使ってAWS CLI v2をセットアップ
まずはじめに、AWS CLI v2を利用する。 pipでインストールしている場合はそれでもいいのだが、Orb(パッケージ管理みたいなもの)を使うと設定がとても楽である。 具体的にはaws-cliを使う。
まずorbs
パタメータに使用するOrbを定義する。
orbs:
aws-cli: circleci/aws-cli@2.0.3
次にstep
パタメータにaws-cli/install
を定義する。
このステップでAWS CLI v2をインストールする
steps:
- checkout
- aws-cli/install
get-login
の代わりにget-login-password
を使う
最後にdeprecatedになったecr get-login
の代わりにecr get-login-password
を使うように設定する。
Ref:AWS CLI Command Reference - get-login-password
- $(aws ecr get-login --registry-ids XXXXXXXXXXXXX --no-include-email --region ap-northeast-1)
+ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin https://XXXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
元のコマンドはdocker login コマンドに必要な情報を全て戻り値として返す仕様だった。新しいコマンドはパスワードのみを返す仕様なので、docker loginにパイプすることができる。
まとめ
コードだけではなくて、デプロイパイプラインも変更に強い設計にしよう