Ansible もくもく会 2019.04 in 甲府 参加レポート

Ansibleユーザー会[^1] さん主催の Ansible 勉強会が自社で開かれる運びとなり、せっかくの機会なので参加してきました。
https://ansible-users.connpass.com/event/124686/

もくもく会とは、集まって各自のペースでもくもくと作業や勉強を進める会のことを指すようです。


会場は甲府駅から徒歩15分ほどの位置にある、株式会社アイティードゥ。
主にインフラ系の業務を請け負う会社です。だいたい月イチで公開の勉強会に会場を提供しています。


#Ansible とは
・サーバ、ネットワーク機器の構築・運用作業を自動化することが出来るツール。
・playbook と呼ばれる YAML ファイルに あれこれやっておいてほしいことを書いて実行すると自動的に作業をやってくれる。
　具体的には、パッケージインストール、ファイルの置換、コマンドの実行など。
・前提として必要なのは Python 環境と、 SSH 接続が行えることだけなので仮想マシンやクラウド環境とは大変相性が良い。

#もくもく会
AWS 上の学習環境で各自実習を行いました。
https://github.com/network-automation/linklight/blob/master/exercises/ansible_engine/README.ja.md

Ansible の開発を手掛ける RedHat 株式会社[^2]さんの方々を含むメンターさんにすぐ質問出来る体制で勉強できることも、Ansible もくもく会に参加すべき理由の一つです。



Ansible に触れたのはこれが初めてではなく、書籍やweb上のチュートリアルによって既に基本的な使い方については理解していたのですが、まず最初にこの Ansible もくもく会から Ansible に出会えていれば、と思えるほど良い学習環境でした。

Ansible の実行環境を用意するには複数台のマシンの用意とネットワーク設定が必要で、NIC への IP アドレスの割り振り、公開鍵認証のための鍵ファイルの設置、権限の確認……と、SSH 接続を確立するまでの道のりは結構な手間です。まず環境を作る段階でたくさんの引っ掛かりがあり、ツールの勉強に行きつくまでに疲弊しきってしまうこともあります。その点、前提がきちんと整った状態で Ansible の学習を即座に開始できるのは、モチベーションの維持という観点における大きな利点だと思います。

複数台のマシンへの Apache のインストールとサービスの起動を例にしたデモンストレーションは Ansible の概要を掴むために大変分かりやすい一例でしたし、そこからプレイブックを少しずつ拡張する流れはプレイブックの構造を理解する大きな助けになりました。

そのおかげで、 role による playbook の分割と、各ディレクトリの役割についてもすんなりと受け入れることができました。
Ansible は roles ディレクトリ下に規定の名前のディレクトリを作ることによって、 playbook を分割することが出来ます。どういったディレクトリ構造で分割すれば良いのか理解するには、まず playbook の構造について理解することが近道のようです。

今回の実習で拡張、分割した playbook のディレクトリ構造は最終的にこうなりました。

```
#tree -F
.
 `-- roles/
    |-- apache-simple/
    |   |-- README.md
    |   |-- defaults/
    |   |   `-- main.yml
    |   |-- handlers/
    |   |   `-- main.yml
    |   |-- tasks/
    |   |   `-- main.yml
    |   |-- templates/
    |   |   |-- httpd.conf.j2
    |   |   `-- index.html.j2
    |   `-- vars/
    |       `-- main.yml
    |-- hosts
    |-- site.yml
     `-- site.yml.bk
```


site.yml を実行することで、分割した playbook が実行されます。
site.yml の内容は以下の通りです。

```yml:site.yml
---
- hosts: web
  name: This is my role-based playbook
  become: yes

  roles:
    - apache-simple
```

ざっくりとこの playbook の意味を言えば、「/roles/apache-simple 下を読み込み、対象サーバ web の root ユーザとして実行します。」になります。
各ディレクトリ下の main.yml は自動的に読み込まれるようになっています。

------
### roles 下の各ディレクトリの役割

- defaults

変数のデフォルト値を定めます。他に設定されていない場合このディレクトリ内の値が使われます。
Ansible の変数は設定した場所によって優先度が決まっており、このディレクトリで定められた変数は最も優先度が低く設定されます。

- handlers

実行制御を行うためのディレクトリ。
例えば、「このタスクによる変更が発生した時だけ、handlers 下の特定のタスクを実行する」という条件分岐を設定することが出来ます。

- tasks

対象サーバにやらせたいことを記述するためのディレクトリ。パッケージインストールやファイル設置など。

- templates

template モジュールでファイルを設置する場合、その内容をこのディレクトリ内のファイルに記述します。
Jinja2 というテンプレートエンジンが使われており、拡張子は .j2 になります。

- vars

ロール内で使われる変数を定義するディレクトリ。

------

role による playbook の分割は、他の人によって書かれた playbook の再利用や、自身の playbook の共有に便利そうです。
ansible-galaxy という playbook やディレクトリ構造の共有が出来る場が用意されているので、組み合わせることで強力な運用が期待できるのではないでしょうか。


#終わりに
良い学習の場を設けてくださった主催のAnsibleユーザ会の皆さん、RedHat 株式会社の皆さん、そして勉強会後の Ansible 飯[^2]で楽しい時間を共有していただいた参加者の方々にこの場で改めてお礼を申し上げ、レポートの締めとさせていただきます。

金精軒の寒天信玄餅とたけのこの里を大変おいしくいただきました。また次のAnsible 飯[^3]でお会いしましょう。

[^1]: Ansible 関連ツールを用いた技術情報、成果等を共有するユーザコミュニティ。
[^2]: クラウド技術サービスを中心とした会社であり、またLinuxディストリビューションのRed Hat Enterprise Linuxを製品として販売・開発・サポートしている。(wikipediaより引用)
[^3]: Ansible ユーザ会有志による食事会のこと。

#リンク
Ansible ユーザー会
https://ansible-users.connpass.com/
株式会社アイティードゥ
https://c.itdo.jp/
RedHat株式会社
https://www.redhat.com/ja/global/japan