kakakakakku blog

Weekly Tech Blog: Keep on Learning!

docker login をせずに ECR を操作できる awslabs/amazon-ecr-credential-helper

3月末に参加した「JAWS-UG コンテナ支部」で知った ECR (Amazon EC2 Container Registry) の便利ツール Amazon ECR Docker Credential Helper を試した.Amazon ECR Docker Credential Helper を使うと ECR のログインを省略できる.

kakakakakku.hatenablog.com

github.com

前提

以下のバージョンを満たす必要がある.

  • Docker 1.11 以上
  • Go 1.5 以上

今回は以下のバージョンで試した.

  • Docker 17.05
  • Go 1.8.1

普通に ECR を使う場合

aws ecr get-login コマンドを叩くと返ってくる docker login コマンドを実行して,ECR にログイン(12時間だけ有効なセッションを取得する)する必要がある.もし Docker 17.06 以上を使っている場合はオプション構成が変わっていて --no-include-email を付ける必要がある.

$ aws ecr get-login --region ap-northeast-1
$ aws ecr get-login --region ap-northeast-1 --no-include-email

よって,デプロイなど自動化が必要な場合は,以下のような形で実装する必要があった.

$ $(aws ecr get-login --region ap-northeast-1)
$ $(aws ecr get-login --region ap-northeast-1 --no-include-email)

Amazon ECR Docker Credential Helper をインストールする

go get した後に make を実行して実行ファイルを生成する.

$ go get github.com/awslabs/amazon-ecr-credential-helper
$ cd ${GOPATH}/src/github.com/awslabs/amazon-ecr-credential-helper
$ make
$ ls -l ${GOPATH}/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login

次に docker-credential-ecr-login をシンボリックリンクにする.今回は /usr/local/bin に置いた.

ln -s ${GOPATH}/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login /usr/local/bin/docker-credential-ecr-login

最後に ~/.docker/config.json を修正して以下のエントリーを追加しておく.

{
    "credsStore": "ecr-login"
}

ログインなしで ECR を操作する

すると aws ecr get-login コマンドを実行する必要がなくなり,ECR に対して直接 docker push を実行できるようになる.地味な機能ではあるけど,個人的には凄く便利になるなと感じた.

まとめ

  • ECR は通常 aws ecr get-login コマンドを使って事前にログインをする必要がある
  • Amazon ECR Docker Credential Helper を使うとログインを意識せずに ECR を操作できるようになる

関連記事

AWS Blog にも記事が出ていて,Jenkins と連携する方法なども紹介されている.