検索
連載

Apache、PHP、MySQLパッケージのインストールで見るChefのRecipeの基本的な書き方サーバー管理者のためのChef超入門(4)(2/2 ページ)

エンタープライズ向け機能が充実してきたChefを使って高速かつ精度の高いサーバーインフラを構築/管理する方法について解説する連載。今回は、外部Cookbookを利用したリポジトリ設定や、yumによってApache、PHP、MySQLパッケージをインストールするRecipeの書き方と実行の仕方などについて解説します。

Share
Tweet
LINE
Hatena
前のページへ |       

【2】Apache、PHP、MySQLパッケージをインストールするRecipeを書いてみよう

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

 ここから、ついに自分でChefのCookbookを作成していく作業に入ります。以下の流れで作業を行います。

  1. Cookbookのひな型を作成する
  2. パッケージをインストールするRecipeを書く
  3. Cookbookを実行してノードにパッケージをインストールする
  4. 021#

1.Cookbookのひな型作成

 knifeコマンドを使用してCookbookのひな型を作成します。

$ sudo knife cookbook create wordpress01 -o cookbooks
** Creating cookbook wordpress01 in /home/******/chef-repo/cookbooks
** Creating README for cookbook: wordpress01
** Creating CHANGELOG for cookbook: wordpress01
** Creating metadata for cookbook: wordpress01

 前回、『Cookbookとは「インフラをコード化してあるべき状態を記述したChefのファイル群」』と説明しました。Cookbookは以下図のように複数のファイルから構成されています。Knifeコマンドを用いることで、図のようなファイル・ディレクトリ構造のモトを簡単に作成できます。


Cookbookのディレクトリ構成(前回の再掲)

2.Recipeを書く

 RecipeはCookbookのうち実行内容を記載するファイルです。今回はAttributeやTemplate/Fileは使用しません。Recipeに記述した内容をそのまま実行するRecipeを書きます。

 編集するファイルは「cookbook/wordpress01/recipes/default.rb」です。Recipeに実行させたい内容を記述するとき、「Resource」と呼ばれる形式(リソース)に従って記述していきます。今回は「Package」リソースを用いてパッケージ管理システム(今回はCentOSを使用していますので「yum」になります)によってパッケージをインストールするRecipeを書きます。

 他のResourceの記述方法については公式ドキュメントを参考にしてみてください。

package ['httpd’]  do
  action :install
end
package ['httpd-devel']  do
  action :install
end
package ['mysql']  do
  action :install
end
package ['mysql-server']  do
  action :install
end
package ['mysql-devel']  do
  action :install
end
package ['php']  do
  action :install
end
最も基本的な「Package」リソースを用いたRecipeの記述例

 PackageリソースをPackageの数だけ記載して、1個ずつパッケージをインストールしていくRecipeになっています。

 分かりやすいですがパッケージの数が増えれば増えるほど冗長になっていくため、実際にChefを活用していく段階では、このような書き方は推奨されません。しかし、ここで覚えておいていただきたいのは「Chefというのは実はこのような単純なものの組み合わせでできている」ということです。Rubyだから、プログラムだからと身構える必要はないのです。実行する内容の集合体です。

 ここから始めて、だんだんと条件分岐や繰り返しなどのプログラマブルな処理が必要になってくるはずですので、そこでRubyをRecipeに盛り込んでいけばいいのです。

package ['httpd', 'httpd-devel', 'mysql', 'mysql-server', 'mysql-devel', 'php', ‘php-mysql’]  do
  action :install
end
複数のパッケージインストールを1つのリソースにまとめた記述例

2015年6月25日追記

記事公開時にPackageをインストールするRecipeの書き方の部分で、php-mysqlが抜けておりました。上記の通り訂正させていただきます。


 Packageの後にインストールしたいパッケージ名をカンマ区切りで列挙していきます。これで先ほど18行あったRecipeは3行になりました。

 さらにRubyのループを使って「記載された分だけPackageインストールを実行する繰り返し処理の記述例」もありますが、今回は割愛します。

3.Cookbookを実行

 実際に作成したRecipe/Cookbookを実行してみます。

$ sudo knife node run_list add node01 'recipe[wordpress01]' node01:
  run_list:
    recipe[wordpress01]
$ sudo bundle exec knife zero chef_client 'name:node01' -x <ユーザー名> -P <パスワード> --sudo
node01 Starting Chef Client, version 12.3.0
node01 resolving cookbooks for run list: ["wordpress01"]
<<<中略>>>
node01   * yum_package[httpd, httpd-devel, mysql, mysql-server, mysql-devel, php] action install
node01     - install version 2.2.15-39.el6.centos of package httpd
node01     - install version 2.2.15-39.el6.centos of package httpd-devel
node01     - install version 5.5.43-1.el6.remi of package mysql
node01     - install version 5.5.43-1.el6.remi of package mysql-server
node01     - install version 5.5.43-1.el6.remi of package mysql-devel
node01     - install version 5.4.40-1.el6.remi of package php
node01
node01 Running handlers:
node01 Running handlers complete
node01 Chef Client finished, **/** resources updated in **.******* seconds

 上記のように表示されればパッケージのインストールは完了です。MySQLとPHPについては、RemiリポジトリからCentOS標準よりも新しいバージョンのパッケージをインストールしていることが確認できると思います。

次回はAttributesやTemplatesを活用したChefならではのメリット

 今回はChefのRecipeの本当に基本的な部分についてだけ触れました。ここからさまざまなResourceを使い分け、Rubyによる動的な記述によってできることはどんどん増えていきます。

 始めの一歩が大事です。だんだんとChefに慣れていって、実務に活用されるよう望みます。次回はAttributesやTemplatesを活用したChefならではのメリットについて解説していきます。

著者紹介

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

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


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る