Ansible ディレクトリ構成のベストプラクティスを考えてみた
概要
Ansible でサーバ構成を管理する場合、公式が推奨しているベストプラクティス では、管理するサーバが多くなるに連れてコードの管理が大変になってくる。
そこで、あらゆるサイトを参考に、個人的なディレクトリ構成ベストプラクティスを作成した。
Github はこちら。
ディレクトリ構成
最終的に、こんな感じに落ち着いた。
ansible ├── ansible.cfg ----------> ansible 設定ファイル │ ├── apps -----------------> 各アプリケーション構成用のディレクトリ │ ├── app-A │ │ ├── group_vars │ │ │ ├── prod.yml │ │ │ ├── dev.yml │ │ │ └── local.yml │ │ │ │ │ ├── roles --------> アプリケーション固有の role │ │ │ └── nginx-config │ │ │ │ │ ├── prod │ │ ├── dev │ │ ├── local │ │ └── site.yml │ │ │ ├── app-B │ └── app-C │ ├── common-roles ----------> 汎用的な role │ ├── awscmd │ ├── capistrano │ ├── common │ ├── grunt │ ├── gulp │ ├── laravel │ ├── memcached │ ├── mysql │ ├── newrelic │ ├── nginx │ ├── nodejs │ ├── php │ ├── redis │ ├── ruby │ ├── wordpress │ └── yo │ └── vars ├── common.yml ----------> 汎用的な変数 └── private.yml ----------> vault する汎用的な変数
実行方法
[local]$ cd ansible/apps/app-A [local]$ ansible-playbook -i local site.yml
特徴 その① インベントリファイルで stage 変数を定義!
site.yml
にて環境毎に読み込むvarsファイルを切り替えるため、
インベントリファイル(例えば ansible/apps/app-A/local.yml
)で stage変数
を定義する。
例えば、インベントリファイルで
[all:vars] stage=local
と定義しておいて、site.yml にて
vars_files: - group_vars/{{stage}}.yml
とすると、group_vars/local.yml
が読み込まれる。
特徴 その② アプリケーション毎の group_vars は一つのファイルにまとめる!
ansible/apps/app-A/local/web.yml
や ansible/apps/app-A/local/db.yml
のように、
webサーバ用変数、dbサーバ用変数とファイルを分けるのが一般的なやりかた。
ただ、別に変数がめちゃくちゃ多い訳でもないので、環境毎にそれぞれ一つのファイルにまとめた方が管理しやすい。
まとめ
とりあえずここしばらくはこの構成で運用している。
特に不具合や使いづらさも感じないので、しばらくはこの構成でいけそう。
参考
- 作者: Lorin Hochstein,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/04/16
- メディア: 大型本
- この商品を含むブログ (2件) を見る