ここまで準備すると、WindowsでもドットインストールさんのChef入門を試すことができます。
こちらで、基本動作を確認すると良いでしょう。

Chef入門 (全14回) – プログラミングならドットインストール

では、続きをやっていきます。

さくらVPSを想定した仮想環境を作成しよう

ここで、さくらVPSを契約しても良いですが、できるだけローカル環境で行う方が、セキュリティ的に良いので、Vagrantを使っていきます。

ホームディレクトリにvagrantdirディレクトリを作成して、さらにその中にsakuravpsディレクトリを作ります。
ディレクトリの場所や名前はお好みで良いですが、この記事ではそれで説明していきます。

$ cd
$ mkdir vagrantdir
$ cd vagrantdir
$ mkdir sakuravps
$ cd sakuravps

Boxを探して入れよう

現在、さくらVPSのデフォルトのOSはCentOS 6 x86_64なので、それに合わせることにします。

さくらVPSでは、OSを変更することができるので、入れたいOSがあれば、それに合わせても良いでしょう。

下記のサイトからVagrantのBoxを探します。

Discover Featured Vagrant Boxes

私は、一番文字列が近いdriebit/centos-6-x86_64を選びました。

Boxの起動と初期設定

こちらで、仮想環境を構築していきます。

$ vagrant box add driebit/centos-6-x86_64
$ vagrant init driebit/centos-6-x86_64

initをすると、そのディレクトリにVagrantfileができます。
起動する前に、アクセスできるようにアドレスを設定しておきましょう。

viなどのコマンドで編集すれば良いのですが、Windowsでフォルダを開いて作業するのも良いでしょう。

$ explorer .

Vagrantfileを開くと、以下の部分がコメントアウトされているので、外しましょう。

~/vagrantdir/sakuravps/Vagrantfile

   config.vm.network "private_network", ip: "192.168.33.10"

それは、Vagrantを起動します。

$ vagrant up

ChefSSHコマンドを使う場合、下記のようにすると便利です。
やっておきましょう。

$ vagrant ssh-config --host sakuravps >> ~/.ssh/config

これで、擬似さくらVPSが完成しました。

Chefを動かす

それでは、Chefを動かしていきましょう。

リポジトリの作成

まず、リポジトリを作成します。
名前は、chef-repoとしました。

$ knife solo init chef-repo

そうすると、こんな感じになります。

$ cd chef-repo
$ ls -la
drwxr-xr-x+ 1 morisan None  0 0月  00 00:00 .chef
-rw-r--r--  1 morisan None 12 0月  00 00:00 .gitignore
-rw-r--r--  1 morisan None 14 0月  00 00:00 Berksfile
drwxr-xr-x+ 1 morisan None  0 0月  00 00:00 cookbooks
drwxr-xr-x+ 1 morisan None  0 0月  00 00:00 data_bags
drwxr-xr-x+ 1 morisan None  0 0月  00 00:00 environments
drwxr-xr-x+ 1 morisan None  0 0月  00 00:00 nodes
drwxr-xr-x+ 1 morisan None  0 0月  00 00:00 roles
drwxr-xr-x+ 1 morisan None  0 0月  00 00:00 site-cookbooks

ざっと説明すると以下のようになります。

.chef 内部のknife.rbで、レポジトリ内のパスを管理
.gitignore Gitで管理しないファイルなどの管理
Berksfile Berkshelfで依存を管理
cookbooks サードパーティCookbookを入れる
data_bags Cookbookをまたいだデータを入れる
environments 開発/ステージング/本番などと分ける場合に使う
nodes Chefで反映させるマシン(ノードと呼びます)単位で管理する設定ファイルを入れる
roles WEBサーバー/DBサーバーなど、役割で設定を分けるファイルを入れる
site-cookbooks 自分たちのCookbookを入れる

ノードの設定

次にノードを設定します。
実行すると、nodesディレクトリにsakuravps.jsonが作成され、sakuravpsマシンChef Soloがインストールされます。

$ knife solo prepare sakuravps

ためしにrecipeを書いてみる

本格的にrecipeを書く前に、作業の流れを確かめましょう。

Cookbookの作成

testbookというCookbookを作ります。

$ knife cookbook create testbook -o site-cookbooks
$ cd site-cookbooks/testbook
$ ls -la
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 attributes
-rw-r--r--  1 morisan None  459 0月  00 00:00 CHANGELOG.md
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 definitions
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 files
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 libraries
-rw-r--r--  1 morisan None  280 0月  00 00:00 metadata.rb
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 providers
-rw-r--r--  1 morisan None 1464 0月  00 00:00 README.md
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 recipes
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 resources
drwxr-xr-x+ 1 morisan None    0 0月  00 00:00 templates

Cookbookを作成すると、このような構成になります。
ざっと説明すると、以下のようになります。

attributes recipeでは、変更がありそうな箇所を変数にしておきますが、そのdefaultの値を設定します
CHANGELOG.md Cookbookの変更の履歴(主にCookbookを公開する場合に使用)
definitions リソースを拡張する時に使用するようです
files リリースした静的ファイルを入れます
libraries 共通化したいRubyのコードを入れます
metadata.rb Cookbookのメタ情報を記載します(主にCookbookを公開する場合に使用)
providers LWRPsで使用※1
README.md 使い方を記載します(主にCookbookを公開する場合に使用)
recipes recipeを入れます
resources LWRPsで使用※1
templates 動的ファイルを入れます

今回は、強調したセル要素を使用しています。

実際にrecipeを記述

それでは、recipes/default.rbを開いて、WEBサーバー(Apache)をインストールするrecipeを書いてみます。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/testbook/default.rb

package "httpd" do
  action :install
end

次にrecipeをnodeに登録します。

~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.rb

{
  "run_list": [
  "recipe[testbook]"
  ],
  "automatic": {
    "ipaddress": "sakuravps"
  }
}

実行とエラー

それでは実行してみましょう。

cd ~/vagrantdir/sakuravps/chef-repo
$ knife solo cook sakuravps

実は、Cygwinではエラーになってしまいます。

ERROR: Net::SSH::Disconnect: connection closed by remote host

参考サイト通りに行うと解決できます。

Cygwinのknife solo cookがconnection closed by remote hostでコケル件

この設定が終わったら、気を取り直して、実行します。
このような感じになれば、インストール完了です。

$ knife solo cook sakuravps
Running Chef on sakuravps...
Checking Chef version...
(略)
Starting Chef Client, version 11.12.8
Compiling Cookbooks...
Converging 1 resources
Recipe: testbook::default
  * package[httpd] action install
    - install version 2.2.15-31.el6.centos of package httpd


Running handlers:
Running handlers complete

Chef Client finished, 1/1 resources updated in 22.003023864 seconds

仮想環境にログイン

これだけでは192.168.33.10にアクセスしても、何も表示されません。
Apacheが起動していないからです。
(実際は、この辺りもChefで対応できます)

仮想環境にログインしましょう。

$ ssh sakuravps

次にApacheを起動します。

[vagrant@localhost ~]$ sudo service httpd start

設定したアドレスにアクセスすると、Apacheの画面が表示されるはずです。

http://192.168.33.10/

cygwin-chef-sakura2_img_01

初期化する

一通り、動作が確認できたら初期化しましょう。
自分の望んだ環境を構築するまでに、何度インストールし、初期化することになると思います。

仮想環境から出ます。

$ exit

コマンドを入れると、仮想環境は、初期化されます。

$ vagrant destroy -f

次回は、さくらVPSに合わせた設定をrecipeを書いていきます!