連載
» 2015年04月20日 05時00分 公開

WordPress構築で学ぶ、サーバー構築作業をChefのCookbookとして記述するためのポイントサーバー管理者のためのChef超入門(3)(2/2 ページ)

[大喜多利哉,@IT]
前のページへ 1|2       

Cookbookとは、Recipeとは

 Cookbookとは「インフラをコード化してあるべき状態を記述したChefのファイル群」です。RecipeはCookbookの一部にすぎません。CookbookはRecipeを含む複数のファイルから構成されています。

Cookbookのディレクトリ構成

Recipe

 Chefによってインフラをどのように構成するかを記述するファイルがRecipeです。RecipeはRubyを知らなくても書けます(※)。知るべきことはRecipeの書き方です。Recipeは後述するResourceの集合体で構成されていますので、まずはResourceを記述し実行させられるようになりましょう。

※とはいえ、条件分岐や繰り返し処理などを実現するにはRubyの知識が必要になってきますので、次第にChefで用いるRubyの記法についても慣れていきましょう(参考記事「若手エンジニア/初心者のためのRuby 2.1入門(2):Ruby 2.1の基本構文/基本文法まとめ&Pryの使い方」)。

Resource

 Recipeに実行させたい内容を記述するとき、Resourceと呼ばれる形式に従って記述していきます。リソースタイプには、下記のようにいろいろな種類があります。

  • ディストリビューションごとの違いを吸収してくれるResource
  • ディストリビューション固有のResource
  • Linuxコマンドを記述/実行するResource
  • 静的ファイル(file)、テンプレート(template)を操作するResource

 Resourceの種類や書き方については公式ドキュメントが参考になります。

Attribute

 Attributeとは、RecipeやTemplateに定義できる変数です。例えば、WordPressであればバーチャルホストのドメイン名やWordPressのバージョン別ファイルなどは実行するたびに変化する内容です。これらはCookbookの実行時に値を指定して実行させることもできますが、「attributes」ディレクトリの「default.rb」ファイルにデフォルト値を記載しておくと、実行時に特に指定しない場合は、こちらが採用されます。

 なお公開されているCookbookの中には、実行時に必ずAttributeを定義しないといけないものもあります。

Template/File

 TemplateとFileは両方ともRecipeから呼び出されて利用されるファイルですが、Templateは中にAttributeを定義できるので、「httpd.conf」のような「config」ファイルをヒアドキュメントとして流し込みたい場合などに利用します。

 一方で、Fileは完全に静的ファイルとしてしか扱わないものを設置します。例えば、リモートノードで実行させたい(しかし毎回インターネットから取得させる必要はない)RPMファイルなどはここに設置します。

Cookbook作成の進め方

 上記内容を踏まえ、今回のお題である「WordPressサーバー構築」をCookbook化する方針を以下の通りとします。

【1】リポジトリ設定→外部Cookbookを利用

 外部CookbookとしてEPELやRemiのインストールができるCookbookが公開されているので、そちらを使用します。

【2】Apache、PHP、MySQLのインストール→Resourceで定義

 Packeageリソースを使用して、ディストリビューションのパッケージ管理システムを操作してインストールします。

【3】WordPressのダウンロードと解凍→Resourceで定義

 URLを基にWordPressのソースファイルをダウンロードして所定の位置に配置する一連の処理を、scriptリソースを使用して実行します。どうしても適合するリソースがなくコマンドとして実行したい場合はscriptリソースが有効です。

【4】バーチャルホスト設定→Templateを使用

 httpd.confをTemplateとして用意しておき、実行のたびに変化する部分をattributeとして定義しておきます。実行時は指定したattribute値に置換されたhttpd.confファイルをヒアドキュメントとしてリモートノードに配置します。

【5】WordPress用MySQL設定→Templateを使用

 MySQL用のSQLファイルをTemplateとして用意しておき、実行のたびに変化する部分をAttributeとして定義しておきます。実行時は指定したAttribute値に置換されたSQLファイルをリモートノードのMySQLサーバーに対して実行します。

今回のまとめ

 今回のポイントをまとめると以下のようになります。

  • 「ChefはRuby」と難しく考えないこと。公式ドキュメントやインターネット上の情報で、普段コードを書いていないサーバー管理者でもRecipeを記述できる
  • ResourceにできることはResourceに任せる、できなければコマンドとして実行させる
  • configファイルの書き換えはTemplateを使って流し込むと簡単

 Chefは独特の用語が多いことや、複数ファイルに跨がって構成されていること、「Rubyだ」というイメージが強過ぎることなどから「難しい」と考えられがちなのですが、一度仕組みを理解してしまえば、非常に理にかなった構造をしていることが分かると思います。

 次回以降では実際にCookbookの作成を通じてChefの理解を深めていこうと思います。

著者紹介

大喜多 利哉(おおきた としや)

1978年生まれ、神奈川県横須賀市出身。メーカー系システムインテグレーター、ISP、商社系ネットワークインテグレーターで、インフラエンジニアとしてプリセールスからITインフラ設計/構築/運用と、上流工程より一貫して携わる。現在はWebシステム開発運用会社でオンプレミス環境からパブリッククラウドへの移行案件を担当している。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。