この記事はAnsible Advent Calender 2017の12/11(月)の記事です。
12/11中に上がってなかったらすみません。
今回は、僕自身がAnsibleのAの字も知らないところから試行錯誤を繰り返し、なんとなく掴めてきた所感を共有していこうと思っています。
やらないこと
- インストール方法
- 実際にansibleを利用して一つ環境を作ってみる、という意味でのチュートリアル
- 複雑な構成の実現方法
上記を見るとわかりますが、概ね何もやりません。
「何もAnsibleを知らない人が、調べ始める前に読むと少し助けになる」くらいのものにするのが目標です。
そもそもAnsibleって何
Infrastructure as a Codeなんて呼ばれたりする構成管理ツールの一つです。
構成管理ツールと言われると複雑そうですが、実際は対象のサーバへssh接続してコマンドを実行しているだけのシンプルなものです。
また、実行ファイルの書式もyamlなので、小さい単位から触るならとっつきやすいものではないでしょうか。
SI経験のある自分的には**『秘伝の手順書』に記載されている手順を自動で実行してくれるツール**という理解がしっくりときました。
Ansibleは何をしているの
Playbookに定義されたRoleやTaskを愚直に一つずつ実行しています。
解説
- Playbook -> RoleやTaskを並べて、最終的なサーバー構成を定義するもの
- Role -> 自由な範囲でTasksをまとめたもの(大体は一つのアプリケーションをインストールするための一連の範囲 -> 一つのアプリケーション単位でまとまっていると再利用しやすいので)
- Task -> Ansibleの各モジュールを利用して、サーバーの状態を定義するもの
モジュールというのはAnsibleが用意してくれている機能です。用途に合ったモジュールを用いることで、いい感じにやりたいことを実現するコマンドを実行してくれます。
(例えば、yum
モジュールはyumによるパッケージのインストールやアンインストールを実行してくれますし、file
モジュールは指定したパスへの、ファイルやディレクトリの配置を行ってくれます。)
yumモジュールを利用したgit
をインストールされた状態にするためのTaskを紹介します。
- name: Install Git from yum
become: true # ←は「sudoで実行するよ」って感じのオプション
yum:
name: git
state: present
yum
モジュールのオプションとしてname
でパッケージ名を指定し、state
で状態を定義しています。
state
がAnsibleを理解するための肝となるオプションで、その名の通り「状態」を指定しています(**「gitのインストールを実行する」という指示ではなく、「gitがインストールされた状態でいてね」**という指示になっているということを強く意識してください)。
上でわざわざ「インストールされた状態にするためのTask」と書いたのもそれが理由です。
このように状態を定義することで、複数回このTaskを実行した場合、初回は「gitがインストールされてないからインストールを実行」、2回目以降は「gitがインストールされている状態だからスキップ」という挙動になります。つまり、何回実行しても状態が担保されています。
これがAnsibleの特徴である冪等性です。
冪等性ってなんなの
Ansibleに関して言えば、何度実行してもサーバーの状態が変わらないことを指します。
以下の記事でわかりやすく書かれています。
https://dev.classmethod.jp/server-side/ansible/ansible_playbook_with_idempotence/
まとめ
- 「このコマンドを実行してね」ではなく「この状態になっていてね」というようにPlaybookを記述し、Ansibleを実行すれば、その状態になったサーバーが出来上がる。
- Playbookへ記述された一つ一つの状態の構成を記述したものがTaskである
- Taskを再利用しやすい単位でまとめたものがRoleである
この3点を意識すれば、Ansibleの理解へのとっかかりになるのではないかと思います。
終わりに
vars
とかwith_items
とか、構成を実現するための要素は色々あるのですが、その辺は割愛してもっとも基本的な要素を感覚的に紹介してみました。
気になる方はAnsibleタグから色々検索してみてください。
Ansibleの冪等性は幻とか色々言われてますが、無難な構成で使う分にはそんなに問題ないかなというのが、今のところの自分の気持ちです。
何より実際にサーバーがスパーンと設定されると気持ちいいし、初めて触れた構成管理ツールで愛着も出てきたので、これからも仲良くしていきたいと思っています。
qiita初投稿の記事は以上になります。
ここまで読んでいただき、ありがとうございました。
Ansible Advent Calendar 2017、12/12のエントリーは@hirofumihidaさんの記事です。 お楽しみに。