ansibleをmacに入れてさくらVPSの環境構築してみる、その1
Infrastructure as Code!!
ということで、言いたい事言ってこの流れに乗ってみました。
chef流行ってますけど、なんかちょいと壁が高そうと感じてたところに、ansibleとやらを知ったので、導入してみました。
さくらVPSの乗せ変え作業が目的だったので、それを最終目標に、今回はとりあえず導入編で。
環境
メインマシン : 手元のMac(OS X 10.7.5)
対象サーバ : さくらVPS (CentOS6)
ansible インストール
Macにansibleをインストールします。
(ここを参考にしました。Installing Ansible on OS X)
pythonの動作環境構築
ansible はpythonで動くので、まずはpythonが動く環境を用意します。
$ python –version
Python 2.7.1
versionの確認。python2.6以下の場合2.7にupdateしましょう。
$ eazy_install virtualenv
(※以降、権限の問題でエラーが出る場合は、適宜sudoしました。)
virtualenvというpythonの複数versionを動作させるツールを入れます。(おそらく他のpythonシステムと併用を考えての導入かと。ansibleのためだけなら不要かも?)
$ virtualenv ansible-env
ansibleを動作させる環境を「ansible-env」という名前で作ってるようです。
$ source ansible-env/bin/activate
これでその環境になります。(ansible-env) と出てきます。
(ansible-env)/Users/username%
こんな感じ。(これ以降すべてこの環境で実施しています)
で、その他必要なモジュールをインストール
$ easy_install pip
$ pip install paramiko PyYAML jinja2
ようやくansible インストール
$ git clone git://github.com/ansible/ansible.git
$ cd ansible
$ source ./hacking/env-setup
ansibleを使う
動くかどうか試します。
(ここを参考にしました。構成管理ツール Ansible について)
$ echo “127.0.0.1” > ~/ansible_hosts
$ export ANSIBLE_HOSTS=~/ansible_hosts
$ ansible all -m ping –ask-pass
SSH password:
127.0.0.1 | success » {
“changed”: false,
“ping”: “pong”
}
ANSIBLE_HOSTSを設定して、そのホストへpingを打っているようです。
上記のように出力されれば動作OK。ダメな場合、赤字でエラー内容が表示されます。
また、ANSIBLE_HOSTSのような環境変数じゃなくても
/etc/ansible/hosts
にinitファイル形式で書いてもOK
[servers]
foo.example.com
bar.example.com
[webservers]
49.212.xxx.xxx
[]で名前をつけてグループ化できます。
playbook作成
playbookとは、ansibleの構成要素の一つで、動作を決めるものです。
yaml形式でこんな風に書きます。
webapp.yml
- hosts: webserver
user: root
sudo: yes
tasks:
- name: install apache
action: yum pkg=httpd state=installed
- name: install php
action: yum pkg=php state=installed
簡単に内容を説明すると、webserverというホスト(先ほどのグループ化した名前)にuserはrootでsshログインして、tasksに書かれているaction:やcommand:を実行します。name:は単に名前を付けているだけです。
ansible実行
playbookを作ったら実行、、、の前に!
対象サーバにパスワード無しでsshできるようしておきましょう。
それができたら実行!
ansible-playbook webapp.yml
これだけ!
これだけで、apacheとphpが動く環境が出来ました。あとはこのymlをどんどん変えて行けばお好みの環境ができそうですね!
まとめ
とりあえず、動作させてみたってとこで一旦終了。
phpのversion指定やdbその他モジュール追加など等にチャレンジして、また書いて行こうと思います。
もうちょっと詳しい機能や、説明はこちらを参考にしてみてください