humangas's blog

自分用のメモなので雑です。

入門Chef Solo:02-Chef Soloをインストールして試したい - Hello Chef!

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

Chefのインストール

Chefのインストールは2種類ある。

  • Opscodeが提供しているOmnibus Chef Packagingを使用する
$ curl -L http://www.opscode.com/chef/install.sh | sudo bash`
  • rubygemsでインストールする
$ gem install chef

レポジトリ(キッチン)、クック、レシピ

レシピの管理階層

  • レポジトリ(キッチン) > クック > レシピ

レポジトリの作成

Opscodeがgithubに公開しているひな形
レポジトリは特定のシステムに一個くらいの粒度の大きさ。レポジトリの作成はknife-soloでできる。(→#5で紹介)

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

クックブックの作成 with knife

knifeはクックブックを操作するためのツール。

knifeの初回の設定

$ knife configure

設定時の質問はすべてデフォルトで構わない。
knifeの設定が保存される場所→バージョンで変わることもあるので確認しておく

~/.chef/knife.rb

knifeを使ってクックブックを作成。

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

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

Chef soloで使用するknifeのサブコマンドはknife cookbookknife solo程度。

レシピの編集

$ vi cookbooks/hello/recipes/default.rb

例として、次のようなレシピをrubyで記述する。

log "Hello, Chef!"

Chef Soloの実行

設定ファイルを作成する。→knife soloコマンドで簡略化できる。

jsonファイル

jsonファイルの設定が必要。例えば、chef-repoディレクトリの直下に、localhost.jsonというファイル名で作成する。

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

rubyファイル

chefが利用するテンポラリディレクトリやクックブックのパスを指定する設定ファイル。たとえば、chef-repoディレクトリの直下に、solo.rbという名前で作成する。

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

Chef Soloの実行

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

Chef Solo実行の流れのまとめ

  • レシピを作って
  • JSONファイルで実行するレシピを指定して
  • chef-soloコマンドでそれを実行する

パッケージをインストールする

レシピの例)

package "zsh" do
    action :install
end

yumやaptといったインストールコマンドは記述しない。プラットフォームの差異はChefが吸収する。 既にインストールされているパッケージに同じレシピを流しても、エラーにならない。

Ruby力を発揮

レシピはrubyで記述するため、rubyのコードをうまく使うことができる。

# 複数のパッケージをまとめてインストールする例
%w{zsh gcc make readline-devel}.each do
|pkg|
    package pkg do
        action :install
    end
end

冪等性(idempotence)とは

その操作を複数回行っても結果が同じであること

Resourceとは

Rubyの組み込みの文法ではなく、Chefが提供するDSL。
Chefのレシピで使用する、サーバーの状態に影響を与える命令を、ChefではResourceと呼ぶ。

広告を非表示にする