garbagetown

個人の日記です

あなたが Ansible を使うべき n 個の理由

脅されたご要望頂いたので書いてみます。

背景

Ansible に手を出した背景は以下の通りです。

  • 仕事で Redmine を立ち上げる機会が多く、初めの頃こそ色々と苦戦したものの慣れた
  • いい加減もう飽きたし面倒くさいので他の誰かに押し付けたい
  • Redmine のインストール手順はネット上に山ほど転がっているけど、プロキシ設定など環境依存の落とし穴にハマる人は自分を含め相当数いる
  • いまどき Word でインストール手順書ってのもダサいしプロビジョニングツール使ってみよう

このため、「インターネットに接続するにはプロキシサーバを経由しなければならない企業 LAN 内の Windows 端末から一台の CentOS 仮想サーバに Redmine を自動的に構築できること」が要件でした。

一度に何台ものサーバをメンテナンスしなければならない方などには、以下の内容は不適切かもしれません。あらかじめご了承ください。

Chef

まずプロビジョニングツールと言えば Chef だろうと安易に手を出しましたが、上記のような要件に Chef があまり向かないのか、目的を果たせるようになるまで相当の時間を費やしました。

自分が Chef を難しいと感じた点は下記の通りです。

  • Windows でよく分かっていない Ruby のプロダクトを試すこと自体がそもそも修羅の道
    • RubyInstaller for WindowsCygwin などでがんばっても徒労に終わることが多い
    • Windows 上に Vagrant で Chef-solo 実行環境を作るのが近道
      • Vagrant 自身が Ruby を持っていて仮想マシンのパスに追加するので便利かと思いきや 1.8 で古い
      • Berkshelf は 1.9 以降でないと動かないので結局 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 と比べて以下のような点が自分には向いていました。

下記のスライドも分かり易かったです。

なお、Chef と Ansible の比較は下記サイトにもまとまっています。

また、Ansible も Chef 同様 Windows から動かすのは修羅の道なので、やはり Vagrant 上の Linux から実行するのですが、個人的には Windows 上の Vagrant を Ansible でプロビジョニングする手段が見つかったのも大きかったです。

これで Windows 上の Vagrant に ansible 等が入った Ubuntu を自動的に構築することができるようになりました。

これまで Windows 上に Linux 環境が欲しいときは適当に仮想マシンを立てて、適当に拾ってきた zshrc を使ったりしてきましたが、これを機にいつでも使い慣れた Ubuntu が手に入るよう playbook を育ててみようと思います。

まとめ

理由が何個あるかきちんと数えていませんが、Chef に疲れたひとは Ansible を試してみるといいと思います。