• 自動化
  • プログラミング
  • IoT
  • サーバー
  • その他

【ゼロから始めるAnsible 第2回】入門編

  • YAML
  • Ansible
  • プログラム コード生成
  • Python

はじめに

前回のブログでは、Ansibleがどんなツールなのかをご紹介しました。
今回は、「実際にどうやって使うのか」「Playbookってなに?」「構成はどうしたらいいのか」を、具体例を交えてわかりやすく解説いたします。

Playbookについて

Ansibleでは、サーバに対して行う操作を「Playbook」というファイルにまとめます。
Playbookは、ソフトウェアのインストールやサービスの起動、設定ファイルの配置など、処理の順序を記述する「設計書」のような役割を持ちます。
例えば、Apacheをインストールして起動するPlaybookは以下のようになります。

---
- name: ‘Apacheインストールと起動’
  hosts: all
  tasks:
  - name: ‘Apacheインストール’
    yum:
      name: httpd
      state: present

  - name: ‘Apacheサービス起動’
    service:
      name: httpd
      state: started

このように、どのホストに対して、どんな処理を、どの順番で行うのかをPlaybookに記述します。
何度実行しても常に同じ結果が得られるため、無駄な作業が行われないのが特長です。
この性質を「冪等性(べきとうせい)」と呼びます。

Roleについて

プロジェクトが大きくなり設定変更に必要な処理が増えてくると、Playbookが複雑になりがちです。
そこで役立つのが「Role」です。Roleは、処理内容を機能ごとに整理して再利用しやすくする仕組みです。
タスク、テンプレート、変数などを部品化して管理することで、保守やチーム開発がぐっと楽になります。
例えばApacheの設定を行うRoleは、以下のように構成されます。

roles
└ ApacheInstall
├─ tasks
│ └── main.yml
├─ vars
│ └── main.yml
└─ defaults
└── main.yml

PlaybookからこのRoleを呼び出すだけで、必要な処理をまとめて実行できます。
呼び出す際にはPlaybookに以下のように記載します。

---
- name: ‘Apacheインストールと起動’
  hosts: all
  tasks:
  - name: ‘ロールの呼び出し’
    include_role:
    name: ApacheInstall

Inventoryについて

Playbookでは、どのサーバに処理を実行するのかを指定する必要があります。
そのために使用するのが「Inventory(インベントリ)」ファイルです。
操作対象のサーバをグループごとにまとめた一覧のようなもので、以下のように書きます。

[web]
192.168.0.10
192.168.0.11
[db]
192.168.0.20

上記のようにグループ化しておくと、対象を分割して実行ができるので便利です。
例えば、Playbook内で「hosts:web」と指定すると、webグループに所属するサーバにのみ処理を実行し、dbグループに所属するサーバに処理を実行しないよう対象を指定して条件を分けることができます。

---
- name: ‘Apacheインストールと起動 – webサーバのみ’
  hosts: web   #ここで対象を指定できる
  tasks:
  - name: ‘ロールの呼び出し – webサーバのみ’
    include_role:
    name: ApacheInstall

ディレクトリ構成例

私が参画しているプロジェクトでは、以下のような構成でAnsibleを運用しています。

shizai 
├─ Apache_Playbook.yml
├─ inventory
│ └── hosts
└─ roles
  └── ApacheInstall


Inventory、Playbook、Rolesの関係性のイメージは以下です。

Playbook、インベントリ、ロールを整理しておくことで、メンバー間の引継ぎや修正がスムーズになります。

まとめ

今回は、Ansibleを始めるうえで必ず出てくる「Playbook」「Role」「Inventory」といった基本構成についてご紹介しました。
どれも最初は聞きなれない言葉かもしれませんが、使いながら少しずつ慣れていけば、強力な自動化の武器になります。
次回は、Playbookの書き方についてご紹介する予定です。どうぞお楽しみに!

新着記事一覧へ