サーバー設定ツール「Chef」の概要と基礎的な使い方
近年注目されているサーバー管理ツール「Chef(シェフ)」は、ファイルに記述した設定内容に応じて自動的にユーザーの作成やパッケージのインストール、設定ファイルの編集などを行うツールだ。今回はこのChefについて、基本的な環境構築方法と使い方を紹介する。
前回はサーバーの設定管理ツールとして「Puppet」を紹介したが、今回紹介するChefは、このPuppetと人気を二分するサーバー設定管理ツールだ。
Chefは米Opscodeが開発しているオープンソースソフトウェアで、Rubyなどのオープンソースな技術を使って実装されている。ライセンスはApache License 2.0だ。同社はChefにいくつかの機能を追加した有償版の「Private Chef」やクラウド型の「Hosted Chef」といったサービスも提供しているが、本記事ではオープンソース版のChefについて紹介する。
ChefとPuppetはともに設定ファイルに応じてサーバーの設定を行うツールという点では同じだが、Chefでは「Cookbook(クックブック)」や「Recipe(レシピ)」と呼ばれる設定ファイルの再利用がしやすい構造になっている点が特徴だ。Cookbookの構成はやや複雑になっているものの、Chefの開発元やサードパーティが提供しているCookbookを利用することで、少ない記述でサーバーの設定を実行できるようになっている(図1)。
ChefのRecipeはRubyスクリプトとなっているのも特徴だ。そのためRubyとの親和性が高く、Rubyの知識がある人にとってはその動作の仕組みや構造を理解しやすいというメリットがある。ただ、エラー発生時にはRubyの出力するエラーメッセージを読まなければならないため、逆にRubyの知識がない人にとってはトラブルシューティングのハードルが高いかもしれない。
Chefのアーキテクチャと構成要素
Chefはフランス語での「料理人」という言葉が由来になっており、その構成要素も料理をモチーフにして命名されている。まず、Chefでは設定内容を記述したファイルのことを「Recipe(レシピ)」と呼ぶ。ChefのRecipeはRubyの実行ファイルとなっており、その拡張子は.rbだ。Chefは広義にはサーバー設定を行うための関数やクラスといった機能を提供するRubyライブラリおよびヘルパーアプリケーション集であるとも言える。
また、Recipeの管理単位を「Cookbook(クックブック)」と呼ぶ。CookbookにはRecipeに加え、設定ファイルを作成するための「Template(テンプレート)」や、環境に応じてその値を変更できる変数を定義した「Attribute(アトリビュート)」などが含まれている。Chefでは処理内容や対象とするアプリケーションごとにCookbookを作成するのが一般的で、Recipeでは環境に依存しないように設定を記述し、Attributeでその内容を制御する、という使い方が推奨されている。Recipe内からはほかのCookbookやRecipeを参照して利用することも可能だ。
Chefで管理対象とするサーバーの設定項目や設定ファイルなどは、「Resource(リソース)」と呼ばれる。リソースには型(リソースタイプ)があり、たとえばユーザーの作成や削除には「user」というリソースタイプを、Yumによるパッケージ操作については「yum_package」というリソースタイプを利用する。Chefでは基本的なシステム管理に必要となるリソースタイプがあらかじめで用意されているほか、Cookbook内で新たなリソースタイプを定義することも可能だ。
Cookbookは自分で作成するだけでなく、公開されているものを利用することも可能だ。Opscodeが運営するコミュニティサイト(http://community.opscode.com/)にはChefを開発するOpscodeやサードパーティの開発者によって作成されたCookbookがまとめられており、無料でダウンロードして利用できる(図1)。
公開されているCookbookは、MySQLやApacheといったアプリケーションのインストールや設定を行うものからユーザーの作成などシステム管理に関わるもの、iptablesなどOSの特定機能の設定を行うものまで、多岐にわたる。これらを利用することで、自分ではほとんどRecipeを書くことなしにサーバーの設定を行うことも可能だ。
Chefによるサーバー管理構成
Chefを利用するための構成としては、1台のサーバー内でCookbookの作成や管理、実行などをすべて完結させるスタンドアロン構成と、Cookbookをサーバーで集中管理し、クライアントはサーバーからCookbookをダウンロードして実行するというクライアント/サーバー構成の2通りがある。
まずスタンドアロン構成の場合だが、この場合はサーバーソフトウェアのインストールは不要で、クライアントのみが必要だ。Recipeの実行はクライアントに含まれる「chef-solo」というコマンドで行う。
いっぽうクライアント/サーバー構成の場合、サーバー側にはChefサーバー、「Node(ノード)」と呼ばれるクライアント側にはChefクライアントのインストールが必要となる。
クライアント/サーバー構成の場合、サーバー側でRecipeの作成や検証作業を行っても良いのだが、このような作業は別のマシン上で行うこともできる。このようにRecipeの作成や管理を行うマシンを「Workstation(ワークステーション)」と呼ぶ。Workstationでのレシピの作成や環境管理などには、「knife」というツールを利用する。knifeはChefクライアントをインストールすると同時にインストールされる。
さて、以下ではまずchef-soloを利用するスタンドアロン構成を使ってChefの基本的な使い方やCookbook/Recipeの利用方法を解説し、続いてクライアント/サーバー構成についても紹介していく。
なお、以下で利用している環境はクライアント/サーバーともにRed Hat Enterprise Linux 6.4互換であるCentOS 6.4(x86_64)だ。