Ansible でデフォルトのインベントリファイルパスを設定する方法

AnsibleBeginner
オンラインで実践に進む

はじめに

Ansible は、インフラストラクチャとアプリケーションの管理を簡素化する、広く利用されている IT 自動化ツールです。このチュートリアルでは、Ansible でデフォルトのインベントリファイルパスを設定し、効率的かつ一貫したインフラストラクチャ管理を確実にする方法を探ります。Ansible のインベントリファイルには、Ansible が管理するホストのリストが含まれています。カスタムインベントリファイルの場所を設定することで、自動化ワークフローをより良く整理できます。

Ansible インベントリの理解

カスタムインベントリファイルパスを設定する前に、Ansible インベントリとは何か、デフォルトでどのように機能するかを理解しましょう。

Ansible インベントリとは?

Ansible インベントリは、Ansible が管理するホストに関する情報を含むファイルです。デフォルトでは、Ansible は /etc/ansible/hosts でインベントリファイルを探します。インベントリはさまざまな形式で記述できますが、最も一般的なのは INI スタイルのファイルまたは YAML ファイルです。

Ansible がシステムに正しくインストールされているかどうかを確認しましょう。

ansible --version

次のような出力が表示されるはずです。

ansible [core 2.12.x]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.x (default, Ubuntu, etc.)

次に、デフォルトのインベントリファイルの場所を見てみましょう。

cat /etc/ansible/hosts

このファイルは空であるか、またはホスト設定の例が含まれている場合があります。デフォルトのインベントリファイルは、多くの場合、次のようになります。

## Example inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

この形式では、

  • [webservers][dbservers] はグループ名です。
  • 各グループの下にリストされているホスト名または IP アドレスは、そのグループに属しています。

今回の実験(Lab)では、別の場所に独自のカスタムインベントリファイルを作成します。

カスタムインベントリファイルの作成

インベントリファイルが何かを理解したので、プロジェクトディレクトリに独自のカスタムインベントリファイルを作成しましょう。

Ansible ファイル用のディレクトリを作成する

まず、プロジェクトディレクトリに移動し、Ansible ファイル専用のフォルダーを作成します。

cd ~/project
mkdir -p ansible/inventory

カスタムインベントリファイルを作成する

次に、新しいディレクトリにシンプルなインベントリファイルを作成します。

cat > ansible/inventory/hosts.ini << 'EOF'
## Custom inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[local]
localhost ansible_connection=local

[all:vars]
ansible_user=ubuntu
EOF

このインベントリファイルは、次の 3 つのグループを定義しています。

  • webservers: 2 つの Web サーバーを含みます。
  • dbservers: 2 つのデータベースサーバーを含みます。
  • local: 特殊な接続設定を持つ localhost を含みます。

新しく作成したインベントリファイルを確認しましょう。

cat ansible/inventory/hosts.ini

先ほど作成した内容が表示されるはずです。

このファイルは、カスタムインベントリファイルとして使用できるようになりました。次のステップでは、システム全体の /etc/ansible/hosts ファイルの代わりに、このファイルをデフォルトで使用するように Ansible を設定します。

デフォルトのインベントリファイルパスの設定

カスタムインベントリファイルを作成したので、それをデフォルトのインベントリファイルとして使用するように Ansible を設定しましょう。これを行う方法はいくつかありますが、最も一般的な 2 つの方法に焦点を当てます。

方法 1: Ansible 設定ファイルを使用する

Ansible は、次の順序で設定ファイルを探します。

  1. ANSIBLE_CONFIG 環境変数
  2. 現在のディレクトリの ansible.cfg
  3. ~/.ansible.cfg (ユーザーのホームディレクトリ)
  4. /etc/ansible/ansible.cfg (システム全体)

プロジェクトディレクトリに ansible.cfg ファイルを作成しましょう。

cat > ~/project/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = ~/project/ansible/inventory/hosts.ini
host_key_checking = False
EOF

この設定ファイルでは、以下を設定しました。

  • inventory: カスタムインベントリファイルへのパス
  • host_key_checking: SSH ホストキー検証プロンプトを防止するために無効化

方法 2: 環境変数を使用する

インベントリファイルを指定するもう一つの方法は、ANSIBLE_INVENTORY 環境変数を使用することです。これは、設定を変更せずに、一時的に別のインベントリファイルを使用したい場合に便利です。

export ANSIBLE_INVENTORY=~/project/ansible/inventory/hosts.ini

簡単な Ansible コマンドを実行して、設定が機能していることを確認しましょう。

cd ~/project/ansible
ansible --list-hosts all

このコマンドは、カスタムインベントリファイルからすべてのホストをリスト表示するはずです。

  hosts (5):
    web1.example.com
    web2.example.com
    db1.example.com
    db2.example.com
    localhost

これで、~/project/ansible ディレクトリから Ansible コマンドを実行すると、Ansible はデフォルトでカスタムインベントリファイルを使用するようになります。

インベントリ設定の検証

カスタムインベントリファイルを設定したので、Ansible がそれを正しく使用していることを確認し、インベントリを操作するためのいくつかのコマンドを調べてみましょう。

ansible-inventory でインベントリを確認する

ansible-inventory コマンドを使用すると、インベントリ設定を表示および検証できます。

cd ~/project/ansible
ansible-inventory --list

これにより、インベントリが JSON 形式で表示されます。

{
  "_meta": {
    "hostvars": {
      "localhost": {
        "ansible_connection": "local"
      }
    }
  },
  "all": {
    "children": ["dbservers", "local", "ungrouped", "webservers"]
  },
  "dbservers": {
    "hosts": ["db1.example.com", "db2.example.com"]
  },
  "local": {
    "hosts": ["localhost"]
  },
  "webservers": {
    "hosts": ["web1.example.com", "web2.example.com"]
  }
}

より読みやすい形式にするには、--graph オプションを使用できます。

ansible-inventory --graph

これにより、インベントリがツリーのような構造で表示されます。

@all:
  |--@dbservers:
  |  |--db1.example.com
  |  |--db2.example.com
  |--@local:
  |  |--localhost
  |--@ungrouped:
  |--@webservers:
  |  |--web1.example.com
  |  |--web2.example.com

ローカルホストへの接続をテストする

簡単な ping コマンドを実行して、ローカルホストと通信できることを確認しましょう。

ansible local -m ping

次のような出力が表示されるはずです。

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

ホストで簡単なコマンドを実行する

ansible コマンドを使用して、ホストでコマンドを実行することもできます。例のホストは実際には存在しないため、ローカルホストのみをターゲットにしましょう。

ansible local -a "uname -a"

これにより、ローカルホストで uname -a コマンドが実行され、次のような出力が表示されます。

localhost | CHANGED | rc=0 >>
Linux ubuntu 5.15.0-1033-aws #37-Ubuntu SMP Wed Aug 16 07:38:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

これにより、Ansible がカスタムインベントリファイルを正しく使用し、それに定義されているホストでコマンドを実行できることが確認されます。

まとめ

このチュートリアルでは、Ansible でカスタムインベントリファイルのパスを設定および構成する方法を学びました。これで、以下の内容を理解できました。

  • Ansible インベントリファイルとは何か、およびそのデフォルトの場所
  • ホストグループを使用してカスタムインベントリファイルを作成する方法
  • 設定ファイルメソッドと環境変数の両方を使用して、デフォルトでカスタムインベントリファイルを使用するように Ansible を構成する方法
  • さまざまな Ansible コマンドを使用して、インベントリ設定を検証する方法

これらのスキルは、Ansible 自動化ワークフローをより効率的に整理するのに役立ちます。インベントリファイルの場所をカスタマイズすることで、プロジェクトの構造と要件に基づいてインフラストラクチャをより適切に管理できます。

より大規模なプロジェクトに取り組む場合は、動的インベントリを調査したり、Ansible Vault を使用してインベントリファイル内の機密情報を保護したりすることもできます。