Ansibleのinventory入門

2015.11.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Ansibleは、定義されたインフラ設定を複数のサーバに対し、同時に適用することができます。 この時、どのサーバに対し設定を行うかを定義するのが inventory です。 例えば、hostsというファイルにinventoryを定義します。

基本的なinventory

inventoryは、一言で言えば「対象サーバの一覧」です。 inventoryファイル(歴史的にhostsというファイル名にすることが多い)は、次のようにホスト名の列挙となります。

10.0.11.121
10.0.11.122
10.0.21.100

名前解決ができてSSHアクセス可能であれば、ホスト名、IPアドレスでもホスト名のどちらでもOKです。

group

inventoryでは、次のようにホストをグループ化することができます。

[web]
10.0.11.121
10.0.11.122
[batch]
10.0.21.100

ホストをグループ化することで、次のようにplaybookを特定のホストにのみ適用することができます。

#
# web.yml
#
- hosts: web
  sudo: yes
  remote_user: ec2-user
  roles:
    - apache2

all group

allは、暗黙的に定義されたグループです。 all groupには、inventoryファイルで定義されたすべてのホストを含むため、次のようにplaybookを全ホストに適用することができます。

#
# all.yml
#
- hosts: all
  sudo: yes
  remote_user: ec2-user
  roles:
    - cloudwatchlogs

groupのgroup

:childrenを使うことで、グループをグループ化することができます。

[bastion]
10.0.11.100
[web]
10.0.11.121
10.0.11.122
[batch]
10.0.21.100

[amazonlinux:children]
bastion

[ubuntu:children]
web
batch

group vars

ホストをグループ化することで、playbookの実行対象をまとめることができます。 この時、グループ毎に変数「group vars」を定義することができます。

group varsは、group_varsディレクトリを作成し、[group名].ymlという名前のファイルに定義します。 webグループに関する設定は、group_vars/web.yml にYAMLフォーマットで定義してください。

#
# web.yml
# 
web_domain: “www.example.com”

まとめ

Ansibleではinventoryに対象ホストを定義します。 適用したいインフラ構成が複数ある場合、playbook毎にグループ化してください。 グループ化した場合、変数はそれぞれのgroup varsに定義できます。