Amazon ECR が GA でおめでたいのでさわってみた

AWS のマネージド Docker Registry である Amazon EC2 Container Registry (ECR) が GA ですね! (SA 岩永さんによる日本語訳はこちら)

先日の re:Invent で発表されて以来まだかまだかと待ち続けていましたが、ついに一般公開となりました.

早速触ってみたので感想とかもろもろ.

ちなみに動かした環境は

  • OS X El Capitan Version 10.11.2 (15C50)
  • Docker Machine 0.5.1 (7e8e38e)
  • Docker 1.9.1 (a34a1d5)
  • VirtualBox 5.0.10 r104061

です.

まずはマネージドコンソールから

Amazon ECR は Amazon ECS のコンソールのメニューに追加されてました.

メニューのここに

残念ながら現時点では us-east-1 (North Virginia) のみの公開のようです.

Get Started から新しい Repository を作成します.

新しい Amazon ECR Repository の作成

ここでは my-new-ecr-repos/test-image という名前を入力しました.

エンドポイントは

https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/{YOUR_REPOSITORY_NAME}

という感じで設定されるようです.

Repository 名の / は必須ではありませんが、今まで docker/distribution を自前で運用していたため、慣れた名前空間を利用したくて / ありにしました.

ここで作成する Repository が docker コマンドでの push/pull の対象になります.

今回の例で言うと、

$ docker push https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest
$ docker pull https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest

となります.

Repository 名を入力したら、ひと思いに Next Step ボタンを押下しましょう.

早速使って見る

上記の流れで Repository を作成すると

サクッと使うためのコマンド一覧

のようなチュートリアル的なコマンドリストが表示されます.

早速動かそうとしてみましたが僕が使っている Homebrew で入る aws-cli は 1.9.14 のため、まだ ecr サブコマンドが含まれている 1.9.15 は利用できないようです.

ので、僕自身はソースからビルドして動かしてみました.

pip で aws-cli を直接インストールしている方は多分更新すれば最新になるのかなと思うので、この後のビルドのくだりは飛ばしちゃってください.

aws-cli をソースからビルド

GitHub から最新ソースを持ってきてビルドしましょう.

$ which pip

でパスが返ってくる場合はそのまま次に進みます. 返ってこない場合は $ brew install python とかで pip ごとまるっと入れちゃうのが楽でしょう.

ソースをクローン

$ git clone git@github.com:aws/aws-cli.git

ビルド

$ cd aws-cli

$ pip install -r requirements.txt
- 省略 -
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Pygments-2.0.2 Sphinx-1.1.3 botocore colorama-0.3.3 docutils-0.12 jmespath mock-1.0.1 nose-1.3.0 py-1.4.31 pyasn1-0.1.9 python-dateutil-2.4.2 rsa-3.1.4 six-1.10.0 tox-1.4 virtualenv-13.1.2 wheel-0.24.0

$ pip install -e .
- 省略 -
Installing collected packages: awscli
  Running setup.py develop for awscli
Successfully installed awscli

動かしてみる

バイナリはビルドを実行したディレクトリの bin 以下に出力されています.

$ ./bin/aws --version
aws-cli/1.9.15 Python/2.7.11 Darwin/15.2.0 botocore/1.3.15

aws-cli のバージョンが 1.9.15 と表示されることを確認してください.

$ ./bin/aws ecr help

ecr サブコマンドのヘルプが表示されれば準備 OK です.

マネージドコンソールで表示されたコマンドを動かす

まずは EC2 Container Registry にログイン

$ ./bin/aws ecr get-login --region us-east-1 --profile {YOUR_PROFILE_NAME}

このコマンドを実行すると、docker login ... から始まるながーいコマンドが出力されます.

ここから先は docker コマンドが使えることが前提になります. ローカルで動かしたことがない場合は Docker Toolbox をインストールしましょう.

先ほどのながーいコマンドをまるっとコピーして実行しましょう.

$ docker login -u AWS -p {SO_LONG_CREDENTIAL_HERE} -e none https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com

うまいことログインできると、

WARNING: login credentials saved in {YOUR_HOME_DIRECTORY}/.docker/config.json
Login Succeeded

のような表示が出ます. 過去に docker login コマンドで Docker Hub などにログインしていると出ないかもしれません.

ECR に push するイメージを用意する

上に貼ったキャプチャの画面ではチュートリアル用の Dockerfile からイメージをビルドしてプッシュしているようですが、めんどくさいので有りものを利用します.

Docker 界最軽量の呼び声高い、busybox を pull してきます.

$ docker pull busybox:latest

busybox に先ほど作成した Repository の名前をつけます.

$ docker tag busybox:latest {AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest

プッシュ!

$ docker push {AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest
The push refers to a repository \[{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image\] (len: 1)
ac6a7980c6c2: Pushed
c00ef186408b: Pushed
latest: digest: sha256:7b64eacbb0ce4f24fac45fddc2a542ff87288f8ec9295a59377328348bbf0e2b size: 2735

マネージドコンソールで確認してみる

Amazon ECR に戻ると、

リポジトリが〜

Repository の中を覗いてみると、

イメージが〜

という感じでちゃんと作成されてました.

これだけじゃない Amazon ECR

個人的に一番テンションが上がったのが、Permission の設定部分です.

まずはご覧ください.

Permission 設定画面

1 つのアカウント内に作成された Amazon ECR を Account Number を指定して付与したい権限を選ぶだけで複数の AWS アカウントから利用できるってことだと思います. (まだ試してませんが)

僕の所属しているチームでは複数プロジェクトで共通のイメージを使うことがよくあるので、ありがたい限りです.

まとめ

まだまださわり始めですが、今のところかなりいい感じに見えます.

はやく東京リージョンに来てくれることを祈ってます.