はじめに
===================================================================================================
`Chef `_ はサーバー構成管理ツールで、クライアント/サーバー形式のソフトウェアです。
まずは Chef の構成要素について解説します。
Server, Client, Node
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
サーバー構成を記述した設定ファイルを `Chef Server `_ にて管理し、
`Chef Client `_ はその設定を使用して
`Node `_ の構成を変更します。
.. image:: ./images/chef-architecture-01.png
.. hint:: Node は設定を管理したいサーバーまたはマシンのことです。 Node は Client を複数持つことができます。
Cookbook, Recipe
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`Recipe `_ は Node をどのように設定するかを記述した Ruby スクリプトです。
Recipe を1つまたは複数まとめたディレクトリを `Cookbook `_ と呼びます。
.. image:: ./images/chef-architecture-02.png
Role
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Node に与える役割を表すのが `Role `_ です。
1つの Node が複数の Role を持つことができ、 Role にはどの Recipe を使うのかが記述されます。
また、 Role で使用する Recipe のデフォルト設定も記述することができます。
.. image:: ./images/chef-architecture-03.png
Role は Ruby または JSON フォーマットで記述します。たとえば Ruby ではこのように記述します。
(`Role Data Formats — Chef Docs `_ から引用)
.. code-block:: ruby
:linenos:
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 で上書きします。
.. image:: ./images/chef-architecture-04.png
Resource
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`Resource `_ は Recipe で使用する、具体的な操作を表します。
たとえばディレクトリ操作を行う Resource `directory `_ は次のようになります。
.. code-block:: ruby
:linenos:
node['apache']['dir'] = '/etc/apache2'
directory node['apache']['dir'] do
owner 'apache'
group 'apache'
action :create
end
.. image:: ./images/chef-architecture-05.png
.. hint:: Recipe は Resource を組み合わせて記述し、記述した順番に実行されます。
run_list
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`run_list `_ は Node に対して適用する Role を指定したり、
実行する Recipe を指定するものです。
.. image:: ./images/chef-architecture-06.png
Chef Solo
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
`Chef Solo `_ は Chef Server なしでも Chef の機能を使うためのものです。
.. image:: ./images/chef-architecture-07.png
Cookbook の動作確認をしたり、 Node が1つしかない場合に便利です。
なお、必要な Cookbook をローカル上にすべて持つ必要があり、 Node 固有の設定は JSON で指定します。たとえば次のようになります。
.. code-block:: javascript
:linenos:
{
"resolver": {
"nameservers": [ "10.0.0.1" ],
"search":"int.example.com"
},
"run_list": [ "recipe[resolver]" ]
}
本チュートリアルでは、この Chef Solo を使いこなすことを目的とします。