概要
Ansible実践ガイド 第3版を読んでみて超基本的な内容のみメモする。雑なメモなので、正しい内容が確認したい場合は再度書籍を読む。
ちなみにAnsible実践ガイド 第3版は23年4月時点でKindle Unlimited対象だった。
Ansibleとは
- 構成管理ツール(リモートマシンにソフトウェアを自動でインストールしたりできる)
- マシンにエージェントソフトウェアをインストールして、エージェントが構成管理サーバから構成情報をPullするパターン(Puppet, Cef)もあるが、Ansilbeはエージェント無しでPush型で構成管理を行う
- 具体的には、AnsibleコントロールサーバがリモートマシンにSSH接続してPythonを実行し、インストールや設定を行う
- したがって、AnsibleではリモートマシンにSSH接続できることとPythonが実行可能である必要がある
Ansibleのインストール
Windowsを使っているのでWSLのUbuntuディストリビューションで作業する。 PythonとPIPがインストール済みであれば、下記コマンドだけでAnsibleをインストールできる。
# pip install ansible
リモートマシン作成
AWSやAzureでリモートマシンを作成しておく。今回はAzureでリモートマシンを作成して作業した。
下記を参考にしてSSH接続できるところまでやっておく。
https://www.furukawa.co.jp/fitelnet/product/setting/pdf/azure-3_virtual-machine.pdf
Ansibleのコマンド
Ansibleでリモートマシンへの操作を実行するコマンドは次の通り。
# ansible-playbook -i invenory.ini playbook.yml
inventory.ini
はインベントリファイルで、リモートマシンのIPアドレスないしドメイン名のリストが記載される。
[azure] xxx.xxx.xxx.xxx [azure:vars] ansible_user=azureuser ansible_ssh_private_key_file=~/ansible.pem [all:vars] ansible_port=22
[azure]
のセクションは「グループ」と呼ばれ、リモートマシンのIPアドレス、ドメイン名を記載する。これを後述のプレイブックファイルで参照することで、対象となるリモートマシンを指定する。
[azure:vars]
はグループ変数と呼ばれ、ホストグループで共通して使用できる変数を定義する。グループ変数は[グループ名:vars]
というセクションに定義する。変数にはユーザ定義変数と既定の「特別な変数」が存在する。ansible_user
とansible_ssh_private_key_file
は特別な変数で、それぞれSSH接続ユーザ名、SSH接続の秘密鍵ファイルのパスを指定する。
その他の特別変数は公式ドキュメントを参照のこと。
[all:vars]
のall
は特別なグループで、暗黙的に定義されているので定義を記載する必要がない。[all:vars]
に記載された変数は、インベントリファイルに記載された全ホストに適用される。
playbook.yml
はプレイブックファイルで、リモートマシンで実行する処理を記載する。
--- - hosts: azure vars: message: Hello Japan tasks: - name: Command test command: cmd: 'echo {{ message }}' register: command_return - name: Show command result debug: msg: "{{ command_return.stdout }}" - hosts: azure tasks: - name: Command test2 command: cmd: 'echo End the processing' - hosts: azure tasks: - name: Install jinja2 pip: name: jinja2
先頭行の---
はYAMLファイルの開始を示す記号で省略可能。
ファイルは複数のプレイからなる。1プレイには、hostsセクション、varsセクション、tasksセクション、handlersセクションが含まれる。上の例では、handlersセクションは記載していない。
hostsセクションでは、インベントリファイルに記載したグループを指定する。varsセクションでは変数を定義することができ、定義した変数は{{ 変数名 }}
という形式でプレイ内で使用できる。tasksセクションでは、モジュールを指定する。モジュールには、コマンドを実行するcommand
やファイル操作を行うfile
などがある。よく使われるモジュールは下記を参照のこと。
Ansibleの動作
インベントリファイルとプレイブックファイルをもとにPythonの実行コードを生成し、そのファイルをSFTPでリモートマシンに送信する。リモートマシン側でPythonコードを実行し、結果を返す。最後に、Python実行コードを削除する。
以上