はじめに¶
Chef はサーバー構成管理ツールで、クライアント/サーバー形式のソフトウェアです。 まずは Chef の構成要素について解説します。
Server, Client, Node¶
サーバー構成を記述した設定ファイルを Chef Server にて管理し、 Chef Client はその設定を使用して Node の構成を変更します。
Hint
Node は設定を管理したいサーバーまたはマシンのことです。 Node は Client を複数持つことができます。
Cookbook, Recipe¶
Recipe は Node をどのように設定するかを記述した Ruby スクリプトです。 Recipe を1つまたは複数まとめたディレクトリを Cookbook と呼びます。
Role¶
Node に与える役割を表すのが Role です。 1つの Node が複数の Role を持つことができ、 Role にはどの Recipe を使うのかが記述されます。 また、 Role で使用する Recipe のデフォルト設定も記述することができます。
Role は Ruby または JSON フォーマットで記述します。たとえば Ruby ではこのように記述します。 (Role Data Formats — Chef Docs から引用)
1 2 3 4 5 6 | name "webserver"
description "The base role for systems that serve HTTP traffic"
run_list "recipe[apache2]", "recipe[apache2::mod_ssl]", "role[monitor]"
env_run_lists "prod" => ["recipe[apache2]"], "staging" => ["recipe[apache2::staging]"], "_default" => []
default_attributes "apache2" => { "listen_ports" => [ "80", "443" ] }
override_attributes "apache2" => { "max_children" => "50" }
|
Attribute¶
Attribute は実際に設定するパラメータです。 Cookbook / Recipe には Node 固有の設定を持たせないのが原則なので、可変にしたい設定は Attribute として外出しします。 Recipe にある Attribute はその Recipe のデフォルト値で、 必要に応じて Role や Node に記述した Attribute で上書きします。
Resource¶
Resource は Recipe で使用する、具体的な操作を表します。 たとえばディレクトリ操作を行う Resource directory は次のようになります。
1 2 3 4 5 6 7 | node['apache']['dir'] = '/etc/apache2'
directory node['apache']['dir'] do
owner 'apache'
group 'apache'
action :create
end
|
Hint
Recipe は Resource を組み合わせて記述し、記述した順番に実行されます。
Chef Solo¶
Chef Solo は Chef Server なしでも Chef の機能を使うためのものです。
Cookbook の動作確認をしたり、 Node が1つしかない場合に便利です。 なお、必要な Cookbook をローカル上にすべて持つ必要があり、 Node 固有の設定は JSON で指定します。たとえば次のようになります。
1 2 3 4 5 6 7 | {
"resolver": {
"nameservers": [ "10.0.0.1" ],
"search":"int.example.com"
},
"run_list": [ "recipe[resolver]" ]
}
|
本チュートリアルでは、この Chef Solo を使いこなすことを目的とします。