簡単!今どきのVagrant+ChefSolo入門(2014年9月版)

「今どきの」とか「モダンな」とかは、この変化の激しいWebの世界で言うべきじゃない気がする@DQNEO です。こんにちは。 でもタイトルに日付を入れておけば大丈夫ですね。

最新のVagrant/Chef事情を踏まえて、新しい入門記事が求められている気がしたので書いてみます。

ホスト環境について

Windowsをホストマシンとして使うのは茨の道なのでお勧めしません。
たいていのツールはMac向けに作られており、Windows対応はたいてい後回しにされます。
Windowsだけで発生するバグとかエラーもいっぱいあります。
私はWindowsでのBerkshelfのインストールの難しさに嫌気がさして WindowsからMacBook Airに乗り換えました。

VagrantとVirtualBoxをインストール

普通にインストーラでインストールすればOKです。

ChefDKをインストール

簡単!MacOSXやLinuxにChef,Knife,Berkshelfを一発でインストールしてくれるChefDKの紹介
これ一発で、 Chef,Berkshelf,foodcriticなどcookbook開発に必要なもろもろツールをインストールしてくれます。
(ただし、あくまでホストマシンにこれらが入るだけです。ゲストマシンにChefを入れる作業は別途必要です。後述。)

Vagrant Pluginをインストール

プラグインをやたらめったら入れる必要はないですが、この2つは入れておきましょう。
$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-vbguest

Vagrant CloudからBoxを探して使う

http://www.vagrantbox.es/ のリストを使ったり vagrant box add するのは古いやり方です。
今どきは box add する必要はほとんどありません。

https://vagrantcloud.com/ から適当なBoxを探して、Vagrantfileに下記のように書くだけです。
config.vm.box = "chef/centos-6.5"
これで vagrant upすれば、vagrantcloud.com からBoxファイルを自動でダウンロードしてくれます。
(同時にローカルにキャッシュされて、2回目以降はキャッシュが使われるので高速です。)

vagrant upしてchef-soloで"hello world"するまで

以上のインストールができたところで、早速 hello worldする レシピを作って vagrant upまでやってみましょう!
作業用ディレクトリを作る
$ cd /tmp
$ mkdir vgtest
$ cd vgtest
$ vi Vagrantfile
Vagrantfileを作成。下記のように記述。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.5"
  config.omnibus.chef_version = :latest

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "./cookbooks"
    chef.add_recipe "hello"
  end

end
$ mkdir -p cookbooks/hello/recipes/
$ echo "log 'hello world'" > cookbooks/hello/recipes/default.rb
これで準備はできました!
起動してプロビジョンする
$ vagrant up
下記のようなログが出れば成功です!
(途中、"SSL validation of HTTPS"のような警告が出ますが無視して大丈夫です。)
==> default: [2014-09-23T16:58:09+00:00] INFO: *** Chef 11.16.2 ***
==> default: [2014-09-23T16:58:09+00:00] INFO: Chef-client pid: 2251
==> default: [2014-09-23T16:58:12+00:00] INFO: Setting the run_list to ["recipe[hello]"] from CLI options
==> default: [2014-09-23T16:58:12+00:00] INFO: Run List is [recipe[hello]]
==> default: [2014-09-23T16:58:12+00:00] INFO: Run List expands to [hello]
==> default: [2014-09-23T16:58:12+00:00] INFO: Starting Chef Run for localhost
==> default: [2014-09-23T16:58:12+00:00] INFO: Running start handlers
==> default: [2014-09-23T16:58:12+00:00] INFO: Start handlers complete.
==> default: [2014-09-23T16:58:12+00:00] INFO: hello world
==> default: [2014-09-23T16:58:12+00:00] INFO: Chef Run complete in 0.020542169 seconds
==> default: [2014-09-23T16:58:12+00:00] INFO: Running report handlers
==> default: [2014-09-23T16:58:12+00:00] INFO: Report handlers complete
なお、vagrant upがプロビジョニング(=ChefSolo実行)してくれるのは初回起動時のみです。 この後、レシピをいじってプロビジョニングを再実行したい場合は
$ vagrant provision
してください。
うまく動きましたか?
カテゴリ: