Help us understand the problem. What is going on with this article?

Chefの基本

More than 5 years have passed since last update.

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

kidach1
Qiitaの運営方針に疑問があるため、基本的に今後の投稿は考えていません。 主に https://twitter.com/kidach1 で活動報告しています。
aktsk
株式会社アカツキは、スマートフォンゲームの企画開発を中心に事業を展開しております。創業以来全てのゲームを内製しているため、高い技術ノウハウが蓄積されています。今後は、新規事業の立ち上げも行ってまいります。
http://aktsk.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした