はじめに =================================================================================================== `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 を使いこなすことを目的とします。