CircleCIでECRにイメージをpushする時は「Orb」と「ecr get-login-passwordコマンド」を使う

Posted on
AWS ECR CirleCI

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にパイプすることができる。

まとめ

コードだけではなくて、デプロイパイプラインも変更に強い設計にしよう