ホーム テクノロジー DEVOPS タスクを自動化するための Ansible Playbook について学ぶ

タスクを自動化するための Ansible Playbook について学ぶ


タスクを自動化するための 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 の高度なトピックを学びたい場合は、このコースを確認してください。

「タスクを自動化するための Ansible Playbook について学ぶ」についてわかりやすく解説!絶対に観るべきベスト2動画

Ansible 利用その一歩先へ – Ansible Tower の使い方徹底解説!: レッドハット株式会社岡野 浩史
Ansible入門講座#7 – RoleによるPlaybookの部品化