Dockerでansibleを実行してEC2インスタンスをプロビジョニング
ansibleでDockerコンテナをプロビジョニングする例は割りとあるのですが、ansibleをDockerで実行してリモートホストをプロビジョニングするって方法があまり見当たらなかったのでメモ。
ついでに、EC2インスタンスをプロビジョニングにするためには、pemファイルどうしよっかなみたいなとこも触れています。
Dockerfile
ansible / ubuntu14.04-ansible を利用しています。
関連ファイル類
ansible用のリソース
とりあえず、とってもシンプルに以下のファイルを準備。
ansible/ ├── hosts # インベントリファイル └── site.yml # メインのプレイブック
- ansible/hosts
[test-hosts] {EC2インスタンスのパブリックDNSを指定}
- ansible/site.yml
- hosts: test-hosts remote_user: ubuntu sudo: yes tasks: - name: update apt cache apt: update_cache=yes
EC2インスタンス接続用のpemファイル
ansible関連の資材はgithubとかbitbucketとかにのせたいので、公開鍵ファイルはansible関連の資材とは別のディレクトリに置いておく。
{path to pem file dir}/mid0111-tokyo-test.pem
実行コマンド
docker コマンド実行時に、ansible関連の資材のディレクトリと公開鍵を格納したディレクトリをそれぞれマウントしてあげればOK。
疎通確認
docker run -it --rm --name ansible \ -v `pwd`/ansible:/tmp/ansible \ -v {path to pem file dir}:/root/pem \ ansible/ubuntu14.04-ansible:stable \ ansible --private-key="/root/pem/mid0111-tokyo-test.pem" -i /tmp/ansible/hosts all -m ping -u ubuntu
プレイブック実行
docker run -it --rm --name ansible \ -v `pwd`/ansible:/tmp/ansible \ -v {path to pem file dir}:/root/pem \ ansible/ubuntu14.04-ansible:stable \ ansible-playbook /tmp/ansible/site.yml --private-key="/root/pem/mid0111-tokyo-test.pem" -i /tmp/ansible/hosts