増子良太のブログです

増子良太が書いているブログです。テーマをしぼらず、思いついたものをただひたすら書いていきます。

Vagrant+Chef soloで開発環境をバッチリ作っちゃおう!

   

お久しぶりの記事更新です。

最近仕事では作業の自動化というものに注力してやっております。
最近何やらVagrantとか良く聞くけど、なんとなく便利そうって思うくらいのレベルでした。

ぶっちゃけ、作って壊せる仮想環境なんて、virtualboxでイメージ作っておけば、なんら変わりないものだと思っておりました。

そんな考えを持つ人に送る、VagrantとChef Soloを使って幸せに開発環境が作れるのはなんでかというところをご説明したいと思います。

作って壊せる、それがVagrantだ!!

なんだよ、結局それかよって思った皆様。もう少しお付き合いください。

先ほども行った通り、VagrantでできることはVirtualBox単体でもできます。しかしながら、その作業を簡単に、効率的に行う事ができるのが、Vagrantです。

例えばBoxというファイルを使います。これは仮想サーバのイメージみたいなものです。このBoxを元に、開発環境を構築するわけです。

でも、開発環境を作ったら他の人にも配ったりする時があります。

そうした時、通常のVirtualBoxのイメージを作って渡す方法だと、下記のような手順になるのかと思います(実際VMWareでしかやったことないですが)

  1. 現在のイメージをコピーし抜き出す
  2. イメージを他の人に渡す
  3. 渡された人はVirtualBoxの中にイメージ元に仮想環境を作成
  4. ネットワークの設定などローカル側を整備
  5. 仮想マシンを起動し、コンソール上からネットワークの設定などを変更
  6. その他アプリケーションでIPなどが書いてある場合はその辺も修正

今まではこの手順は普通だと思ってました。一番面倒なのが、実験的に仮想マシンをコピーして2環境作成したとき、IPアドレスは固定で割り当てたいけど、変更するとネットワークの設定やらを色々変更しなきゃならない。

しかも最初はサーバ側のネットワークが設定されていない状態だから、コンソールしか使えなくて、非常に不便でした。

ところが、Vagrantではこの設定がすごく簡単にできるんです!

仮想マシンを立ち上げる前にVagrantfileに下記1行追加するだけ(コメントアウトしてあるのをインしてやるだけ)

これだけでローカル側、サーバ側の両方のネットワークを192.168.33.10でアクセスできるようにしてくれます。

この手順を省略してくれるだけでも使う価値があるかと思います。

他の人に仮想環境渡す場面がないよって人でも、実験的に仮想環境をコピーして、その環境で色々な事をする場合、すごく便利になると思います。

さらに!

Chefを使うともっと楽しい!大体のサイトはChef(knife)を作業しているPC(Mac)とかにインストールして、仮想サーバにレシピを転送、実行するってやり方が多いです。

しかし、実際にやってみたところ、Windowsからそれをやろうとすると、まず転送でknifeが内部的にrsyncコマンドをしているから、rsyncが使えるようにインストールしなければなりません。Chefとknifeもインストールする必要があります。

これだと、たとえば新人さんが入ってきて開発環境作ってって時に手順が多くなります。

そこで、サーバ側にChefをインストールしておき、Vagrant(VirtualBox)から仮想サーバを起動した時にChefのレシピを実行するようにしてあげたら、すごく簡単にできました。

Vagrantには起動時に実行するprovisioning(プロビジョニング)というものがあります。ちなみにprovisioningという言葉の意味は、ユーザの需要を予測し、ユーザがすぐにサービスを使えるようにする行為の総称とのことでした。

まさにぴったりな言葉です。

言い換えれば下準備、初期設定のようなものでしょうか。

先ほども出て来たVagrantfileにChefの設定があります。その部分にサーバ側で作成したレシピの場所や実行するレシピの指定、実行する時に必要な変数定義などを記述することができます。

使用用途はやはり環境毎に変わってくる設定ファイルなどを書き換えたり、作成したりできるということにあります。

もちろんChefではyumからパッケージをインストールしたりもできますが、その部分まで書いてしまうとレシピが複雑になって、レシピのメンテナンスが大変なのと、一度仮想イメージを作成してしまえば、作業自体必要ないのであまり書く機会がないかもなと思います。

一番効果が期待できるのは、設定ファイルに記述があるエラーログのメール送信先の設定や、ホスト名などサーバによって変更する必要がある部分の変更です。Vagrantfile自体rubyで記述されており、上部でメールアドレスやIPアドレスの定義などしておけば、後で色々な箇所で使用できるので便利です。

食わず嫌いが多い僕は、Chefについても最初はサーバのインストール手順をソースコード化することが目的で、プログラマがいかに楽しくインフラ整備するかってことに注目したものなんだと思っていました。

仮想環境をチームのメンバーに渡すというときもそうですが、自分自身で実験的にコピーしてもう一つ立ち上げるなど、毎度毎度設定を変更するという手間がなくなるので、”作って壊せる”というキャッチコピーにも納得がいきます。

僕がもう少し付け加えるとしたら

作って試して気軽に壊せる

壊すって勇気いりますよね。でもこれなら、適当に作って、また作れるしいいやと気軽に壊せます。

あと便利なのは1つのイメージで複数の仮想マシンをいっぺんに作れちゃうところです。

Vagrantfileに下記のように書けば、同じイメージから2台の仮想サーバが作れます。

もちろんそれぞれのメモリ割当を変えたり、provisioningをするものとしないもの、IPアドレスを分けるなんてことも可能です。

例えばアプリケーションサーバを2台にするなんてことも簡単に実現できるわけです。もちろんVirtualBoxを動かしているホストマシンのメモリなどが多くなりますので、その分高スペックなマシンが必要となりますが、より本番環境に近い環境をローカルに再現することができます。

やったことはないのですが、こちらも通常のVirtualBoxでやろうとすると、イメージをインポートしてマシンを立ち上げてIPアドレスをネットワーク設定してそれぞれの環境毎の設定ファイルをalkrblanerbmaerbame9340gqhrmb()&)&aemr3q098409qtmabe:rmpaejrb[aerb

やってられません。気軽に作れません。

それが、できるんです、Vagrantならね。

 - その他