あなたが Ansible を使うべき n 個の理由
@garbagetown 「あなたが Ansible を使うべき n 個の理由」みたいなブログ記事書いてください!
— Kazuhiro Sera (@seratch_ja) 2014, 2月 18
と脅されたご要望頂いたので書いてみます。
背景
Ansible に手を出した背景は以下の通りです。
- 仕事で Redmine を立ち上げる機会が多く、初めの頃こそ色々と苦戦したものの慣れた
- いい加減もう飽きたし面倒くさいので他の誰かに押し付けたい
- Redmine のインストール手順はネット上に山ほど転がっているけど、プロキシ設定など環境依存の落とし穴にハマる人は自分を含め相当数いる
- いまどき Word でインストール手順書ってのもダサいしプロビジョニングツール使ってみよう
このため、「インターネットに接続するにはプロキシサーバを経由しなければならない企業 LAN 内の Windows 端末から一台の CentOS 仮想サーバに Redmine を自動的に構築できること」が要件でした。
一度に何台ものサーバをメンテナンスしなければならない方などには、以下の内容は不適切かもしれません。あらかじめご了承ください。
Chef
まずプロビジョニングツールと言えば Chef だろうと安易に手を出しましたが、上記のような要件に Chef があまり向かないのか、目的を果たせるようになるまで相当の時間を費やしました。
自分が Chef を難しいと感じた点は下記の通りです。
- Windows でよく分かっていない Ruby のプロダクトを試すこと自体がそもそも修羅の道
- 最初は Chef と Chef-solo の違いすら分からない
- gem の名前は chef-solo でコマンドが knife-solo とかいちいち混乱する
- cookbook と site-cookbooks の違いが何度やっても覚えられない
- Chef を紹介する記事の中には Chef-solo と Berkshelf で Vagrant provision するものなど、上記要件には不要な情報が含まれているものが少なくない
- vagrant-berkshelf や sahara など寄り道が多い
この辺りの苦難の過程は下記 URL にまとめてありますので、興味がある方はご参照ください。
ちなみに、opscode のレシピを利用するにはユーザ登録して鍵を設定する必要があるという記事をいくつか読みましたが、特に鍵を設定していなくてもレシピが落ちてくるような気がします。
また、Berkshelf も事前に berks install しなくても knife solo cook を実行すると勝手にレシピが落ちてくるような気がします。この辺りはまだよく分かっていないので、どなたかお暇があればコメント欄か Twitter などでご教授頂ければ幸いです。
Ansible
Ansible が気になったきっかけは、先日レポートを書いた nucon での @ikikko さんのセッションです。
はじめはヌーラボさんには Rubist より Pythonista が多いから Ansible なのかな、くらいに思っていたのですが、後日やはりヌーラボの @ussy さんと飲んだ際にも Ansible がよいと勧められたので、この二人が言うのだから間違いないだろうと試してみたところ、Chef と比べて以下のような点が自分には向いていました。
- 前述の要件に有用な情報が英語、日本語ですぐに見つかった
- ssh と python (2.6 以上) があれば動く
- いずれも大抵のディストリビューションにはインストールされている
- playbook は yaml なので python が分からなくても直感的に書ける
- 条件分岐やくり返しなどは Chef と比べると弱いが今のところ必要ない
- 1 name 1 action はやや冗長な気がする
- ディレクトリ構成を自由に決められる
- シンプルな場合は変数を playbook に含めてしまい、複雑な場合は vars ディレクトリを作るなど、柔軟に対応できる
- 先人達によるベストプラクティスも紹介されているので迷子にならない
下記のスライドも分かり易かったです。
なお、Chef と Ansible の比較は下記サイトにもまとまっています。
また、Ansible も Chef 同様 Windows から動かすのは修羅の道なので、やはり Vagrant 上の Linux から実行するのですが、個人的には Windows 上の Vagrant を Ansible でプロビジョニングする手段が見つかったのも大きかったです。
これで Windows 上の Vagrant に ansible 等が入った Ubuntu を自動的に構築することができるようになりました。
これまで Windows 上に Linux 環境が欲しいときは適当に仮想マシンを立てて、適当に拾ってきた zshrc を使ったりしてきましたが、これを機にいつでも使い慣れた Ubuntu が手に入るよう playbook を育ててみようと思います。
まとめ
理由が何個あるかきちんと数えていませんが、Chef に疲れたひとは Ansible を試してみるといいと思います。