ECR にpushするときにはDockerでloginが必要となる。 一番お手軽なのは、AWS CLI を使うやり方ではないだろうか aws ecr get-login-password | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com しかし、コンテナ上で実行されるCIで、 AWS CLI がインストールされているコンテナと Docker がインストールされているコンテナが分かれているとこの方法がとれない。 そこで awslabs/amazon-ecr-credential-helper を使用して以下のようにしてみた。 こんな記法のCIはないが、疑似CIのコードを書くと以下のような感じ # ecr-loginをインストール - image: golang command: go install github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login@latest # 別アカウントに対してAssumeRoleするような場合はsession tokenを取得。そうでなければこれは不要 - image: awscli command: aws sts assume-role --role-arn "<role arn>" --role-session-name "<session name>" output: AWS_ACCESS_KEY_ID: <access key> AWS_SECRET_ACCESS_KEY: <secret> AWS_SESSION_TOKEN: <token> - image: docker command: |- # ecr-loginをPATHの通った場所に配置 mv docker-credential-ecr-login /usr/local/bin/ # credential helperを使用する設定 mkdir -p ~/.docker cat <<'EOF' > ~/.docker/config.json { "credHelpers": { "<account>.dkr.ecr.<region>.amazonaws.com": "ecr-login" } } EOF docker build -t <account>.dkr.ecr.<region>.amazonaws.com/my-image:latest . # これが通るはず docker push <account>.dkr.ecr.<region>.amazonaws.com/my-image:latest