Snappy Ubuntu CoreをAmazon EC2 Container Serviceで使う

ubuntu-400x400

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

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

AWS Cloud Roadshow 2017 福岡