Ansibleで自動化ファイルを構成管理する
Ansibleで大規模な開発をするには、自動化するAnsibleのファイル自体を構成管理する必要があります。playbookを共通化して使うことで、基本パーツと応用パーツを組み合わせて、効率的な自動化を実現できます。複数のパーツを決まったルールに従って作っていくことで、パーツとパーツを組み合わせて応用していくことができれば、Ansibleをうまく使えている状態になります。本記事ではAnsibleの基本構成を簡単にまとめます。
Ansibleのインベントリーファイルを作成する
インベントリファイルで何に対して自動化を行うのか対象を定義できます。定義ファイルのデフォルトを設定することもできます。一度設定すると、今後コマンドを打たずして、省略してInventoryファイルを利用できます。
[defaults]
log_path = $HOME/.ansible/ansible.log
host_key_checking = False
retry_files_enabled = False
inventory = $HOME/inventory.ini
playbookの構成
playbookは大きく4つのセクションで、基本はTargetsセクションとTasksセクションのみ記述が必須です。
非常にシンプルな構成でわかりやすいですね。
・Targetsセクション:対象が何か明記します。jinja2ファイルを挟み動的に対象を指定することもできます。
・Tasksセクション:何をするか明記します。
・Varsセクション:変数を定義します。
・Handlersセクション:Tasksセクションで実行がうまく行った時のみ実行します。TasksのNameと合わせて名前をつける必要があります。
---
- name: name
vars:[変数]
tasks:[何をするか]
targets:[対象]
handlers:[タスクが成功した場合に実行]
playbookを作ってみる
<Fileモジュール> ディレクトリやファイルを作れます。
<templateモジュール> ファイルをコピーするモジュールです。
内部で変数を使うことができ、動的な動きができます。
Copyモジュールもありますが、動的なファイルコピーができるtemplateを使いこなした方が便利です。
Jinja2テンプレートファイルを作成する必要があります。
- name: Template a file, using symbolic modes (equivalent to 0644)
template:
src: group_sudoers.j2
dest: /etc/sudoers.d/user01
owner: root
group: root
mode: 0400
validate: 'visudo -cf %s'
<block> タスクをまとめることができます。ルート権限でこのタスクをやりますと言うときに、便利です。
ansible -b -m authorized_key
ansibleコマンドで試せる。
-m authorized_key:ssh-keyの配布をやってくれる。
roleによるtasksのまとめ
roleを使うことでtasksを機能ごとにまとめられます。パーツをグループ化していくことで、自動化を管理してパーツを組み合わせて使えます。構成ファイルはansible-galaxyコマンドで一括で作成することができます。
ansible-galaxy init --init-path=roles common
コマンドを実行すると以下のようなディレクトリが作成されます。テンプレートとなるこの構成を理解することで、Ansibleの基本構成でコマンドを管理しやすくなります。
roles
`-- common
|-- README.md
|-- defaults
| `-- main.yml
|-- files
|-- handlers
| `-- main.yml
|-- meta
| `-- main.yml
|-- tasks
| `-- main.yml
|-- templates
|-- tests
| |-- inventory
| `-- test.yml
`-- vars
`-- main.yml
基本的な3階層モデルのWebサーバを自動化する場合は以下のようにcommon,application,mariadb,nginxのようにディレクトリを作成します。共通ディレクトリでサーバレベルのことを行い、上位レベルのプロセスのインストールをapplication,mariadb,nginxのディレクトリで定義することで、IPアドレスやパラメタータレベルのものを修正するのみで、3層モデルのウェブサーバを構築することができるようになります。
roles
|-- application
| |-- README.md
| |-- defaults
| | `-- main.yml
| |-- files
| |-- handlers
| | `-- main.yml
| |-- meta
| | `-- main.yml
| |-- tasks
| | `-- main.yml
| |-- templates
| |-- tests
| | |-- inventory
| | `-- test.yml
| `-- vars
| `-- main.yml
|-- common
| |-- README.md
| |-- defaults
| | `-- main.yml
| |-- files
| |-- handlers
| | `-- main.yml
| |-- meta
| | `-- main.yml
| |-- tasks
| | `-- main.yml
| |-- templates
| | `-- hosts.j2
| |-- tests
| | |-- inventory
| | `-- test.yml
| `-- vars
| `-- main.yml
|-- mariadb
| |-- README.md
| |-- defaults
| | `-- main.yml
| |-- files
| |-- handlers
| | `-- main.yml
| |-- meta
| | `-- main.yml
| |-- tasks
| | `-- main.yml
| |-- templates
| |-- tests
| | |-- inventory
| | `-- test.yml
| `-- vars
| `-- main.yml
`-- nginx
|-- README.md
|-- defaults
| `-- main.yml
|-- files
|-- handlers
| `-- main.yml
|-- meta
| `-- main.yml
|-- tasks
| `-- main.yml
|-- templates
|-- tests
| |-- inventory
| `-- test.yml
`-- vars
`-- main.yml
終わりに
自動化するAnsibleのファイルを構成管理する方法をご紹介しました。一度、自動化できるファイルを作成しておくと使いまわすことができて便利です。一時的なイベントサイトの構築や検証環境構築に役立たせることができると思います。是非、お試しください。