Atsushi2022の日記

データエンジニアリングに関連する記事を投稿してます

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_useransible_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 でよく使うモジュールまとめ - Qiita

Ansibleの動作

インベントリファイルとプレイブックファイルをもとにPythonの実行コードを生成し、そのファイルをSFTPでリモートマシンに送信する。リモートマシン側でPythonコードを実行し、結果を返す。最後に、Python実行コードを削除する。

以上