Ansibleは要領よく学習すれば30分くらいでそこそこ使えるようになります。
この記事も極力短くまとめます。
Ansibleの知識の足場
Ansible学習をする上で最初に知っておくべき最低限の知識は以下になります。
- Playbookと言うものがあり、それには「どのサーバーで何を実行するか」を記述する。Ansibleでは殆どの時間をこれを書くことに費やす。
-
ansible
コマンドとansible-playbook
コマンドがあり、Playbookを実行するのに使うのは後者。前者の出番は少ない。 - Playbookの例がLAMP構成の例にあり、これを見るだけで大体のイメージがつかめる。
- Playbook内でモジュールというものを多用するが、それについてのドキュメントはAnsible Docs - All Modules -にある。
実際のPlaybookを見ながら理解する
最低限の知識の足場ができたら、実際の例を見ましょう。
LAMP構成の例でシンプルなPlaybookが見れます。
コードをざっと眺めると以下のことがわかるはずです。
- Playbookの実体はいろんな設定ファイルが格納されたフォルダである
- Playbook内のhostsファイル内に対象サーバーをグループごとに書く
- Playbook内のrolesディレクトリに各ロールごとのフォルダが有る
- Playbook内のsite.ymlにはどのホストがどのロールを持つかなどの設定を書く
次に、タスクを見てみましょう。
roles/common/tasks/main.ymlを開くと、サーバー上で実行したいことがYAMLで書かれてます。
このファイルを見る上では以下を知っておくといいです。
- 各処理にnameを書く(Playbook実行時に表示されるのでわかりやすい文言で)
- tagsは処理をグループ化するためだけもので、無くてもOK(一部の処理だけを実行したい場合に使う)
- notifyは後述のハンドラーを実行したい時に書く
- yum, template, serviceはモジュールと呼ばれるもので、実際に行いたいことを記述するために使う。モジュールの使い方の詳細は毎回、上で紹介したドキュメントを見ながら行う。
- その他のregisterとかchanged_whenとかは使う機会が少ないものなので、後々ドキュメントを見て勉強すればいい
次に、ハンドラーを見てみましょう。
roles/common/handlers/main.ymlにはサービスを再起動するための記述があります。
タスクを実行したあと、サービスを再起動したい時などはこんな風に書いて、nameで指定した名前を使ってタスク内から呼び出せます。
次に、テンプレートを見てみましょう。
roles/common/templates/ntp.conf.j2はntp.confの元になるテンプレートです。Ansibleではjinja2というテンプレートエンジンが使われていて、{{ ntpserver }}
という部分に変数が展開されるようになっています。
次は、変数について。
group_vars/allを見ると上のテンプレートで使われていた変数が定義されているはずです。
見るとわかりますが、変数はロールごとに分けて定義できます。
その先の学習
以上でなんとなくAnsibleを理解できたと思います。
上の例より複雑な構成のサーバー群を構築しようと思ったら、もう少し学習が必要だとは思いますが、基本的には必要に応じてAnsible Docs - All Modulesでモジュールの使い方を調べたり、ansible-examplesを参考にいろんな場合の記述方法を覚えていけば宜しいかと思います。