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みたいなサービスもあるのかな?この辺は少し突っ込んで調べてみたいと思います。