3月末に参加した「JAWS-UG コンテナ支部」で知った ECR (Amazon EC2 Container Registry) の便利ツール Amazon ECR Docker Credential Helper を試した.Amazon ECR Docker Credential Helper を使うと ECR のログインを省略できる.
前提
以下のバージョンを満たす必要がある.
- 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 と連携する方法なども紹介されている.