Ansibleはオープンソースの構成管理とOSやソフトウェアなどの設定作業を自動化するツールであり、主にLinuxやWindowsなどの管理に利用されている。
クラウド環境やコンテナ環境でも管理可能なモジュールは提供されているが、Ansibleは基本的には管理者が手動で実行・管理していたOSコマンドやOS上の設定ファイルを自動で管理する。本稿ではこの機能を中心に説明していく。
Ansibleとは、OSのターミナルから実行するコマンドのことであり(以下、「Ansibleコマンド」と呼ぶ)、Ansibleコマンドが導入されているサーバーを本稿では「Ansibleサーバー」と呼ぶ。
AnsibleサーバーでAnsibleコマンドを実行すると、Ansibleサーバーから被管理サーバーへアクセスして各種設定を行う。
被管理サーバーへのアクセスと設定の反映には、対象がLinuxサーバーの場合はSSHプロトコルとPythonを、Windowsの場合はWinRM(Windows Remote Manager:Windowsリモート管理)プロトコルを使用する。被管理サーバー側に、Ansibleのクライアントを導入する必要はない。
このクライアントの導入不要という点はAnsibleの大きなメリットの1つであり、そのため被管理サーバーを作成してから直ちにAnsibleでのセットアップが可能となる。
Ansibleにはいくつかコマンドが存在するが、Ansibleによる構成管理というと、ansible-playbookコマンドを実行する形が一般的である。
ansible-playbookコマンドを実行する際には、PlaybookファイルとInventoryファイルが必要である。Playbookファイルは、被管理サーバーに対して設定する内容を記述したテキストファイル(YAMLフォーマット)で、パッケージ管理、ユーザー管理、ファイルやディレクトリ操作、サービス操作など、さまざまな設定が可能である。
一方、Inventoryファイルは被管理サーバーの接続情報を定義するテキストファイルで、主に被管理サーバーのホスト名やIPアドレスのリストを記載するほか、被管理サーバーにアクセスする際に使用するユーザーID、パスワードやSSH鍵、被管理サーバーに導入されているPythonのパス、といった情報を記載することもある。
Ansibleコマンドの実行イメージは、以下のとおりである。
$ ansible-playbook -i Inventoryファイルパス Playbookファイルパス
デフォルトでは、ansible-playbookコマンドを実行したユーザーIDとSSH鍵で被管理サーバーにSSH接続して、Playbookを実行する。
異なるユーザーIDとSSH鍵でSSH接続する場合は、-uや–private-keyオプションなどを使用し、被管理サーバーがWindowsである場合はInventoryファイルにユーザーIDやパスワードを記述する。