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