[http://wiki.opscode.com/display/chef/Chef+Basics:title=Chef Basics]を訳しました

Chefを使うならどのような機能をもっているか把握するべきです。このページでは機能の概要を説明し、それらの詳細のリンクがついています。

Modeling Your Infrastructure

Nodes

nodeはChef-clientを実行するhostです。Chefからみたnodeの主な役割は変数と実行リストを所持する事です。
NodeはRecipeとRoleで構成されたものです。あなたがNodeを好きなときに実行するときは以下の事をします。

  • systemにRecipeを追加する
  • 変数を更新する
Run List

最も簡単な場合、Run listはnodeが所持しているRecipeのリストです。Cookbookのmetadataが正しいと仮定するとrun listにRecipeを登録するだけでそれらは必要に応じて自動的に実行されるでしょう。

より進んだ使い方として、Runlistにはnodeが特定のnodeのレシピをRoleとして持つ事ができます。この場合Chef-clientを走らすと、roleに指定されたRecipeが"拡張された"listとして実行されます。

Node Attributes

NodeとRoleはattributesによって関連づけされています。attributesはnestされたkey-value形式の構造を持っています。NodeとRoleのAttributesはresource attributesの入力として共通に利用できます。例えば本番環境ではnginxのあるバージョンしか使いたくないが開発環境で最新版を入れたいときがあったとしましょう。nodeもしくはroleの変数を利用する事で一つのRecipeで両方の環境を実現する事ができます。

Chefではattributeファイルにセットされたattributeのみ有効です。Chefが実行されたときにnodeがattributeファイルを参照するコード及び変数はnode上に直接管理されます。Ruby上ではattributeファイルの中にselfで指定されたものがnodeです。attributeファイルを利用する事でnode上のデータが正しいと信頼することができます。

Chefのヘビーユーザはたくさんのnode上でattributeを管理しています。

Roles

Roleは似たようなnodeの似たような機能をグルーピングするものです。Webのscaleを行うときは何か一つに着目せずにnodeグループの設定を共通化しその設定部分を表現するためにRoleを使います。Roleはnode同様attributesとrun listを持っています。Chef-clientが実行されたとき、node自身のattributeとRoleのattributeがmergeされることになります。

Configuring Nodes

Cookbooks

cookbookはChefが設定したrecipe,resource definition, attribute, library, cookbook fileとtemplate fileとmetadataの集まりです。Cookbooksは一つのpackageやserviceの設定周りがまとまったものです。例えばclientとserver両方のRecipeを含んだMySQLのcookbookの場合それにattributesファイルが追加されることになります。

CookbooksはChef内で共有、配布される単位になります。Chefを利用する人のほとんどぽがCookbookを書く事になるでしょう。

Recipes

Recipesはあなたのresourcesが書かれているファイル群です。RecipesにはちょっとしたChefの文法を覚える必要があります。
Chefを実行する際は二つのプロセスがあります。一つ目は結合と呼ばれるプロセスです。二つ目はChef内の各Resourceでのactionを実行することです。単なるrubyコードは実行プロセスではなく結合プロセスで実行されます。Chefの実行プロセスで実行したい場合はRuby block resourceを利用するようにしてください。これより詳細は、anatomy of a chef runを参照してください。

Metadata

Cookbooksではよく必要な機能を他のcookbooksを信頼します。clientが利用しているcookbooksがどのサーバで稼働しているか知るためにcookbooksではある情報を見ています。それがcookbook metadataです。metadataにはauthorship, licening, cookbookの概要、cookbookがどのプラットフォームで動く事を期待しているかなどの情報が入っています。Chefは実際に動くときよりmetadataによっていろいろな値をもっていますが正確な依存情報を持つ事が本質であり情報が全て入ったから問いって必要な全てのcookbookが手に入るわけではないです。

Resources

resourceはhost上の設定差異を吸収します。たとえばpackages resourceなどプラットフォームによってコマンドが変わるところを吸収できます。
ResouceはRecipeやDefinitionsで利用できます。それらはChefで動く基本の単位です。

Actions

ActionはChef resourceで何をしたいか記述します。例えばあるパッケージをインストールするのかアップグレードするのかはたまた削除するのかといったことをResourceに記述します。

Providers

providerはプラットフォームに特化したresourceの概念です。RedhatCentOSではpackage resourceはyumpackageを使ってインストールするでしょうしDebianUbuntuではaptを利用するでしょう。Providerはその辺りを知的に行います。systemに関連するアクションがあった場合はそれに帯する責任を背負います。そして各パッケージは最初にコマンドに何が必要なのかチェックします。Chefを実行するさいProvierについて心配する事はありません。あなたが何かしてもChefはshortcut resourceを提供してくれます。例えばdpkg_packageやrpm_packageはファイルシステムから直接インストールすることを許します。

ProvidersはResource上のactionをとってきます。与えられたNodeは基本のProviderを指定しますがResourceで直接Providerを指定することもできます。

Search

SearchはChef serverによって構成され、データの検索にを行います。ほとんどの場合はrecipe内でsearch callsを経由して利用します。

Data bags

DatabagsはChef-server上にもつkey-value形式の構造化されたものです。DataBagは検索でき、かつrecipe内で名前を呼んで直接指定する事ができます。Chef全体で所持できる変数と考えるのがいいでしょう。

Managing Chef

Knife

KnifeはChef-serverのCUIです。Chef-soloを利用する場合でもいくつかの機能を利用できます。

Shef

ShefはChefのconsoleです。Recipeのデバッグとかに使えます。