インフラ学習ツールとしてのAnsible


ChefやPuppetと並ぶ構成管理ツールの１つAnsible。ただ、構成管理ツールというだけではなくインフラサイドの学習ツールとしても結構いいんじゃないかと思ったので書いてみます。と、書いている自分も初心者なのでツッコミいろいろあると思いますが大歓迎です。

## 特徴と書き方

まず簡単に[Ansible](http://www.ansible.com/home)の特徴を書いてみます。

- 対象の環境にSSH接続さえできれば環境構築を行えるのでシンプル
- 書いた順に処理が実行されるのでシンプル
- YAMLで書けるのでシンプル
- シンプルなので初期の学習コストが低い！
- Chefに挫折した人でもいける（はず）

![ansible-base.001.jpg](https://qiita-image-store.s3.amazonaws.com/0/24041/9ca80475-ef9b-7b4d-670f-45a21f57a264.jpeg "ansible-base.001.jpg")

Ansible自体はPythonで書かれているのですが、Pythonを意識することはほぼないと思います。ただ、対象の環境にはPythonがインストールされている必要はあります。

一つの例として、公式サンプルの中からnginx+wordpress環境を構築するものを取り上げます。このような形になるんだなというイメージが出来ると思います。

- [ansible-examples/wordpress-nginx](https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx)

インストール方法や導入部分の解説としてはこちらの記事が読みやすかったです。

- [Ansibleのドキュメントを読んでみたメモ - Qiita](http://qiita.com/okochang/items/f264825e538dbce5dfac)

## なぜ良いと思ったか

- Playbook（構成を記述したベースとなるYAML）さえ残っていれば構築した環境は破棄しても良いので経済的。
- 一部だけ学びたい時もベースのPlaybookがあればその一部を変更することでスムーズに学べる。
- Ansibleの記法はシンプルなので自分の作った構成の全体像がつかみやすい。
- gitで管理しておけば、変更の履歴も追いやすい。
- ドキュメントが充実しているので、試行錯誤中にドキュメントを読んでそこから学ぶことも多い。
- 公開されているPlaybookに参考に出来る情報が多い。本から学ぶのとはまた違った小さい粒度で学べる。

## Tips

- VagrantよりもDigital OceanなどのVPSがよさそう
	- テスト用にVagrantを使うのも良いけれど、都度、立ち上げるのにも時間が掛かるしPlaybookがある程度大きくなるとホストOSのパワーにもよるけれど、時間がかかることがある。時間単位で利用できるVPSを利用するのが良いと思います。
	- [AWS](http://aws.amazon.com/jp/)も良いけれど、気軽に使えて料金も安くわかりやすい[DigitalOcean](https://www.digitalocean.com/)が良いかも。
- git管理で育てていく
	- 学習用として使うならば、`/ansible/nginx-rails`のようなディレクトリを組んで、ansibleのディレクトリ以下をgit管理するのが良いかもしれません。たまに間違えて復活できなくなった時には、過去に戻ることができます。

## 学習ツールとしての使い方例

1. まず自分で簡単なPlaybookを書いてみる
1. 書き方に迷ったら、[公式ドキュメント](http://docs.ansible.com/index.html)を見たり、 *[知りたいこと] + ansible* で検索すると、playbookがたくさん出てくるのでそれを参考にする。
1. Ansibleの構成に迷ったら、[ベストプラクティス](http://docs.ansible.com/playbooks_best_practices.html)を見たり、[Ansible Galaxy](https://galaxy.ansible.com/)で、検索して探す。
1. 新規サーバーを立ち上げて試してみる。
1. 動きを見て修正する

基本的にこの繰り返しをします。

## その他、全般的に参考になるページ

- [Ansible入門 (全15回) - プログラミングならドットインストール](http://dotinstall.com/lessons/basic_ansible)
	- これをやれば絶対始められる。
- [ansible/ansible-examples](https://github.com/ansible/ansible-examples)
	- シンプルな記述で参考になる公式サンプル。
- [Ansible Documentation — Ansible Documentation](http://docs.ansible.com/index.html)
	- 充実していて読みやすいドキュメント（英語）。
- [Best Practices — Ansible Documentation](http://docs.ansible.com/playbooks_best_practices.html)
	- ディレクトリ構成に迷った時に目を通す。ただし、これとそっくりの構成にする必要はないと思う。参考に（英語）。
- [Ansible Galaxy | Find, reuse, and share the best Ansible content](https://galaxy.ansible.com/)
	- 目的ごとにまとまったroleの公開場所。nginxとか、そういう単位で探してゆく（英語）。

## 日本語の書籍

非常にわかりやすく書かれていて読みやすいです。コマンドの羅列ですが、最初から全て読もうとするのではなく、半分くらいまで読んだら作り始めて、後でまた参考書として参照するのが良いと思います。参照する際は、テーマごとに別れていてムダのない記述なので助かります。

<a href="http://www.amazon.co.jp/gp/product/B00MALTGDY/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00MALTGDY&linkCode=as2&tag=morizotter0f-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00MALTGDY&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=morizotter0f-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=morizotter0f-22&l=as2&o=9&a=B00MALTGDY" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

<a href="http://www.amazon.co.jp/gp/product/B00MALTGDY/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00MALTGDY&linkCode=as2&tag=morizotter0f-22">入門Ansible</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=morizotter0f-22&l=as2&o=9&a=B00MALTGDY" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />