Ansible
Ansible とは
Ansible というサーバーの設定を管理又は構築を自動化するツールで、構成管理 (CM: Configuration Management) にカテゴライズされる。
(Puppet や Chef の親戚みたいなもの。)
このまとめは下記の方々のを引用しています。素晴らしいまとめに感謝です。
よくあるサーバー構成管理
よくあるサーバ構築方法
- サーバ構築手順書がある
- Wikiやテキストファイルにまとめられている
- 手順書がない場合は、現在のサーバーから推測して構築する
よくあるトラブル
- 記述通りに構築しても動かない
- 他の人と入っているパッケージが違う
- サーバ毎に設定が違う
- 手順違い
環境を管理するいくつかの方法
- 手順書を用意する
- シェルスクリプトにする
- sed/awkを利用して設定ファイルを書き換える
- AMI、VM snapshotを作る
- 構成管理ツールを使う
変更に耐えられるか
- ミドルウェアの追加
- 設定変更、チューニング
- ライブラリのバージョンアップ
- 構築済みサーバの更新
- アップデートスクリプトが増えると辛い
著名な構成管理ツール
Puppet
- Ruby製
- 歴史があり長く使われている
- 各サーバにインストールして利用する
- クライアント-サーバ型 or 単体実行
- 独自の外部DSLで環境の定義を行う
Chef
- Ruby製
- 最近ブームになりデファクトスタンダードになりつつある
- クライアント-サーバ型 or 単体実行
- 独自の内部DSLで環境の定義を行う(Rubyで記述するので自由な書き方ができるため、誰が見てもわかるようにならない場合がある)
Ansible
- Python製
- 最近注目となってきている
- サーバへのインストールは不要
- SSHで接続して操作を行う
- YAMLで定義する
- 必要に応じて他の言語で補助コマンドを作成することも可能(基本的にはYAMLだけで十分)
- ツール自体がシンプル
Ansibleの特徴
冪等性
- 何度実行しても同じ結果を得られる
標準モジュールが豊富
http://www.ansibleworks.com/docs/modules.html
にあるとおり環境構築に困ることがないほど用意されている
Push型のアーキテクチャ
- リモートホストに特別なプログラムをインストールする必要がない
- Python2.4以上がインストールされているだけでOK
- シンプル
- 設定ファイルはYAML(誰もが知っているし、読み書きしやすい)
シェルスクリプトではよくないこと
自動化であればシェルスクリプトでも十分という考え方もある。 しかし、「あのライブラリが必要になった」、「あのconfigファイルの設定を変更しなければいけない」 などが発生した場合に、スクリプトに追記して再度実行してみると「既にインストール済みです」、「 アップデートできません」という状況が発生してしまい自動化が破綻してしまうので、サーバーの状態 管理には向いていません。一度しか使わないような使い捨ての場合にはシェルスクリプトは有効かと 思います。
基本的な使い方
@see http://www.slideshare.net/takushimizu/ansible-26200860
の「Ansibleの基本的な使い方」がわかりやすいのでこちらを読んでみてください。
練習してみたい場合は、
https://github.com/takuan-osho/pyconapac2013-ansible-session
に用意されているので自分で実行してみるといいと思います。
他にも読んでみるとよいWeb
Ansible Tutorial
WordPressの環境構築をするチュートリアルになっています。ansibleやplaybookのコマンドや記述方法の理解はここでやるとよいと思います。
http://yteraoka.github.io/ansible-tutorial/
Ansible in detail
http://yteraoka.github.io/ansible-tutorial/ansible-in-detail.html
Vagrant利用時のハマりどころなど
Vagrant1.3系のhost
Vagrant1.3系で、Ansibleを利用してprovisionしたときには vagrant_ansible_inventory_default が自動で作成されるので、自前でhostファイルは自分で作らなくてもよい。
playbook記述中の動作確認
vagrant provision だと全てのplaybookが実行されてしまうので、playbookを書いてる時はタグを指定したansible コマンドを実行する方が便利
ansible-playbook -i vagrant_ansible_inventory_default provisioning/site.yml -u vagrant --private-key=~/.vagrant.d/insecure_private_key --check
のような感じ
よく利用する他のコマンド
- syntax check
ansible-playbook -i vagrant_ansible_inventory_default provisioning/site.yml -u vagrant --private-key=~/.vagrant.d/insecure_private_key --syntax-check
- dry-run
ansible-playbook -i vagrant_ansible_inventory_default provisioning/site.yml -u vagrant --private-key=~/.vagrant.d/insecure_private_key --check
- tagを指定して特定のplaybookのみ実行する
ansible-playbook -i vagrant_ansible_inventory_default provisioning/site.yml -u vagrant --private-key=~/.vagrant.d/insecure_private_key --tags common
- 疎通確認
ansible all -i vagrant_ansible_inventory_default -u vagrant --private-key ~/.vagrant.d/insecure_private_key -m ping
Keyword(s):
References:[サーバー構成管理]