# 2. インベントリ の作成

この章では、Ansibleインベントリの基本概念と、インベントリファイルの作成・管理方法について学びます。


# インベントリとは?

Ansibleインベントリは、管理対象ノード(ホスト)のリストやグループを定義するファイルです。
インベントリを使うことで、複数のホストに対して一括でタスクを実行できます。
インベントリは静的ファイル(INI形式またはYAML形式)として定義するほか、動的に生成することも可能です。

  • ホストはグループ化でき、グループは子グループを持つこともできます。
  • ホストは複数グループに所属可能です。
  • インベントリにはホストやグループに適用する変数も記述できます。

# インベントリファイルの作成方法

Ansibleのインベントリファイルは、INI形式またはYAML形式で記述します。
Ansible において、Inventory ファイルは対象を示していて実行に欠かせない要素です。

教材 (opens new window)のフォルダには ansible フォルダの配下にインベントリファイルを置くためのフォルダ(inventories)があります。 試しに開いてみましょう。 以下のような記載がなされているはずです

[web]
web00
ap00
1
2
3

このようにAnsible の Inventory ファイルは INI 形式に近い記述によって作成されます。 インベントリファイルの括弧内の見出し([app]など)はグループ名を表し、任意のホストをグルーピングすることができます。

なお、グルーピングでは暗黙のallグループが存在しており、[]に属さないホストはデフォルトであるallグループに属することになります。

# [演習.2] インベントリの作成

# インベントリファイルの作成

では、実際にインベントリファイルを作成してみましょう。 ファイルの作成自体はコンテナへログインしvi(vimでも可)で操作しても良いですし、exerciseのdocker-compose.ymlに従って起動した場合は ansible フォルダがコンソールコンテナにマウントされているため、そのまま編集することもできます

以下は、コンソールコンテナ上での操作例を記載しています

  • hosts というファイルを作成し、以下の内容を記載してください。
    vi hosts
    
    1
  • 記載内容
    [exercise]
    host00
    host01
    
    1
    2
    3

# インベントリファイルの書式チェック

作成したインベントリファイルが正しい書式かどうかを確認するには、ansible-inventoryコマンドを利用します。

ansible-inventory -i inventories/hosts --list
1

このコマンドを実行すると、インベントリの内容がJSON形式で表示され、構造やグループ分けが正しく認識されているか確認できます。

# インベントリ構造の表示(YAML形式)

さらに、-y オプションを付けることでYAML形式でインベントリの構造を表示できます。

ansible-inventory -i -i inventories/hosts --list -y
1

これにより、グループやホストの階層構造がより分かりやすく表示されます。

# [発展演習.1] 不要エントリのコメントアウトと動作確認

先ほど作ったインベントリファイルですが、こんなケースは考えられないでしょうか。 あるプロジェクトで、インベントリファイルに不要なホストエントリが含まれていることが判明しました。 これらのホストは現在使用されておらず、誤ってタスクが実行されるのを防ぐためにコメントアウトする必要があります。

デプロイの対象から特定のホストを除外するのはエントリを削除すれば良いのですが 一時的な除外のためにエントリを削除してしまったのでは、元に戻すときに苦労してします。 従って、そのような時のためにコメントアウトによる除外を試してみましょう。

# コメントアウト作業

  • hosts ファイルを編集し、不要なホストエントリをコメントアウトしてください。

    [exercise]
    host00
    # host01
    
    1
    2
    3

# 動作確認

  • コメントアウトしたホストが実行対象から外れていることを確認します。

    ansible-inventory --list -i inventories/hosts
    
    1
  • 出力結果に host01 が含まれていないことを確認してください。

# [発展演習.2] インベントリのグルーピング

他にもAnsibleでは、複数のホストを任意のグループに分けて管理できます。
ここでは、group1group2 という2つのグループを作成し、それぞれにホストを割り当てる演習を行います。

# グルーピング作業

  • hosts ファイルを以下のように編集してください。

    [group1]
    host00
    host01
    
    [group2]
    host02
    host03
    
    1
    2
    3
    4
    5
    6
    7

# [発展演習.3] Ansibleインベントリを活用したアドホック操作

先ほど作成したインベントリの動作確認はあくまで作成したファイルの書式チェックのみとなっており、実際に登録したホストに対して疎通がある、操作可能、といった事は担保されていません。 従って、登録したインベントリが実際に有効であるかどうかを確かめるために、ansibleコマンドで ping モジュールを実行してみます。

  • ansibleコマンドの実行
    ansible -i inventories/hosts exercise -m ping -k
    
    1
  • パスワードを聞かれるため事前準備で設定したパスワード(ansible)を入力します
  • 正しく実行されれば以下のように、対象のインベントリに対してSUCCESSとして返ってきます
    host01 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    host00 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14


CC BY-SA Licensed | Copyright (c) 2025, Internet Initiative Japan Inc.