やっと on time な「初老丸の独り Advent calendar 2015」の十五日目の記事です。
tl;dr
Amazon ECS で個人的な疑問を紐解いていきたい。
今日の疑問
疑問
- ECS-Optimized Amazon Linux 以外の Linux に ECS container agent をインストール出来るのか?
- 出来れば最新の Docker で ECS container agent を利用したいです
答え
- 安心してください、インストールできますよ
ECS container agent 自体が Docker コンテナということもあり Docker が動いていればインストールできそうです。以下のようにドキュメントにも Amazon Linux 以外の Linux 環境にインストールする手順も記載されています。
また、以下のように Ubuntu 環境にインストールされている方もいらっしゃいます。
今回は上記の記事などを参考に ECS container agent を ECS-Optimized Amazon Linux 以外の Linux にインストールしてみる。
試す
教材
今後の疑問解決か出来るだけこちらのリポジトリを利用する。
ざっくり手順
- EC2 を構築する
- ECS クラスタを作成する
- EC2 に Docker Engine をインストールする
- ECS Container agent をインストールする
- ひとまずクラスタの状態を確認するところまで
EC2 を構築する、ECS のクラスタを作成する
EC2 の OS は terraform を利用して Ubuntu Server 14.04 LTS を利用する。
尚、教材で利用する各種コマンドは make コマンドにまとめている。
$ cd oreno-ecs/terraform $ make Makefile for ECS Usage: make [task] Tasks: tf-plan ....... Execute terraform plan tf-apply ....... Execute terraform apply tf-destroy ....... Execute terraform destroy
実行前に Makefile を修正する必要があるので注意。
$ vim Makefile TF_PLAN := terraform plan -var 'access_key=AKxxxxxxxxxxxxxxxxxx' -var 'secret_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -var 'ssh_key_name=your-key-name' -var 'subnet=subnet-xxxxxxxx' -var 'securiy_group=sg-xxxxxxxx' TF_APPLY := terraform apply -var 'access_key=AKxxxxxxxxxxxxxxxxxx' -var 'secret_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -var 'ssh_key_name=your-key-name' -var 'subnet=subnet-xxxxxxxx' -var 'securiy_group=sg-xxxxxxxx'
自分の環境に合わせて上記の情報を修正する。修正したら以下のようにterraform plan
と terraform apply
を実行する。
$ make tf-plan Refreshing Terraform state prior to plan... The Terraform execution plan has been generated and is shown below. Resources are shown in alphabetical order for quick scanning. Green resources will be created (or destroyed and then created if an existing resource exists), yellow resources are being changed in-place, and red resources will be destroyed. (snip) $ make tf-apply (snip) aws_iam_role.ecs_iam_role: Refreshing state... (ID: ecs_iam_role) aws_iam_role_policy.ecs_iam_role: Refreshing state... (ID: ecs_iam_role:ecs_iam_role) aws_iam_instance_profile.ecs_iam_role: Refreshing state... (ID: ecs_iam_role) aws_instance.oreno_tf_test: Refreshing state... (ID: i-xxxxxxxx) Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: EC2 IP address = xxx.xxx.xxx.xxx EC2 Instance ID = i-xxxxxxxx ECS Cluster Name = oreno-cluster
EC2 が起動したら ssh でログイン出来るか確認しておく。
Docker をインストールする
以下のドキュメントに従って Docker をインストールする。
2015 年 12 月 15 日時点の Docker バージョンは 1.9.1 となる。
# # apt-key の追加 # $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D # # source リストを作成 # $ sudo vim /etc/apt/sources.list.d/docker.list # 以下を追加する deb https://apt.dockerproject.org/repo ubuntu-trusty main # # apt-get update # $ sudo apt-get update # # Docker をインストール # $ sudo apt-get install docker-engine # # ubuntu ユーザーでも docker コマンドをたたけるように ubuntu ユーザーを docker グループに所属させる # $ sudo usermod -aG docker ubuntu # いったん、ログアウト
ubuntu ユーザーを docker グループに所属させた後に、一旦、ログアウトすることをお忘れなく…。
ECS container agent をインストールする
こちらのドキュメントを参考にして ECS container agent をインストールする。
# # ECS container agent がコンテナ内からマウントするためのマウントポイントを作成する # $ sudo mkdir -p /var/log/ecs $ sudo mkdir -p /var/lib/ecs/data # # ECS container agent をインストールする(docker run する) # $ docker run --name ecs-agent --detach=true --restart=on-failure:10 --volume=/var/run/docker.sock:/var/run/docker.sock --volume=/var/log/ecs/:/log --volume=/var/lib/ecs/data:/data --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro --volume=/var/run/docker/execdriver/native:/var/lib/docker/execdriver/native:ro --publish=127.0.0.1:51678:51678 --env=ECS_LOGFILE=/log/ecs-agent.log --env=ECS_LOGLEVEL=info --env=ECS_DATADIR=/data --env=ECS_CLUSTER=oreno-cluster amazon/amazon-ecs-agent:latest # # インストールされたことを確認 # $ docker ps
よし、よし。
諸々確認
例のごとく make コマンドにまとめてある。
$ cd oreno-ecs/ecs-cli $ make Makefile for ECS Usage: make [task] Tasks: ecs-up ....... ECS Cluster up ecs-list ....... list up ECS Clusters ecs-list-container-instances ....... list up ECS Container instances. Require environment variable 'ECS_CLUSTER' ecs-describe-container-instances....... describe ECS Container instances. Require environment variable 'ECS_CLUSTER' and 'ECS_ARN'
- aws cli で ECS クラスタを確認する
$ make ecs-list CLUSTERARNS arn:aws:ecs:ap-northeast-1:251150836600:cluster/oreno-cluster
- aws cli でコンテナインスタンスを確認する
$ make ECS_CLUSTER=oreno-cluster ecs-list-container-instances CONTAINERINSTANCEARNS arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxxxx:container-instance/55bcab9a-1983-4b5c-bfba-3b5668e29034
- aws cli でコンテナインスタンスの詳細
$ make OUTPUT=text ECS_CLUSTER=oreno-cluster ECS_ARN=55bcab9a-1983-4b5c-bfba- 3b5668e29034 ecs-describe-container-instances CONTAINERINSTANCES True arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxxxx:container-instance/55bcab9a-1983-4b5c-bfba-3b5668e29034 i-xxxxxxx 0 0 ACTIVE ATTRIBUTES com.amazonaws.ecs.capability.privileged-container ATTRIBUTES com.amazonaws.ecs.capability.docker-remote-api.1.17 ATTRIBUTES com.amazonaws.ecs.capability.docker-remote-api.1.18 ATTRIBUTES com.amazonaws.ecs.capability.docker-remote-api.1.19 ATTRIBUTES com.amazonaws.ecs.capability.docker-remote-api.1.20 ATTRIBUTES com.amazonaws.ecs.capability.logging-driver.json-file ATTRIBUTES com.amazonaws.ecs.capability.ecr-auth REGISTEREDRESOURCES 0.0 1024 0 CPU INTEGER REGISTEREDRESOURCES 0.0 992 0 MEMORY INTEGER REGISTEREDRESOURCES 0.0 0 0 PORTS STRINGSET STRINGSETVALUE 22 STRINGSETVALUE 2376 STRINGSETVALUE 2375 STRINGSETVALUE 51678 REGISTEREDRESOURCES 0.0 0 0 PORTS_UDP STRINGSET REMAININGRESOURCES 0.0 1024 0 CPU INTEGER REMAININGRESOURCES 0.0 992 0 MEMORY INTEGER REMAININGRESOURCES 0.0 0 0 PORTS STRINGSET STRINGSETVALUE 22 STRINGSETVALUE 2376 STRINGSETVALUE 2375 STRINGSETVALUE 51678 REMAININGRESOURCES 0.0 0 0 PORTS_UDP STRINGSET VERSIONINFO 191dbd5 1.7.0 DockerVersion: 1.9.1
Docker のバージョンは1.9.1
として認識されている。ちなみに、--output text
は見にくいかも。
- マネジメントコントロールから ECS クラスタを確認する
Docker のバージョンも認識されている。
以上
疑問は…
解けました。
余談
ECS-Optimized Amazon Linux で用意したクラスタで Docker バージョンなどを確認すると以下のように Docker バージョンは少し古い。そして、ECS Container agent のバージョンもちょっと古い。(古いというか Docker バージョンに合わせたバージョンとなるようだ)
やり残し
- Docker と ECS container agent をインストールするまでを自動化(出来るはず)