今回はAnsible Playbookを書いてwebサーバにnginxを導入するところまでやっていきます。
ちなみに前回の記事は以下をご覧ください。
Playbookを書いてwebとdbにuserを追加する
まずは簡単なplaybookの文法を紹介します。
↓のようなplaybookを作成しました。
--- # "---"をつけることでplaybookのファイルであることを意味します。
- hosts: all # 実行するhostを宣言します。今回はwebとdbどちらにも以下のtasksを実行します。
sudo: yes # sudo コマンドで実行しますか? yes or no
tasks: # 実行するtasksを宣言します。
- name: add a new user # taskの名前です。任意ですが、分かりやすいようにしておくといいでしょう。
user: name=awaji # userというモジュールを使ってuserを追加していきます。
playbookは.yml
形式で保存する必要があります。
今回はwebとdbに"awaji"というuserを追加するtaskを書いています。
userというモジュールを使用していますが、実行したい内容に応じてAnsible公式ページ
から選んで使用しましょう。
それでは実行して確認してみましょう。
[vagrant@host ~]$ ansible-playbook playbool.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default).
This feature will be removed in a future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [all] ***********************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]
TASK [add a new user] ************************************************************************************************
changed: [192.168.43.52]
changed: [192.168.43.53]
PLAY RECAP ***********************************************************************************************************
192.168.43.52 : ok=2 changed=1 unreachable=0 failed=0
192.168.43.53 : ok=2 changed=1 unreachable=0 failed=0
上手くできていますね。
192.168.43.52と192.168.43.53のそれぞれに対してchanged=1
となっていればOKです。
ちなみになんですが
もう一度実行してみるとどうなるでしょうか?
[vagrant@host ~]$ ansible-playbook playbool.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default).
This feature will be removed in a future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [all] ***********************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]
TASK [add a new user] ************************************************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]
PLAY RECAP ***********************************************************************************************************
192.168.43.52 : ok=2 changed=0 unreachable=0 failed=0
192.168.43.53 : ok=2 changed=0 unreachable=0 failed=0
192.168.43.52と192.168.43.53のそれぞれに対してchanged=0
となっていますね。
このタスクは毎回実行するたびに awaji ユーザがどんどん追加されていくのではなくて、もし awaji ユーザがあった場合には何もしないというものになります。
これは「冪等性(べきとうせい)」というのですが、Playbookは「サーバのあるべき状態を記述したもの」であって、常にその状態にすることができるのだと認識しておいてください。
さて、ここまででplaybookは使えるようになりました。
実際にplaybookにいろいろと書いてnginxを入れていきましょう。
nginxを導入する
結論から先に
nginxをインストールして起動状態にするplaybookです。
---
- hosts: db
sudo: True
vars_prompt:
- name: yum_update
prompt: "Do you accept updates ?"
private: no
default: Y
tasks:
- name: Yum update packages
yum: name=* state=latest
when: yum_update == "Y"
- name: install epel repository
yum: name=http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm state=present
- name: install nginx
yum: name=nginx state=present
- name: nginx start
service: name=nginx state=started enabled=yes
Ansible doc (yum)にそのまま書いてあったりするので一度見てみるといいでしょう。
さて、解説していきます。
vars_prompt:
- name: yum_update
prompt: "Do you accept updates ?"
private: no
default: Y
vars_prompt
はコマンド入力を受け付けることができます。
今回nginxを入れるのに必須ではないですが、参考までに付けてみました。
yum updateする必要はありますか?に対して [ Y / N ] を聞いているだけですね。
コマンドから入力した値は yum_update という変数に格納されます。
この変数を使って分岐などができますね。
- name: install epel repository
yum: name=http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm state=present
- name: install nginx
yum: name=nginx state=present
- name: nginx start
service: name=nginx state=started enabled=yes
nginxをインストールするにはepelリポジトリが必要なので入れてやります。
その後は普通にyumモジュールでnginxをインストールすればOKです。
簡単ですね。
最後に確認だけしておきましょう。
ブラウザを開いてwebのIPにアクセスしてみましょう。
今回はwebサーバは192.168.43.52でしたね。
この画面まで表示できれはOKです。
いい感じですね。
あとはrailsにunicornを入れて…
dbにmysqlを入れて…
などなどやっていけば一通りの環境構築はできますね。
次はアプリケーション(Ruby on Rails)をgitからクローンしてくるところまで書いてみようと思います。