Snappy Ubuntu CoreをAmazon EC2 Container Serviceで使う
はじめに
前回、Snappy Ubuntu CoreをEC2で使ってみました。今回はSnappy Ubuntu CoreをAmazon EC2 Container Serviceのコンテナインスタンスとして使ってみたいと思います!
やってみる
Amazon EC2 Container Serviceの基本的な使い方はAmazon EC2 Container Service (ECS)を試してみたをご覧下さい。またSnappy Ubuntu Core on EC2の立ち上げ方はEC2でSnappy Ubuntu Coreを使ってみたをご覧下さい。ここではEC2は起動しているものとします。
まずはDockerをインストールします。
$ sudo snappy install docker
なお、EC2をLaunchするときのUserDataを以下のようにしておくことで、最初からDocker入りでLaunchすることが出来ます。
#cloud-config snappy: ssh_enabled: True packages: - docker
さて、Snappyでamazon-ecs-agentを動かすのは、普通にdocker runするだけでも良いのですが、今回はSnappyのappとして作りたいと思います。まずは作業ディレクトリを作成します。
$ mkdir amazon-ecs-agent; cd amazon-ecs-agent $ mkdir bin $ mkdir meta
appの実行ファイルをこんな感じで作ります。dockerコマンドを叩いているだけです。
$ vi bin/amazon-ecs-agent #!/bin/sh docker run --name ecs-agent --env=ECS_CLUSTER=MyCluster --env=ECS_LOGLEVEL=warn --publish=127.0.0.1:51678:51678 --volume=/var/run/docker.sock:/var/run/docker.sock amazon/amazon-ecs-agent &
Metadataファイルは適当に作ります。
$ vi meta/package.yaml name: amazon-ecs-agent version: 0.0.1 vendor: smokeymonkey <smokeymonkey@gmail.com> icon: binaries: - name: bin/amazon-ecs-agent $ vi meta/readme.md Amazon Ecs Agent Sample.
そしてsnappyコマンドでbuildします。
snappy build .
buildすると、以下のようにsnapというパッケージファイルが作成されます。
$ ls -alF -rw-rw-r-- 1 ubuntu ubuntu 1378 Dec 25 09:51 amazon-ecs-agent_0.0.1_all.snap
そのパッケージファイルをsnappyコマンドでインストールします。
$ sudo snappy install amazon-ecs-agent_0.0.1_all.snap
snappy infoで確認すると、ちゃんとappsとしてインストールされています!
$ snappy info release: ubuntu-core/devel frameworks: docker apps: amazon-ecs-agent
再起動します。起動後にログインして確認すると、ちゃんとamazon-ecs-agentが動いていることがわかります。
$ reboot -- 再起動待ち -- $ ps aux | grep docker root 591 0.0 0.3 19696 3184 ? Ss 09:54 0:00 /bin/bash /apps/docker/1.3.2.007/bin/docker.wrap root 595 1.1 2.0 481988 21040 ? Sl 09:54 0:00 /apps/docker/1.3.2.007/bin/docker -G docker -d -g /var/lib//apps/docker/1.3.2.007 -H unix:///var/run/docker.sock root 759 0.0 0.0 4448 684 ? S 09:54 0:00 /bin/sh /home/ubuntu/snappy-bin/docker run --name ecs-agent --env=ECS_CLUSTER=MyCluster --env=ECS_LOGLEVEL=warn --publish=127.0.0.1:51678:51678 --volume=/var/run/docker.sock:/var/run/docker.sock amazon/amazon-ecs-agent root 762 0.0 1.2 215080 12616 ? Sl 09:54 0:00 /apps/docker/1.3.2.007/bin/docker run --name ecs-agent --env=ECS_CLUSTER=MyCluster --env=ECS_LOGLEVEL=warn --publish=127.0.0.1:51678:51678 --volume=/var/run/docker.sock:/var/run/docker.sock amazon/amazon-ecs-agent root 934 0.0 1.3 215080 13564 ? Sl 09:54 0:00 docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 51678 -container-ip 172.17.0.2 -container-port 51678
ECS側で確認。以下のように、クラスタMyClusterにコンテナインスタンスとして登録されました!もちろんタスクも動きます!
$ aws ecs list-container-instances --cluster MyCluster{ "containerInstanceArns": [ "arn:aws:ecs:us-east-1:406910207970:container-instance/4a216f6f-174a-4d78-91b4-20338c379305" ] }
さいごに
Snappy Ubuntu Coreでappを作る方法がわかりました。Docker Hubみたいなサービスもあるのかな?この辺は少し突っ込んで調べてみたいと思います。