Chefの基本

  • 137
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Chefとは

サーバ設定や更新を自動化するツール。

レポジトリ>クックブック>レシピ
という階層で管理する。

一つのシステムにつきレポジトリ一つ、という粒度。

利用形態には以下の二つがある。

Chef-Server + Chef-Client

→Chef ClientがChef Serverからhttpで必要な情報をGETし、実行する。ChefServerの管理はちょっと大変。

Chef-Solo

→サーバ管理を必要としないスタンドアロン版。

Chefのインストール

$ curl -L http://www.opscode.com/chef/install.sh | sudo bash

もしくは

$ gem install chef

レポジトリ作成

OpsCodeがgithubに公開しているレポジトリのひな形
(後述のknife-soloを使えばそちらで肩代わりできる。)

$ git clone git://github.com/opscode/chef-repo.git

クックブック作成

knifeを用いる

knifeとは

chefレポジトリを操作するためのツール。
クックブックの作成はこれで行う。

chef solo環境で利用するのは主に以下の二つ
・knife cookbook(クックブックの作成)
・knife solo

knifeの初期設定

$ knife configure

諸々の質問事項は全てデフォルトでok。
初期化が完了すると
~/.chef/knife.rbに設定ファイルが保存される。

クックブックの作成

$ cd chef-repo
$ knife cookbook reate hello -o cookbooks

cookbooksディレクトリ内にhelloというクックブックを作成。

レシピの作成

クックブック作成時点でレシピのひな形は作成済となる。

$ vi cookbooks/hello/recipes/default.rb

"Hello, Chef!"を出力するだけのレシピ。

log "Hello, Chef!"

Chef Soloの実行

Chef Solo実行時に実行するレシピを記述するJSONファイルを用意する。
chef-repoディレクトリ直下に配置する。

localhost.json
{
    "run_list":[
        "recipe[hello]"
    ]
}

Chefが利用するテンポラリディレクトリやクックブックのパスを指定する設定ファイルも必要。同じくchef-repoディレクトリ直下に配置する。

solo.rb
file_cache_path "/tmp/chef-solo"
cookbook_path ["/home/ec2-user/chef-repo/cookbooks"]

実行

$ sudo chef-solo -c solo.rb -j ./localhost.json

chef-soloの流れまとめ

・レシピを作る
・JSONファイル内で、実行レシピを指定する
・chef-soloコマンドで実行する

レシピサンプル

特定パッケージのインストール

default.rb
package "zsh" do
    action :install
end

複数パッケージをまとめてインストール

default.rb
%w{zsh gcc make readline-devel}.each do |pkg|
    package pkg do
        actoin :install
    end
end

iptablesをオフに

default.rb
service 'iptables' do
    action [:disable, :stop]
end

※chefは何度実行しても、エラー等は発生しない。
→冪等性(何度操作を行っても、結果が同じであること)がある。

Resourceとは

Chefが提供するDSL(Ruby組み込みの文法ではない)。
レシピ内で用いる、「サーバの状態に何らかの影響を与える命令」のこと。
log、packageなど

ノード(node)とは

管理対象の各サーバのこと。
※その文脈で言うと、JSONファイルに書くのは特定のノードの「状態」となる。

JSONファイル内のデータ構造をNode Objectと呼び、そのプロパティとして、以下の2つを列挙する。
・そのノードに適用するべきレシピ
・そのノードが持っている変数(Attribute)

Chef Serverを用いる場合にはChef Serverに格納しておくが、
Chef Soloの場合はその格納場所がないので、ローカルにJSONファイルとして書いておく。

knife-soloを用いた実用例はこちら

knife-soloによるChefの実行
http://qiita.com/kidachi_/items/b222fb2892e6108c46d5