AnsibleでWordpressの環境を構築してみたンゴ その2
playbookを作っていると、だらだらと冗長的な作りになってしまって、記述量が多くなると、どこに何を書いてるのかわかりづらくなってきました。
そこで何か良い方法がないものかと調べてみました。
調べてみたところ一定の記述を別ファイルにしてそれをincludeする仕組みがあるみたいでした。
foo.yml
- name: placeholder foo command: /bin/foo - name: placeholder bar command: /bin/bar
playbook.yml
tasks: - include: tasks/foo.yml
こんな感じで書いていけば良いらしいです。
でも、他にもRoleという便利な機能があるようです。
どうもコンポーネント化するための機能みたいです。NginxやPHPごとにRoleをつくって上げると再利用性が高まるんじゃないかしら。
Roleを使うには一定のルールに従ってファイルやフォルダを作る必要があるみたいです。
roles以下のディレクトリ構造が重要。
必要なもののみを作ると良いみたいです。
site.yml webservers.yml fooservers.yml roles/ common/ files/ templates/ tasks/ handlers/ vars/ defaults/ meta/ webservers/ files/ templates/ tasks/ handlers/ vars/ defaults/ meta/
詳しくは
Playbook Roles and Include Statements — Ansible Documentation
ということで、各アプリのroleを作って、site.ymlから各アプリのroleの呼び出しを記述しました。
以下、ファイル構造を一部抜粋
|--roles | |--common | | |--tasks | | | |--main.yml | |--mysql | | |--handlers | | | |--main.yml | | |--tasks | | | |--main.yml | |--nginx | | |--handlers | | | |--main.yml | | |--tasks | | | |--main.yml | | |--templates | | | |--default.conf
site.ymlから一部抜粋。
roles: - common - mysql - nginx
ほんであとはコマンドを実行。
ansible-playbook site.yml
ファイルの記述内容に従って、vagrant上にあるCentOS7に対してアプリのインストールと設定ファイルの書き換えをしてくれます。
コマンドを実行するだけでアプリのインストールから設定ファイルの記述までやってくれるので、同じような環境を作るときには凄く便利でした。
実際は試行錯誤しながらやっているので詰まったところも幾つかありますが、なれてしまえばとても有益なツールでした。
ちなみに詰まったところとしては
- SELinuxが有効になっていて疎通確認取れなかった
- Firewallが有効になっていて疎通確認取れなかった
というのがあって、せっかくだからplaybook上でこの機能の設定を行いたいと思い調べてみたたところ、以下の記述で対応できました。
- name: selinux disagled selinux: state=disabled #ファイヤーウォールを無効に - name: stop firewall service: name=firewalld state=stopped #再起動後にファイヤーウォールが起動しないように - name: disabled firewall command: systemctl disable firewalld
今回は疎通確認を取るために機能を無効にしてますが、実際はセキュリティポリシーにしたがって調整してく必要があると思います。
ちなみに、こちらのはAnsibleでNginxやらをインストールするplaybookを参考にさせていただきました。github.com