147
149

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chefの基本

Last updated at Posted at 2013-10-14

##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

147
149
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
147
149

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?