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 2.7.1
versionの確認。python2.6以下の場合2.7にupdateしましょう。
(※以降、権限の問題でエラーが出る場合は、適宜sudoしました。)
virtualenvというpythonの複数versionを動作させるツールを入れます。(おそらく他のpythonシステムと併用を考えての導入かと。ansibleのためだけなら不要かも?)
ansibleを動作させる環境を「ansible-env」という名前で作ってるようです。
これでその環境になります。(ansible-env) と出てきます。
こんな感じ。(これ以降すべてこの環境で実施しています)
で、その他必要なモジュールをインストール
$ pip install paramiko PyYAML jinja2
ようやくansible インストール
$ cd ansible
$ source ./hacking/env-setup
ansibleを使う
動くかどうか試します。
(ここを参考にしました。構成管理ツール Ansible について)
$ 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のような環境変数じゃなくても
にinitファイル形式で書いてもOK
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できるようしておきましょう。
公開鍵設定
それができたら実行!
これだけ!
これだけで、apacheとphpが動く環境が出来ました。あとはこのymlをどんどん変えて行けばお好みの環境ができそうですね!
まとめ
とりあえず、動作させてみたってとこで一旦終了。
phpのversion指定やdbその他モジュール追加など等にチャレンジして、また書いて行こうと思います。
もうちょっと詳しい機能や、説明はこちらを参考にしてみてください
ansibleを使ってみる