Amazon LinuxをDockerで起動してansibleを適用する


Ansibleの検証するのにいちいちEC2でAmazonLinuxを起動しないといけないのは面倒なので、dockerで試してみた。

Dockerの準備

Docker for Macのインストール

Get started with Docker for Mac

Amazon ECR registryにログイン

$ $(aws ecr get-login | sed 's/\-e none //g')
Login Succeeded

イメージを取得

$ docker pull amazonlinux:latest
latest: Pulling from library/amazonlinux
c9141092a50d: Pull complete
Digest: sha256:2010c88ac1e7c118d61793eec71dcfe0e276d72b38dd86bd3e49da1f8c48bf54
Status: Downloaded newer image for amazonlinux:latest

ansible-playbook適用対象として起動しておく

$ docker run -itd --name example amazonlinux:latest

ansible側の準備をする

$ ansible --version
ansible 2.2.1.0
  config file = /Users/example/.ansible.cfg
  configured module search path = Default w/o overrides

docker-pyをインストール

$ pip install docker-py

inventory/docker.pyをプロジェクト内に取得

$ curl https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/docker.py -o inventory/docker.py
$ chmod 755 inventory/docker.py

playbookを作成

example.yml
---
- hosts: example # 先ほどdocker runで指定したnameの値を指定
  connection: docker
  user: root
  tasks:
  - name: ping
    ping:

実行

$ ansible-playbook example.yml -i inventory/docker.py

PLAY [example] *****************************************************************

TASK [setup] *******************************************************************
ok: [example]

TASK [ping] ********************************************************************
ok: [example]

PLAY RECAP *********************************************************************
example                    : ok=2    changed=0    unreachable=0    failed=0

注意点

Amazon Linux AMIとAmazon Linux Container Imageは標準で入っているモジュールが違うので、注意が必要。