ども、かっぱです。
tl;dr
とのことでちっくと試してみました。
メモ
引き続き教材は
引き続き Worker Tire で Cron っぽいやつをやってみます。
ひとまずは ECR に build して push
- リポジトリを作る
$ aws --region us-east-1 ecr create-repository --repository-name oreno-sinatra-worker
- ECR にログインする
$ aws ecr get-login --region us-east-1 $ docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(ホントはもっと長い)xxxxxxxxxxxxxxxxxxxxx -e none https://xxxxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
- build する
$ docker build --no-cache=true -t oreno-sinatra-worker .
- tag を付ける
$ docker tag -f oreno-sinatra-worker:latest xxxxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/oreno-sinatra-worker:latest
- push する
$ docker push xxxxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/oreno-sinatra-worker:latest
- push されていることを確認
$ aws --region us-east-1 ecr list-images --repository-name oreno-sinatra-worker { "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } ] }
Elastic Beanstalk インスタンスに適用する IAM role にポリシーを追加(1)
以下のように Elastic Beanstalk インスタンスに適用されている IAM role にマネージドポリシー(AmazonEC2ContainerRegistryReadOnly)を追加する。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ], "Resource": "*" }] }
マネージドポリシーを適用することで、今後の機能追加等で IAM ポリシーをイチイチいじる必要が無いのが嬉しい。
ECR へのログイン情報を S3 バケットにアップしておく
Elastic Beanstalk で Docker イメージを利用する際に、Docker Hub やプライベートリポジトリからイメージを取得してくることになりますが、認証情報を S3 バケットに置いておく必要があります。もちろん、ECR も同じ事が言えるので、先ほど ECR のリポジトリにログインした際に利用した認証情報を S3 バケットに保存しておきましょう。
尚、ログインの際に利用した認証情報は ~/.docker/config.json
に格納されています。
$ cat ~/.docker/config.json { "auths": { "https://xxxxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com": { "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(ホントはもっと長い)xxxxxxxxxxxxxxxxxxxx", "email": "none" } }
上記のファイルを S3 Bucket にアップロードしておきます。
# # S3 Bucket を作成する # $ aws --region ap-northeast-1 s3 mb s3://oreno-docker-auth # # S3 Bucket に認証情報をアップする # $ aws --region ap-northeast-1 s3 cp ~/.docker/config.json s3://oreno-docker-auth/oreno-docker-auth.txt
Beanstalk インスタンスに適用する IAM role にポリシーを追加(2)
上記で作成したバケットへのアクセスも許可する必要があるので IAM role にポリシーを追加します。こちらもマネージドポリシーの AmazonS3ReadOnlyAccess をアタッチしておきました。実運用を想定する場合には適切なポリシーを与えるように検討したいところです。
Dockerrun.aws.json を修正
今回は Docker イメージを利用する為、以下のように Authentication
と Image
を追記しました。
{ "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "oreno-docker-auth", "Key": "oreno-docker-auth.txt" }, "Image": { "Name": "xxxxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/oreno-sinatra-worker:latest", "Update": "true" }, "Ports": [ { "ContainerPort": "4567" } ], "Volumes": [ { "HostDirectory": "/tmp", "ContainerDirectory": "/tmp" } ], "Logging": "/var/log/nginx" }
Authentication
には ECR にログインする為の認証情報を保存している Bucket とファイル名(キー)、そして Image
には ECR のリポジトリを定義しています。
eb create
後は以下のように eb create
を実行します。
$ eb create --tier worker --instance_profile ${Insance_Profile_Name}
しばし待ちましょ。
確認
- 各種ログの確認
eb ssh
でログインして各種ログを確認してみます。
# # /tmp/docker_build.log を確認 # $ cat /tmp/docker_build.log Sending build context to Docker daemon 14.34 kB Sending build context to Docker daemon Step 0 : FROM xxxxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/oreno-sinatra-worker:latest ---> 45afb86977eb Step 1 : EXPOSE 4567 ---> Running in 215ae90196d6 ---> aa4a2596cf6f Removing intermediate container 215ae90196d6 Successfully built aa4a2596cf6f # # /tmp/docker_pull.log を確認 # $ cat /tmp/docker_pull.log (snip) 45afb86977eb: Pull complete Remote Digest: Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Status: Downloaded newer image for xxxxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/oreno-sinatra-worker:latest
- Woker アプリケーションのログを確認
eb ssh
でログインして Worker アプリケーションのログを確認してみます。
[ec2-user@ip-10-134-164-40 tmp]$ tail /tmp/sinatra.log I, [2016-01-16T10:00:00.014747 #8] INFO -- : bar I, [2016-01-16T10:02:42.844395 #8] INFO -- : bar I, [2016-01-16T10:05:33.582870 #8] INFO -- : bar I, [2016-01-16T10:05:59.486555 #8] INFO -- : bar I, [2016-01-16T10:06:59.511213 #8] INFO -- : bar I, [2016-01-16T10:07:59.553031 #8] INFO -- : bar I, [2016-01-16T10:08:59.519486 #8] INFO -- : bar I, [2016-01-16T10:09:59.543144 #8] INFO -- : bar I, [2016-01-16T10:10:59.513466 #8] INFO -- : bar I, [2016-01-16T10:11:59.514448 #8] INFO -- : bar
一応、一分毎に Worker アプリケーションにアクセスが発生していることがわかります。しめしめ。
終わり
ということで、Elastic Beanstalk から ECR のコンテナイメージを利用することが出来ました。ギョームで使うことは多分無いと思いますが東京リージョンでのサービス開始が待ち遠しです。