TL; DR
Ansibleを使おう(´・_・`)
やること
chef-solo&knife-soloでcentosサーバにhttpdを用意して起動し、welcomeページを見るまでやります。
参考資料
参考書
前提知識
ものすごくざっくり書きますが悪しからず…
chefとは?
- https://www.chef.io/
- Ansibleみたいなサーバー環境構築・構成管理ツール。
- プロビジョニングを実行するエージェント(chef-server)と、プロビジョニングされるマシン(chef-client)に別れます。
- 個人で使うには手に余りすぎるし学習コスト高くて最近は敬遠されがち。
chef-soloとは?
- https://docs.chef.io/chef_solo.html
- エージェントが無くてもプロビジョニングしたい!というアナタの夢を叶えるツール。
- とはいえ、プロビジョニングしたい対象マシンにインスコしてsshで入り、対象マシン上で実行する必要があってまだめんどくさい。
knife-soloとは?

- お手元のPCからでもchef-soloを実行したい!というアナタの夢を叶えるツール。
- 入手方法はかんたん、
gem install knife-solo
するだけ。
knife-soloを使ってみよう
Dev Kitのインストール
- まずはお手元のPCにDev Kitをインスコしましょう、これでいろいろついてきます。
$ chef -v
# Chef Development Kit Version: 2.4.17
# chef-client version: 13.6.4
# delivery version: master (73ebb72a6c42b3d2ff5370c476be800fee7e5427)
# berks version: 6.3.1
# kitchen version: 1.19.2
# inspec version: 1.45.13
- ※昔はchefが無くてもchef-soloだけでknife-soloを実行できたぽいが、今はchefが無いとcookbookを作れないっぽいです。
ディレクトリの準備
# knife-testというリポジトリにします
mkdir knife-test && cd knife-test
# gemfile ほしい
bundle init
# gemfileに "knife-solo" たす
echo 'gem "knife-solo"' >> Gemfile
# ./vendor/bundle以下にインストールして./binに実行ラッパーを置く
bundle install --path vendor/bundle --binstubs
# かくにん
bin/knife -v
# Chef: 13.8.0
これでお手元からknife soloが実行できるようになります。
VMの準備
- VagrantやDockerなどでプロビジョニング対象マシンを用意しましょう。
- 自分は
knife-test
というホスト名のcentos7 Vagrant boxを使います。
knife-soloを使ってVMにchef-soloをインストールさせる
# cookbookのひな型を作る
bin/knife solo init .
# knife-testにchef-soloをインスコ
bin/knife solo prepare knife-test
chefでcookbookを作る
- chefコマンドでcookbookを作ります。
- cookbookはAnsibleでいうplaybookで、あるひとまとまりのサーバ状態を定義できます。
# chefで"test-book"というcookbookを作る
cd site-cookbooks
chef generate cookbook test-book
cd ..
入れたいソフトウェアを書く
- httpdを入れて起動させるコードを書きます。
- chefのDSLを調べたりしながら…
- こんな感じでcookbookにサーバの状態定義をしていくことを「レシピを書く」と言ったりします
site-cookbooks/test-book/recipes/default.rb
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
end
レシピを加える
- 自分でrun_listにレシピを書き加えます。
nodes/knife-test.json
{
"run_list": [
"recipe[test-book]"
],
"automatic": {
"ipaddress": "knife-test"
}
}
knife-soloでchef-soloを実行させる
- やっと実行まできました。
- 実行してVMにapacheをインストール&起動させましょう
sh
# 実行
bin/knife solo cook knife-test
# (中略)
# Converging 2 resources
# Recipe: test-book::default
# * yum_package[httpd] action install
# - install version 2.4.6-67.el7.centos.6 of package httpd
# * service[httpd] action enable
# - enable service service[httpd]
# * service[httpd] action start
# - start service service[httpd]
確認(welcomeページを見る)
- ブラウザからVMに割り当てたIPにアクセスしてみます

apacheが動いていることが確認できました。
おわりに
chef-soloはコマンドでひな形を作ってくれるのでどんなプロダクトでも構成が同じようになる(はず)という利点もありますが、小さなサーバ構成でも大きめのひな形が必要だったり、変数がどこで宣言されているのかわかりづらかったり、気軽に始めづらかったり……と微妙に使いづらいところがあります。
さらに、chef-soloではなくchefを使うのはプロビジョニングを行うエージェントとなるサーバが必要で大掛かりになってしまうことや、chef-solo&knife-soloでできることはAnsibleで(たぶんだいたい)できてしまうので、最近はAnsibleの方が人気なのが頷けるなぁと思いました。