ansibleのベストプラクティスを理解するのに時間がかかったが、

実案件の構築を通して、なんとなくわかってきた。

 

個人的な所感を表現すると、

環境・特性・筐体ごとに役割を分割し、変数を割り当てる

ということになる。

言葉で表すと、若干意味不明なので、例を書いてみる。

 

<例>

あるWEBサイトを作る場合、

サービス側と管理側でシステムが分かれるケースが多いだろう。

その場合、サービス側ではアクセスが多く、

参照が多いのであれば、DBに加えて、様々なキャッシュも併用する。

同時にwebサーバではkeepaliveを強くしたり、画像のキャッシュを行うこともあるだろう。

反対に、管理側では、アクセス人数が限られていることもあり、

キャッシュは使わないし、正確なデータ提供が求められる。

 

<サービス側の構成>

例えば、

  • webサーバ2台 → apache,phpが必要
  • cacheサーバ2台 → memcachedが必要
  • dbサーバ2台(master、slave) → mysqlが必要

というようなケースを考えてみよう。

そして、

  • 本番環境(production)
  • 確認環境(staging)
  • テスト環境(test)

という環境があるとする。

 

という状況において、

本番のインベントリファイルは以下のようになる。

 

inventry-service-production.ini

# ----------
# servers
# ----------
[servers-service-web]
service-production-web01
service-production-web02
### ↑のセクションは、webサーバとしてのグルーピング

[servers-service-cache]
service-production-cache01
service-production-cache02
### ↑のセクションは、cacheサーバとしてのグルーピング

[servers-service-db]
service-production-db01
service-production-db02
### ↑のセクションは、dbサーバとしてのグルーピング

# ----------
# grouping
# ----------
[servers-service:children]
servers-service-web
servers-service-cache
servers-service-db
### ↑のセクションは、全体のグルーピング

# ----------
# environment
# ----------
[env-service-production:children]
servers-service-web
servers-service-cache
servers-service-db
### ↑のセクションは、本番環境全体のグルーピング

[env-service-production-web:childeren]
servers-service-web
### ↑のセクションは、本番環境webサーバのグルーピング

[env-service-production-cache:childeren]
servers-service-cache
### ↑のセクションは、本番環境cacheサーバのグルーピング

[env-service-production-db:childeren]
servers-service-db
### ↑のセクションは、本番環境dbサーバとしてのグルーピング

この状態において、
必要なgroup_vars以下のファイルは以下の通りとなる。

 

  1. servers-service.yml
  2. env-service-production.yml
  3. env-service-production-web.yml
  4. env-service-production-cache.yml
  5. env-service-production-db.yml

 

1のファイルに書かれる設定は、「サービス側共通設定」である。

つまり、環境や種別が変わっても、必ず設定されるべきものである。

例えば、sshの設定などは、比較的このケースにあたるだろう。

(当然、all.ymlでもよい。ただし、all.ymlは、サービス側・管理側での共通設定という位置づけの方がよいと思う)

 

2のファイルに書かれる設定は、「本番環境サービス側共通設定」である。

つまり、本番環境のすべての筐体に設定されるべきものである。

例えば、本番環境のみ監視ツールを入れたい場合などのは、このケースにあたるだろう。

 

3のファイルに書かれる設定は、「本番環境のサービス側webサーバでの共通設定」である。

ここでは、apacheやphpの設定がそれにあたる。

 

どうように、4、5も解釈できるだろう。

 

さらにいうと、dbサーバでは、masterとslaveがわかれるが、

これはhost_varsを使って、さらに筐体ごとに設定をわけてやればよい。

 

ansibleは奥が深い。

設定された変数の適用順番、マージ方法、上書き、予約語(関数)衝突もあり、

なかなかうまくいかないだろうが、

このあたりを抑えておくと、幅が広がる感じがすると思う。

 

管理側については、

省略するが、大筋この流れでかけるはず。

 

以上

コメントがあればどうぞ


CAPTCHA Image
Reload Image