やっとAnsibleを仕事で使い始めました。
といっても、開発環境として、ですが。
今まで、WordPress案件の依頼を受けるたびに、開発環境を手作業で構築していました。
ローカルPC上にLAMP環境とか、安いレンタルサーバにファイルアップ&MySQLデータベース構築などなど、、、
公開前のWebサイトをお客さんに確認してもらうために、Basic認証設定を追加したり、
毎回必要な作業、煩わしいですね。
そのような作業を楽にするため、
Ansibleを使って、GCE(GoogleComputeEngine)のクラウドサーバ上に構築するように実装しました。
GCEでプロジェクトを作成しておけば、いくつでもWordPress環境を追加できます。
お仕事が捗りますねw
そんなPlaybookをgithubにアップしておきました。
ansible-gce
- 動作確認環境
- OS X 10.10.5
- Python 2.7.10
- Ansible 1.9.4
- Apache libcloud 0.20.0
初期設定については、
AnsibleでGCEインスタンスを管理する - Qiita
を参考にしてください。
以下のコマンドでインスタンスが生成され、いつでもWordPressの環境が手に入ります。
$ gce_ansible.sh gce_wordpress.yml
あとは、ブラウザを起動して、生成したインスタンスのIPアドレスにアクセスすれば、いつものWordPress開始画面が表示されます。
- Basic認証かかってます(初期設定は、ID:demo, PW:demopass)
- ID/PWの変更は、
roles/wordpress/meta/main.yml
を編集してください(後述)
ローカルPCで開発したソースコードをsftpでアップするもよし。
Gitをインストールしているので、git push
するもよし。<- オススメ
2つ目の環境が欲しいなら、/vars/target_wp.yml
で新しいインスタンス名を指定しましょう。
names: www-wp <- インスタンス名
このPlaybookで実行していること
- 生成したインスタンスのTimeZone & Locale設定
- Gitインストール
- Apacheインストール
- Basic認証設定
- MySQLインストール
- Create Database
- PHPインストール
- WordPress(ja)最新版ダウンロード
- wp-config.php設定
今回のポイント
-
role
を使う -
dependencies
でWordPressに必要なroleを実行する - role実行時に変数を渡して、roleの動作を制御する
1. role
を使う
roleは、Playbookのタスクを別ファイルに切り出して、再利用性を高める仕組みです。
roles
ディレクトリを作成して、
roles/wordpress/tasks/main.yml
というファイルパスでタスクを記述していくと、
メインのPlaybook(今回でいうところのgce_wordpress.yml
)からは
roles:
- wordpress
というセクションを記述することで呼び出すことができます。
2. dependencies
でWordPressに必要なroleを実行する
WordPressを使うには、ApacheやMySQL、PHPのインストールが必要になりますが、
Playbookで各々を指示する必要はありません。
roles/wordpress/meta/main.yml
というファイルを作成して、dependencies
セクションを記述することで
Ansibleが、WordPressのタスクを実行する前に、dependencies
セクションの各roleを実行してくれます。
dependencies:
- { role: apache,
basic_auth_name: "demo",
basic_auth_pass: "demopass"
}
- { role: mysql,
mysql_db_name: "wordpress",
mysql_db_user: "wpuser",
mysql_db_password: "wppass1234"
}
- { role: php }
メインのPlaybook側はシンプルになりますし、別のPlaybookでも再利用しやすく、可搬性が高まりますね。
3. role実行時に変数を渡して、roleの動作を制御する
前述のdependencies
セクションに必要なのは、role
セクションだけですが、
role: apache
の後に basic_auth_name
やbasic_auth_pass
というセクションが続いています。
これらは apache
roleに渡す変数を記述しています。
今回作成したApacheインストール用role roles/apache/meta/main.yml
には、
Basic認証を設定するタスクを記述しています。
そのために必要な ID/PW の値を渡しています。
もし、dependencies
の中でbasic_auth_name
やbasic_auth_pass
を指定せず
- {role: apache}
という記述だけにした場合、
純粋にApacheのインストールしか行わなず、Basic認証無しのWordPress環境が構築されます。
(Apacheインストール用role側で変数の指定有無をチェックしています)
同様にMySQLインストール用roleも、
変数に応じてWordPressに必要なデータベースを作成します。
(MySQL向けの変数を削除してしまうと、WordPressが動かないので注意!)
参考
あとは、
開発作業後に、本番へ移行する際もこんな調子でいきたいですね。