読者です 読者をやめる 読者になる 読者になる

痛風とシステム障害を恐れるエンジニアのブログ

趣味のことだったり仕事に関することだったりを徒然なるままに。webとかオープン系の会社で働いてます。お仕事の依頼お待ちしておりまーす。

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