タスクを自動化するための Ansible Playbook について学びます。
前回は、Ansible の概要とインストール ガイドについて説明しましたが、次は Playbook とその構成要素について説明します。
Ansible プレイブックとは何ですか?
Playbook は Ansible 自動化言語です。これは、一連の手順が記載された単純なファイルです。 Ansible に何を実行させたいかを定義するのは Playbook です。 Playbook にはタスクを実行するプレイが含まれており、これらのタスクはモジュールを実行します。彼らのタスクは順番に実行されます。
たとえば、異なるサーバー上で一連のコマンドを順番に実行し、それらのサーバーを順番に再起動するだけで済みます。あるいは、ロード バランシング、監視、ネットワーク設定を含め、パブリック クラウドとプライベート クラウドに何百もの VM を展開してプロビジョニングするのと同じくらい複雑になる場合もあります。
ハンドブックの言語
Playbook は、YAML コードで記述された単純なファイルです。
YAML はデータシリアル化言語です。人間でも機械でも可読です。 YAML コードを作成するのに特別なコーディング スキルは必要ありません。データ シリアル化言語は、すべてのデータ構造を分解し、後で使用するために再構築できる順序でシリアル化するためのトランスレーターと考えることができます。この再構築されたデータ構造は、同じ環境でも、異なる環境でも使用できます。
以下は、mysql をインストールするためのサンプル YAML ファイルです。
---
- name: Install MySQL
hosts: -mysql-service
tasks:
- name: Install MySQL
action: $ansible_pkg_mgr pkg=mysql-server state=installed
- name: Add Python MySQL DB
action: $ansible_pkg_mgr pkg=python-mysqldb state=installed
Ansible プレイブックの基本
記事のこの部分では、Ansible Playbook についてさらに理解するために、Ansible の基本的な概念について説明します。
ホストとユーザー
Ansible には、Ansible プレイブックからプレイをデプロイする必要があるインフラストラクチャ内にターゲット マシンが必要です。ホストは、IP アドレスを通じて Ansible インベントリに追加されます。ホストは、コロンで区切られた 1 つ以上のグループまたはホスト パターンのリストです。 Remote_user にはユーザー アカウントの名前が含まれます。
---
- hosts: ProdServers
remote_user:
変数
変数を使用すると、プレイブックの実行方法を変更できます。これらは Playbook 内のほぼどこでも使用でき、インベントリから継承したり、実行時に明示的に設定したり、Playbook の実行の開始時に検出したりできます。文字、数字、アンダースコアを使用して変数名を定義できますが、先頭は文字のみにする必要があります。
たとえば、port_01 は有効な変数ですが、01_post は無効な変数です。 Ansible Playbook の変数の例を次に示します。
vars:
http_port: 80
max_clients: 200
在庫
プレイブックを実行するには、自動化を実行するターゲットのリストが必要です。これがインベントリの役割です。インベントリ リストは、静的ファイル (Ansible Hosts) など、いくつかの異なる方法で構築および保存できます。または、外部ソースのホストのリストを取得するインベントリ スクリプトを介して動的に生成することもできます。
インベントリ リストの一部として変数を指定することもできます。インベントリは最終的には、自動化したいもののリストです。
[webservers]
192.168.20.1
192.168.20.2
192.168.20.4
[dbservers]
172.17.1.56
172.17.1.57
タスク
Ansible Playbook の実行タスクで再生されます。このタスクは、ansible モジュールの実行を担当します。一度に実行できるタスクは 1 つだけであり、タスクは順番に実行されます。彼らのタスクは YAML で書かれており、これは英語によく似た言語です。
例: install package_name、Update software_name など。以下は、httpd をインストールする Ansible Playbook のタスクの例です。
tasks:
- name: Install httpd Package
yum: name=httpd state=latest
ハンドラー
ハンドラーは特別な種類のタスクです。
これらはタスクによってトリガーでき、プレイの終了時に 1 回実行されます。これは、構成ファイルに変更があった場合に通知を送信するために使用されます。たとえば、Apache がインストールされたらサービスを開始するように通知します。 「notify」構文はハンドラーの呼び出しに使用されます。以下は、Apache を再起動するハンドラーの例です。
---
- hosts: all
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
最初の Ansible プレイブックを作成して実行する
プレイブックの書き方を説明します。すべてのプレイブックは上部の 3 つのダッシュ (—) で始まります。
Ansible Playbook で最初に言及するのは、Playbook を実行するホスト マシンです。
次に、事実を収集することで変数について言及できます。次に、実行したいさまざまなタスクについて言及できます。ここで、タスクは作成したのと同じ順序で実行されることに注意してください。たとえば、最初にソフトウェア A をインストールし、次にソフトウェア B をインストールする場合、Playbook に記述された最初のタスクがソフトウェア A をインストールすることであり、次のタスクがソフトウェア B をインストールできることを確認してください。
次に、下部にハンドラーがあります。ハンドラーもタスクですが、違いは、ハンドラーを実行するには、タスクのリストにある種のトリガーが必要であることです。
Ansible Playbook を作成してホストに nginx をインストールして起動する方法を説明します。
Ansible Playbook を作成するための YAML コードを配置する .yml ファイルを作成します。
gedit nginx.yml
このファイルに以下の YAML コードを記述し、ファイルを保存します。
---
- hosts: Client
sudo: yes
vars:
- server_port: 8080
tasks:
- name: Installs nginx web server
apt: pkg=nginx state=installed update_cache=true
notify:
- start nginx
handlers:
- name: start nginx
service: name=nginx state=started
上記の YAML ファイルは
hosts
で始まります。この Playbook をクライアント マシン (Client) で実行したいと考えています。クライアント IP アドレスは
/etc/ansible/hosts
ファイルにすでに保存されています。
次の行では、
sudo
権限でタスクを実行できます。
次に、このプレイブックの変数として server_port を定義しました。
次に、この Ansible Playbook の最初の タスクとして 、Nginx Web サーバーをインストールします。このタスクには 通知 パラメータもあります。これは、このタスクの後にハンドラが実行されることを意味します。
最後に、クライアント マシンで nginx を起動する ハンドラー を作成しました。
Ansible プレイブック内の YAML コードが理解できたので、プレイブックを実行してみましょう。以下は、Ansible Playbook を実行するための構文です。
ansible-playbook file_name.yml
ここで、nginx をインストールして起動するために作成した ansible プレイブックを実行します。
root@:/home/# ansible-playbook nginx.yml
PLAY [Client] ******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node1]
TASK [Installs nginx web server] ***********************************************
changed: [node1]
RUNNING HANDLER [start nginx] **************************************************
ok: [node1]
PLAY RECAP *********************************************************************
node1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
以下のコマンドを実行して、nginx サーバーがインストールされ、ansible Playbook によって正しく起動されたかどうかを確認します。
root@:/home/# ps waux | grep nginx
root 3021 0.0 0.0 77676 1516 ? Ss 15:27 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
結論
以上、Ansible プレイブックについてでした。この記事が、Ansible プレイブックを作成して実行する方法を学ぶのに役立つことを願っています。ロール、Jinja2、ルックアップ、フィルター、カスタム モジュールなど、Ansible の高度なトピックを学びたい場合は、この コース を確認してください。