Ansible超基本メモ
概要
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実行コードを削除する。
以上