Vagrant + Chefの導入 vol.2

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

前回の記事ではVagrantの導入までが終わったので、今回はChefを導入してみます。

Rubyのインストール

ChefはRubyで動作するプログラムなので、Rubyをインストールしておく必要があります。Windows環境へのインストール方法はこちらを参照してください。バージョンについては、自分は1.9.3-p484を使っていますが、最新は1.9.3-p545なのでそちらの方が良いかと思います。
また、DevKitというものも必要となりますので、そちらもインストールしておきます。インストール方法はこちらを参照してください。

Chefのインストール

続いてはChefのインストールですが、まずは周辺プロダクトを整理してみます。

プロダクト名 概要
chef-solo chefに同梱されている単体で動作するプロビジョニングツール*1
knife-solo chefのcookbookを作るためのツール
Berkshelf chefで使うcookbookを管理するgem

Chefはクライアント・サーバによる集中管理方式でサーバの構成管理を行えますが、スタンドアロン方式も可能です。chef-soloはそのスタンドアロン方式用のツールです。次にknife-soloはknifeのプラグインでchef-soloで利用するレシピの雛形を作成したり、リモートでレシピを実行できるようにするためのサブコマンドが使えるようになります。Berkshelfはcookbookの依存関係を管理するツールらしいですが、ちょっとピンときません。ここは追々調べてみようと思います。

コマンドプロンプトで以下のコマンドを実行します。

gem install chef
gem install knife-solo

cookbookの作成

インストールが完了したら、vagrant initしたディレクトリに移動してknife soloを実行します。前回の記事の例だとC:\Users\m-namiki\Documents\20_vagrant\10_sandboxになります。

cd C:\Users\m-namiki\Documents\20_vagrant\10_sandbox
knife solo init chef-repo

実行が完了するとchef-repoというディレクトリが作成され、その下の階層は以下のようになります。

C:\Users\m-namiki\Documents\20_vagrant\10_sandbox>tree chef-repo
C:\USERS\M-NAMIKI\DOCUMENTS\20_VAGRANT\10_SANDBOX\CHEF-REPO
├─.chef
├─cookbooks
├─data_bags
├─environments
├─nodes
├─roles
└─site-cookbooks

次に簡単なレシピを書いてみます。chef-repoに移動して、knife cookbookを実行します。

cd chef-repo
knife cookbook create sandbox -o site-cookbooks

実行が完了するとsite-cookbooks以下にsandboxというディレクトリが作成され、その中にも色々なディレクトリやファイルが作成されます。

C:\Users\m-namiki\Documents\20_vagrant\10_sandbox\chef-repo>tree site-cookbooks
C:\USERS\M-NAMIKI\DOCUMENTS\20_VAGRANT\10_sandbox\CHEF-REPO\SITE-COOKBOOKS
└─sandbox
    ├─attributes
    ├─definitions
    ├─files
    │  └─default
    ├─libraries
    ├─providers
    ├─recipes
    ├─resources
    └─templates
        └─default

recipes\default.rbというファイルがインストールするパッケージなどを記述するファイルです。まずは簡単にiptablesを停止・無効化するレシピを書いてみます。

#
# Cookbook Name:: sandbox
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#

service "iptables" do
  action [:disable, :stop]
end

log "done iptables stop."

レシピの書き方等については伊藤直也さん(@naoya)の入門Chef Solo - Infrastructure as Codeを筆頭に、ググればたくさん出てくるのでここでは割愛します。そしてようやく次は実行ですが、残念、m-namikiは力尽きてしまった!ので、続きはまた今度。

*1:サーバー構築・管理を自動化するツール