y_ogagaga hiki  Index  Search  Changes  Login

Ansible

Ansible とは

Ansible というサーバーの設定を管理又は構築を自動化するツールで、構成管理 (CM: Configuration Management) にカテゴライズされる。

(Puppet や Chef の親戚みたいなもの。)

このまとめは下記の方々のを引用しています。素晴らしいまとめに感謝です。

@see http://www.slideshare.net/takushimizu/ansible-26200860

@see http://apatheia.info/blog/2013/04/06/about-ansible/

よくあるサーバー構成管理

よくあるサーバ構築方法

  • サーバ構築手順書がある
  • Wikiやテキストファイルにまとめられている
  • 手順書がない場合は、現在のサーバーから推測して構築する

よくあるトラブル

  • 記述通りに構築しても動かない
  • 他の人と入っているパッケージが違う
  • サーバ毎に設定が違う
  • 手順違い

環境を管理するいくつかの方法

  • 手順書を用意する
  • シェルスクリプトにする
  • sed/awkを利用して設定ファイルを書き換える
  • AMI、VM snapshotを作る
  • 構成管理ツールを使う

変更に耐えられるか

  • ミドルウェアの追加
  • 設定変更、チューニング
  • ライブラリのバージョンアップ
  • 構築済みサーバの更新
    • アップデートスクリプトが増えると辛い

構成管理ツールを使うと嬉しいこと

構成管理ツールは環境管理に特化

冪等性を持っている

  • いつも指定したパッケージがある
  • いつも指定した設定になる
  • いつも指定したディレクトリ構成になる

サーバのあるべき姿を定義する

著名な構成管理ツール

Puppet

  • Ruby製
  • 歴史があり長く使われている
  • 各サーバにインストールして利用する
    • クライアント-サーバ型 or 単体実行
  • 独自の外部DSLで環境の定義を行う

Chef

  • Ruby製
    • 最近ブームになりデファクトスタンダードになりつつある
    • クライアント-サーバ型 or 単体実行
  • 独自の内部DSLで環境の定義を行う(Rubyで記述するので自由な書き方ができるため、誰が見てもわかるようにならない場合がある)

Ansible

  • Python製
    • 最近注目となってきている
  • サーバへのインストールは不要
    • SSHで接続して操作を行う
  • YAMLで定義する
    • 必要に応じて他の言語で補助コマンドを作成することも可能(基本的にはYAMLだけで十分)
  • ツール自体がシンプル

Ansibleを使うと嬉しいこと

Ansibleに限った話ではありませんが、記述しています。

サーバーの環境構築を自動化できる

  • 手作業によるミスの現象
  • 新規環境をすぐに用意できる
  • 実験的な環境構築と破壊が楽にできる

同じ環境を「複数台」、「並列」に適用できる

  • 開発、ステージング、本番環境を全く同じように用意することが可能になる

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

CentOS6.4 + Ruby 環境の playbook

Vagrantでrubyをインストールするplaybookになります

Github

https://github.com/ogagaga/ansible-playbook-centos6_4-ruby

Last modified:2013/11/08 17:57:10
Keyword(s):
References:[サーバー構成管理]