Ansible理解した(再)
概要
Ansibleは、宣言的な記述をもとに対象サーバの状態を整えるための構成管理ツール。
yamlで記述する。
構成要素
-
Playbook
Playの集合体で、どのPlayをどの順番で実行するかを記述する。 -
Play
対象のホスト(またはホストグループ)に対して実行するタスクやRoleの集合を定義する。ここで「どのホストにどの処理を実行するか」が決まる。 -
Task
実際の操作単位で、Ansibleの各モジュールを呼び出す命令。つまり、Taskはモジュールを実行するための設定(引数やオプションなど)を記述したもの。
→ モジュールはTaskが実行する実体という位置づけ。 -
Module
タスクで呼び出される実際の処理コード。ファイル操作やサービスの起動など、システムに対する具体的な操作を担う。 -
Handler
基本はTaskと同じ形式だが、Taskが「変更」を検知した場合にのみ実行される特殊なTask。たとえば、設定ファイル変更後のサービス再起動など。 -
Role
単なるTaskの集合だけでなく、Task以外にもハンドラー、変数、テンプレート、ファイルなどをまとめた再利用可能な構成要素。複数のPlaybook間で同じ処理を簡単に共有できるようにするための仕組み。 -
Inventory
管理対象のホストやホストグループを定義するファイル。Playbookの実行対象を決定する。
実際の運用の話
Playbookの運用
- playbook.ymlを用意することが多い。
- このplaybook.ymlを実行することで、システム全体が定義した状態になるようにPlayを記述しておく。
- とりあえずこれを実行すれば、コード=システムの状態を達成できるような作り。→冪等性の担保によるもの。
- このplaybook.ymlを実行することで、システム全体が定義した状態になるようにPlayを記述しておく。
playbooks/配下にplaybook.ymlを用意することがある。- 単発で実行するやつ。
- 例: システムの停止起動を複数台に対してまとめて実行する
system-reboot.ymlとか
- 例: システムの停止起動を複数台に対してまとめて実行する
- 単発で実行するやつ。
Roleの運用
- 使いまわせるように、Roleだけを切り出して別のリポジトリとするのがベストプラクティスっぽい(要参考文献)
- 例: logrotateの設定を入れるRoleを単一のリポジトリとすることで、別のシステムのplaybookから参照できるようにする
- どうやってPlaybookのリポジトリからRoleを参照するのか?→
ansible-galaxy install
ansible-galaxy
- Roleにはコミュニティによって作成・公開されているものがある。
ansible-galaxy install -r requirements.ymlで、requirements.ymlに記載したRoleのリポジトリをダウンロードし利用できるようになる。- Macの場合、デフォルトでは
~./ansible/roles/
- Macの場合、デフォルトでは
- コミュニティのものだけでなく、GitHubのオーガニゼーションにある非公開リポジトリなんかも指定できる。
- リモートリポジトリとバージョンを指定する仕組み。
- Roleの改修をPlaybookでテストするには、バージョンタグつけてリリース→
ansible-galaxy installの手順を踏むことになる。
- Roleの改修をPlaybookでテストするには、バージョンタグつけてリリース→
- リモートリポジトリとバージョンを指定する仕組み。