今年度、業務でansibleを使用することが度々ありましたが、
私自身は若手エンジニアであり、ansibleを触るのは人生で今年が初でした。
得た経験のアウトプットのためにも、この記事でansibleの知見についてまとめます。
Ansibleについて
Ansibleは、サーバーやネットワーク機器などの管理を自動化するためのツールです。
yaml形式で記述することにより可読性が高く、学習も容易(らしい)です。
Playbookについて
Ansibleでやりたいことを、「Playbook」というファイルに書きます。
Playbookは「指示書」みたいなもので、あるサーバに「このソフトをインストールして、設定を変更する」という作業を実施したい場合、その手順をPlaybookに記載します。
インベントリファイルについて
インベントリファイルは、Ansibleが「どのコンピュータ(サーバー)に対して操作をするか」を指定するリストです。
Ansibleで管理するコンピュータの名前やIPアドレス、グループ分けなどを設定します。
業務で学んだこと
以下の3項目について、業務で関わることが多かったので説明いたします。
・ansible実行用サーバと配布されるサーバの関係
・インベントリファイルの書き方
・ローカルホストにPlaybook流す方法
1. Ansible実行用サーバと配布されるサーバの関係
Ansibleを使う場合、主に以下2つのサーバーが関係します。
Ansibleを実行するサーバ(管理用サーバ)
配布されるサーバ(管理対象サーバ)
ざっくりまとめると、Ansibleを利用するためには、以下の2点の準備が必要です。
- Ansibleを実行するサーバ(管理用サーバ)と配布されるサーバ(管理対象サーバ)がSSH接続を行えること
- Ansibleを実行するサーバ(管理用サーバ)にPlaybook資材が格納されていること
またAnsibleを使用するには、基本的に管理用サーバ(Ansibleを実行するサーバ)にAnsible自体をインストールする必要がありますが、管理対象サーバ(操作対象のサーバ)にはAnsibleを実行するための特別なソフトウェアやエージェントをインストールする必要はありません。
2. インベントリファイルの書き方
インベントリファイルは、Ansibleが操作するサーバーをリスト化したファイルです。このファイルに管理対象サーバのIPアドレスやホスト名、グループを定義します。
つまり「Aシステムのサーバ群に対して、一括でユーザー作成を行いたい!」といった時、
Aシステムのサーバ群のIPアドレスやホスト名をインベントリファイルに記載することで、想定通りのサーバ達に向けてユーザ作成を行うAnsibleを実行することができます。
基本的なインベントリファイルの例を作成してみました。
インベントリファイルは通常、/etc/ansible/hostsや指定したフォルダに保存します。
# インベントリファイルの例
# グループ1: Linuxサーバ
[Linux]
web-server1 ansible_host=192.168.1.10
db-server1 ansible_host=192.168.1.11
# グループ2: Windowsサーバ
[Windows]
win-server1 ansible_host=192.168.2.10
win-server2 ansible_host=192.168.2.11
# 共通の設定(すべてのホストに適用される)
[all:vars]
ansible_ssh_user=root # Linuxサーバ用のSSHユーザー
ansible_ssh_private_key_file=/path/to/private_key # SSH接続に使う秘密鍵のパス
3. ローカルホストにPlaybookを流す方法
Ansible管理用サーバとAnsible管理対象サーバが同一の場合、
つまりAサーバで「Aサーバにユーザ作成するPlaybook」を実行したい場合には、インベントリファイルに他サーバと同様にIPアドレスなどを記載するだけでは上手くいかないことがありました。
ローカルホスト(Ansibleを実行しているサーバー)にPlaybookを流すには、インベントリファイルにそう指定する必要があったようです。
①インベントリファイルで指定
インベントリファイルにlocalhost
を追加し、ローカルホストを指定する方法です。
# インベントリファイル(例: /etc/ansible/hosts)
[local]
localhost ansible_connection=local
ansible_connection=local
を指定することで、ローカルホストでAnsibleがSSHを使わず直接操作できるようになります。
②コマンドラインで指定
上記とは別の方法になりますが、コマンドラインでlocalhostを指定して、直接Playbookを実行することもできるようです。
ansible-playbook -i localhost, playbook.yml
このコマンドでは、インベントリファイルを指定する代わりに、-i localhost
を使ってローカルホストを指定しています。
まとめ
- Ansible管理用サーバと管理対象サーバは、Ansibleが管理対象サーバに設定を適用するために連携する関係です。
- インベントリファイルは管理対象サーバの情報を記述するファイルで、グループ分けやホストの追加ができます。
- ローカルホストにPlaybookを流す方法は、インベントリで
localhost
を指定するか、コマンドラインで直接指定する方法があります。
参考資料
https://e-words.jp/w/Ansible.html
https://www.miraiserver.ne.jp/column/about_ansible/