はじめに

Chef はサーバー構成管理ツールで、クライアント/サーバー形式のソフトウェアです。 まずは Chef の構成要素について解説します。

Server, Client, Node

サーバー構成を記述した設定ファイルを Chef Server にて管理し、 Chef Client はその設定を使用して Node の構成を変更します。

_images/chef-architecture-01.png

Hint

Node は設定を管理したいサーバーまたはマシンのことです。 Node は Client を複数持つことができます。

Cookbook, Recipe

Recipe は Node をどのように設定するかを記述した Ruby スクリプトです。 Recipe を1つまたは複数まとめたディレクトリを Cookbook と呼びます。

_images/chef-architecture-02.png

Role

Node に与える役割を表すのが Role です。 1つの Node が複数の Role を持つことができ、 Role にはどの Recipe を使うのかが記述されます。 また、 Role で使用する Recipe のデフォルト設定も記述することができます。

_images/chef-architecture-03.png

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 で上書きします。

_images/chef-architecture-04.png

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
_images/chef-architecture-05.png

Hint

Recipe は Resource を組み合わせて記述し、記述した順番に実行されます。

run_list

run_list は Node に対して適用する Role を指定したり、 実行する Recipe を指定するものです。

_images/chef-architecture-06.png

Chef Solo

Chef Solo は Chef Server なしでも Chef の機能を使うためのものです。

_images/chef-architecture-07.png

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 を使いこなすことを目的とします。