サーバの構成管理ツール Chef に入門してみました.
目的
- Chef って何?
- Chef を使ってみる
前提環境
- Mac (OS X 10.9.2)
- Ruby (v2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin13.0.0])
- gem (v2.0.0)
- VirtualBox(v4.3.6)
ではではチュートリアル開始〜♪
Chef を使える環境をつくる
チュートリアル を見ながら環境構築します.
Chef は cookbook という設定ファイルっぽいものを作っておき, それらを仮想環境やリモートサーバに反映させるとそれらを設定通りの構成に作ってくれる仕組みみたいです. この cookbook には Recipe と呼ばれる設定ファイルが 1 つ以上ありサーバに実行させる処理が明記されているそうです.
Chef は Gem に登録されているのでのでまずインストールしましょう. 今回はグローバルにインストールしました.
$ gem install chef --no-ri --no-rdoc
$ knife -v
Chef: 11.12.2
インストールすると knife
というコマンドが使えるようになります.
まとめ:
- Chef は複数台のサーバの構成を管理する gem.
- Chef で使うコマンドは
knife
. - Chef の中身は Recipe と呼ばれる処理を明記した設定ファイルをまとめた Cookbook と呼ばれるパッケージからなる.
knife-solo は単体の環境でサーバ構成管理をするツール
さて, Chef をインストールしたところで実際どう使うものなのか改めて調べます. Chef 使う場合はおおまかに 2 通りあり, 単体サーバ内だけで構成管理と実行すべて完結させるスタンドアロン構成と, サーバ構成を管理する Chef サーバと Chef クライアントをインストールして実行するクライアント/サーバ構成だそうです.
今回は前者の単体で構成管理と実行する練習をします. この場合によく使われる knife-solo という knife のプラグインの gem が広く使われているみたいなのでインストールしてみます.
$ gem install knife-solo
まとめ:
- Chef を使う用途には Chef サーバ/クライアントを使った複数台で構成管理する場合と単一のサーバ内で Chef を使う 2 通りがある.
- 後者の単一のサーバで Chef を使う場合 knife-solo というプラグインを使うとより便利.
knife-solo で Chef のひな形ファイルを作成する.
Chef の概要がなんとなく分かってきた気がするので早速書いてみます.
まず knife の設定ファイルを作るそうです.
$ knife configure
これで ~/.chef/knife.rb
が作成されます.
ではでは knife solo
コマンドで cookbook のひな形を作ります.
$ mkdir chef-repo & cd chef-repo
$ knife solo init .
$ tree .
.
|-- cookbooks
|-- data_bags
|-- environments
|-- nodes
|-- roles
`-- site-cookbooks
ひな形ができたので cookbook を作ります.
前回 は shellscript を使って Apache をインストール&起動させましたが, 今回はこれらを全て Chef でやってみましょう.
$ knife cookbook create apache -o site-cookbooks
$ tree site-cookbooks
site-cookbooks
`-- apache
|-- CHANGELOG.md
|-- README.md
|-- attributes
|-- definitions
|-- files
| `-- default
|-- libraries
|-- metadata.rb
|-- providers
|-- recipes
| `-- default.rb
|-- resources
`-- templates
`-- default
site-cookbooks 下に新たに cookbook が作られました.
まとめ:
-
knife solo
コマンドで chef のひな形を作成する. -
knife cookbook
コマンドで cookbook を作成する.
Apache をインストールする Recipe を書いてみる
調べながら書いてみます. package, action, install, service... 直感的でなんとなくの理解です. 次書くときはドキュメントなど詳しく読んでやってみます.
# site-cookbooks/apache/recipes/default.rb
package "httpd" do
action :install
end
service "httpd" do
supports :status => true, :restart => true, :reroad => true
action [ :enable, :start ]
end
Vagrant を使って仮想マシンへ Chef をインストールし適用する
前回 Vagrant の使い方をなんとなく把握したので, Vagrant を使って仮想マシンへ Chef をインストールしてみましょう. 作業は chef-repo と同じディレクトリで行いました.
$ vagrant init
Vagrantfile には以下を追記します.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise32"
config.vm.network "private_network", ip: "192.168.33.10"
end
仮想マシンを起動して ssh で接続できるようにします.
$ vagrant up
$ vagrant ssh-config --host apache >> ~/.ssh/config
$ ssh apache # ssh でログインできることを確認
knife solo prepare
というコマンドを使ってこの仮想マシンへ chef solo をインストールします.
$ knife solo prepare apache
...
Thank you for installing Chef!
Generating node config 'nodes/apache.json'...
これでこの仮想マシンで chef solo コマンドが使えるようになったみたいです.
最後に生成された nodes/apache.json
ファイルに以下を追記します.
{
"run_list" : [
"recipe[apache]"
]
}
これで作った apache という cookbook を実行できるようになります. ではでは最後に Recipe に書いた処理を実行させましょう. 料理開始.
$ knife solo cook apache
web サーバが起動したか確認してみます.
$ curl -I http://192.168.33.10
HTTP/1.1 200 OK
Date: Sat, 19 Apr 2014 15:21:31 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Sat, 19 Apr 2014 15:20:27 GMT
ETag: "481374-b1-4f766ce5bc646"
Accept-Ranges: bytes
Content-Length: 177
Vary: Accept-Encoding
Content-Type: text/html
X-Pad: avoid browser bug
調査の結果 & 次の課題
- Chef の使い方をなんとなく把握した
- 今回の手順だけだと Chef を使う利点がイマイチ分からない(Chef 最高!とまでテンション上がらない)
次の調査
- サーバ構成管理について理解するところから調べ直し
- Chef を使う利点と難点を知る
Referrences
http://qiita.com/TsuyoshiUshio@github/items/89030baca68b05a9783d
http://qiita.com/taiki45/items/b46a2f32248720ec2bae
http://qiita.com/kidachi_/items/9d569b8673e70ef93f0e
http://qiita.com/kidachi_/items/b222fb2892e6108c46d5
http://jitsu102.hatenablog.com/entry/2014/03/09/164950