この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
コンニチーハ、千葉です。
今日はDockerコンテナとEC2が混在している環境をインベントリで管理してみます。
といってもそんなに難しくありません。
まずは、ansible.cnfでssh_configを設定するを参考にEC2環境ホストのセットアップをします。
EC2向けの設定
ssh_config
Host ec2-1
User ec2-user
HostName xxx.xxx.xxx.xxx
IdentityFile xxx.pem
Host ec2-2
User ec2-user
HostName xxx.xxx.xxx.xxx
IdentityFile xxx.pem
Host ec2-3
User ec2-user
HostName xxx.xxx.xxx.xxx
IdentityFile xxx.pem
ansible.cfg
[ssh_connection]
ssh_args = -F ssh_config
hosts
[ec2]
ec2-[1:3]
疎通確認してみます。
local$ ansible all -i hosts -m ping
ec2-2 | success >> {
"changed": false,
"ping": "pong"
}
ec2-3 | success >> {
"changed": false,
"ping": "pong"
}
ec2-1 | success >> {
"changed": false,
"ping": "pong"
}
できました!
Docker向けの設定
次にDockerコンテナです。今回は、Mac上にDocker ToolBox上でコンテナを起動します。
local$ docker run -itd --hostname docker-1 --name docker-1 centos:centos6 /bin/bash
local$ docker run -itd --hostname docker-2 --name docker-2 centos:centos6 /bin/bash
local$ docker run -itd --hostname docker-3 --name docker-3 centos:centos6 /bin/bash
local$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cebf1ce2f02 centos:centos6 "/bin/bash" 2 seconds ago Up 2 seconds docker-3
4ad51cdd93ef centos:centos6 "/bin/bash" 3 seconds ago Up 2 seconds docker-2
6331eadbce40 centos:centos6 "/bin/bash" 48 seconds ago Up 47 seconds docker-1
インベントリにDockerコンテナを追加します。
[ec2]
ec2-[1:3]
docker-[1:3] ansible_connection=docker
ポイントは、接続の種類にdocker pluginでの接続を指定します。
こちらのように、playbook側にconnection: docker
を指定することでも可能ですが、インベントリに接続の種類を指定した方がplaybook側で意識しなくて良く、またansible
コマンドでのモジュールの実行も可能となります。
接続確認してみます。
ansible all -i hosts -m ping
docker-1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ec2-1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ec2-3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ec2-2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
docker-3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
docker-2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
できました。
まとめ
Ansibleを利用することにより、EC2とDockerコンテナの構成管理を行うことができます。
また、開発環境はDockerコンテナ、本番環境はEC2のような構成でもインベントリでコネクションの種類を指定するだけで同じplaybookが実行できます。
Ansible素敵です。