ウェブサイト検索

Ansible で静的インベントリと動的インベントリを使用する方法 - パート 4


Ansible シリーズのこのパート 4 では、静的インベントリと動的インベントリを使用して Ansible でホストのグループを定義する方法について説明します。

Ansible では、Ansible コントロール ノードによって制御される管理対象ホストまたはサーバーは、「ホスト」で説明されているようにホスト インベントリ ファイルで定義されます。インベントリ ファイルは、管理対象ホストまたはリモート サーバーのホスト名またはIP アドレスで構成されるテキスト ファイルです。

管理対象ホストは、個別のエントリとしてリストすることも、後で説明するようにグループ名で分類することもできます。 Ansible には、静的動的の 2 種類のインベントリ ファイルがあります。

これらをそれぞれ見て、どのように管理できるかを見てみましょう。ここまでで、すでにコントロール ノードに Ansible がインストールされ、管理対象ホストへのパスワードレス SSH 接続が設定されていることを前提としています。

静的ホスト インベントリ ファイル

Ansible では、静的インベントリ ファイルは、ホスト名または IP アドレスを使用してホスト グループの下で宣言された管理対象ホストのリストを含むプレーン テキスト ファイルです。

ホスト グループ名は角括弧で囲まれます ([グループ名])。管理対象ホストのエントリは、後でグループ名の下にそれぞれ別の行にリストされます。前述したように、ホストはホスト名または IP アドレスを使用してリストされます。

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address

説明のために、静的なインベントリ ファイルを作成します。

mkdir test_lab && cd test_lab
vim hosts
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

ファイルを保存して終了します。

上記のインベントリ ファイルでわかるように、webserversdatabase_servers という 2 つのホスト グループを作成しました。また、上記のように ':children' サフィックスで示されるホスト グループのグループを含む、datacenter という追加のグループを作成しました。

Ansible では、ホストのグループをグループ名の下に配置することもできます。上記のインベントリ ファイルでは、webservers グループと database_servers グループがdatacenter の下に配置されています。

: 管理対象ホストをホスト グループに配置することは必須ではありません。たとえば、ホスト名または IP アドレスを使用して単純にリストすることができます。

173.82.202.239
172.82.115.165
load_balancer.pnl.com

次に、いくつかの Ansible コマンドを使用して、ホスト インベントリ ファイルを参照してみましょう。在庫管理の基本的な構文は次のとおりです。

ansible {host-pattern} -i /path/of/inventory/file --list-hosts

例えば、

ansible all -i /root/test_labs/hosts --list-hosts

あるいは、ワイルドカード文字 * を使用して、‘all’ 引数を置き換えることもできます。

ansible * -i /root/test_labs/hosts --list-hosts

グループ内のホストを一覧表示するには、host-pattern の代わりにホスト グループを指定します。

ansible webservers -i /root/test_labs/hosts --list-hosts

動的ホストインベントリファイル

構成、特にAWS などのクラウド設定では、サーバーの追加や廃止に応じてインベントリ ファイルが常に変化し続けるため、インベントリ ファイルに定義されているホストを監視することが大きな課題となります。ホスト ファイルに戻って、IP アドレスを含むホストのリストを更新するのは不便になります。

ここで動的インベントリが活躍します。では、動的インベントリとは何でしょうか?動的インベントリは、Python、PHP、またはその他のプログラミング言語で書かれたスクリプトです。仮想サーバーを停止して再起動すると IP アドレスが変わる AWS などのクラウド環境で便利です。

Ansible はすでに、Google Compute Engine、Amazon EC2 インスタンス、OpenStack、RackSpace、cobbler などのパブリック クラウド プラットフォーム用のインベントリ スクリプトを開発しています。

静的インベントリに対する動的インベントリの利点は何ですか?
  • 動的インベントリは、スクリプトを使用して情報が収集されるため、人的エラーを減らすのに最適です。
  • 在庫管理に必要な労力は最小限です。

選択したプログラミング言語で、独自にカスタマイズした動的インベントリを作成できます。適切なオプションが渡されると、インベントリは JSON 形式で返す必要があります。

既存の動的インベントリ スクリプトを利用する

動的インベントリの作成に使用されるスクリプトは、Ansible が使用できるように実行可能にする必要があります。

動的インベントリ スクリプト内のホストに関する情報を取得するには、単に実行します。

./script --list 

前に示したように、出力は以下の形式の JSON である必要があります。

グループ (つまり、Web サーバー、データベースサーバー) で構成されるディクショナリ
  • グループごとの管理対象ホストのリスト
  • 変数の辞書
メタ辞書
  • ホストとホスト変数
サンプル出力
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}
結論

この記事では、静的インベントリと動的インベントリの両方を作成する方法を説明しました。要約すると、静的インベントリ ファイルは、番号と IP アドレスがほぼ一定のままである管理対象ホストまたはリモート ノードのリストを含むプレーン テキスト ファイルです。

一方、動的ホスト ファイルは、新しいホストを追加したり、古いホストを廃止したりすると変更され続けます。新しいホスト システムを停止および起動すると、ホストの IP アドレスも動的になります。このチュートリアルが有益であると感じていただければ幸いです。