プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

VirtualBox + Vagrant + Ansibleを使って『Pythonプロフェッショナルプログラミング』で使う開発環境(に近いもの)をほぼ自動で構築するPlaybookを作ってみました

最初に結論を書くと…

  • タイトルの通り、VagrantとAnsibleを組み合わせて(ほぼ)自動で『Pythonプロフェッショナルプログラミング』で使う開発環境を構築できるお試しセットを作ってみました。
  • URLはこちら
  • お試しセットなので、VirtualBox, Vagrant, Ansibleさえ入れれば、READMEの指示通りすぐに試すことが出来ます*1
  • AnsibleのPlaybookとか自分で考えなくてもとりあえず動く様子を見られます。
  • Ansibleじゃなくてもいいので、これをきっかけにしてChefとかPuppetとか(或いはレイヤーが違うけど)FabricやCapistrano、Cinnamonとかに興味を持ってもらえると嬉しいですね。
  • もっと増えろ、Ansible関連の記事!!

ということをこれから書いていきます。

前置き

このごろChefやPuppetなどの構成管理ツールやサーバーの状態をテストするserverspecなど、インフラ部分の環境構築・運用に関する熱が高まりつつありますね。

そんなビッグウェーブに乗り遅れまいと個人的に少しずつ勉強してきたのですが、いかんせんVirtualBoxの中にLinuxサーバーを作ったことすらあまり無いというインフラ超初心者の状態だったため、

  1. Vagrantの導入でまず盛大に躓き
  2. Fabricを導入してやっと自動化の便利さが何となく理解できてきて
  3. fabtoolsとcuisineを使うことでFabricをもっと便利に使えるなぁ、いいなぁと思えるようになり
  4. でも冪等性を自分で確保するように気をつけてやるのは大変だ…ということを何度も環境を作っては壊しながら思うようになり、
  5. それならサーバー側に特別なソフトを入れる必要が無いというAnsibleを勉強も兼ねて使ってみるかと思ったら、Vagrantとの連携の仕方がさっぱり分からずに死亡

といういくつも地雷を踏みながら、どうにかVagrantとAnsibleを連携させて動かせるようになりました。

で、こういった経験から

「同じように嵌まっている人、もしかしたら結構いるんじゃないか?」

と思ったので、ちょこちょこ手直しして「VagrantとAnsibleを連携させて開発環境を自動構築できる例」を公開できるように整えました。

で、これはそのリポジトリの紹介記事です。

VagrantとAnsibleを連携させてできる例の紹介

肝心の例ですが、これです。

https://github.com/takuan-osho/ansible-vagrant-pypro-skel

各種注意事項とか作業手順、注意事項はREADMEにある程度書いたので、すぐに試すことが出来ると思います。

Ansibleとかを試してみたい人向けに作ったつもりの割には作りが荒くて問題が起きそうな気もしていますが、"Done is better than perfect"という言葉を思い出したので、とりあえず公開してみることにしました。

今後私のAnsibleの学習が進むにつれてちょこちょこ手直ししていくかもしれません*2

注意事項

上記のリポジトリを試すに当たり、現時点*3でREADMEに書けなかった注意事項として以下の点があるので注意して下さいね。

  • Vagrantのboxに「precise64」という名前のboxが無かったら勝手にVagrantup.comの所からboxのダウンロードを始める、ということ
    • こういうやり方になっている理由はREADMEにも書いたとおり、Ansibleを体験するまでになるべく手間のかからないようにしたからです。
    • なので、ダウンロードを勝手にされるのが困るという方は以下のような感じにVagrantfileの中を変更して下さい。
  config.vm.box = "precise64"

  (中略)

  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

となっているところを

  # PC内にVagrantがUbuntu系のboxをキャッシュしているなら、そのboxの名前を調べてその名前を入れる。
  # boxの名前の調べ方は'vagrant box list'と打てば分かるはずです。
  config.vm.box = "ubuntu-12.04.1-server-amd64" # これは一例

  (中略)

  # config.vm.box_urlの箇所は削除するか、コメントアウトする
  # config.vm.box_url = "http://files.vagrantup.com/precise64.box"

みたいな感じで変更すれば、指定したboxを使うように変更してくれるはずです。

  • (上記の注意事項と関連して)Vagrantがキャッシュしているboxの中に「precise64」という名前でUbuntu以外の別のdistributionのboxが入っていたらおそらく上手く動きません。
  • VirtualBoxインスタンスのメインメモリは1024MBで作られるようになってます。
    • vagrant initで生成されるVagrantfileの中のコメントアウトされた部分をそのまま使っているのでこの数字になってます。
    • それが嫌な人はVagrantfileの中の該当箇所の数字*4をいじって下さい。

Ansibleを使ってみて思ったこと + Ansible関連で非常に参考になった記事の紹介

Ansibleを使ってみた思ったことを列挙すると

  • Chefとかに比べるとAnsible関連の日本語記事が少ない…
  • 日本語記事が少ないから初心者が躓きやすくないか?という印象
  • というわけで、もっと増えろ! Ansibleの日本語記事!!

です。

何で今回ChefとかPuppetではなくAnsibleを使ったかというと

  1. Chefとかを導入するのが難しそうに感じたから*5
  2. ChefとPuppetが盛り上がっているので、対してそれほど盛り上がってないように見えるAnsibleを試してみることで、構成管理ツール群雄割拠の時代とか来たら面白いなー、とか考えたから。

ってな感じです。まあ、判官贔屓みたいな物です、多分。

ChefとかPuppetと比べてどうこうっていうことは言えませんが、今回Ansibleを試してみて思ったのは「個人が軽く使う分には割といい」ということでした。

サーバー側に特別なソフトを入れる必要が無いので、その手間がかからないところもいいですね。

大規模になってくると通用するのかどうかとか、そういったことの調査は他の人に任せます。

最後に、今回Ansibleを無事動かすのに辿り着くまでに非常にお世話になった記事群を紹介して終わりにしたいと思います。

というわけで、誰かもっとAnsibleを使い倒して私に教えてください(他力本願)。

*1:ただ、READMEにも書いたように、検証した環境が限定されているので、例えばWindowsでちゃんと動くかは保証できません。

*2:やる気が持続したら、の話しです。

*3:この記事を最初に書いた2013/05/17 13:35時点

*4:DSLなので何となくそれを指定してるところは分かるはずです

*5:結局Ansibleを使うのにもかなり手間かかってしまいましたが…