はじめに
前回の記事では、Chefとはどのようなものか? とChefの導入の仕方、Chefを使ったパッケージのインストール手順について紹介しました。
今回の記事では、ChefのCookBook作成の続きで、Apache httpdの設定ファイルの作成やWebサーバにデプロイするファイルの設定などを紹介します。また、作成したChefのCookBookをVagrantから呼出し、ローカル端末の仮想環境でインフラを自動で構築する手順を紹介します。
対象読者
本記事は、次の方を対象にしています。
- コードを使ってインフラの構成管理がしたい人
- ネットワークやLinuxの基礎知識がある人
- Webシステムの開発環境を構築したことがある人
Webサーバを設定するCookBookの作成
前回作成したレシピでChefを使ってApache httpdおよびPHPのインストールが出来たので、次は設定ファイルの作成やデプロイするファイルの配置などを行うCookBookを作成していきます。
httpd.confの作成
インストールしたApache httpdの各種設定を行うファイルは「httpd.conf」です。このhttpd.confにはインストール時にはデフォルトのファイルが自動生成されますが、このファイルを環境に合わせて変更する必要があります。Chefは設定ファイルのテンプレートや設定したい値をあらかじめ用意しておくことで、任意のファイルを生成することができます。
たとえば、httpサーバの管理者のメールアドレスやホスト名などを環境に合わせて生成して仮想環境に展開したい場合は、次の手順でCookBookを作成します。
まず、生成したいhttpd.confのテンプレートとなるファイルを以下の場所に置きます。拡張子はRubyのテンプレートファイルの拡張子である「erb」にします。
E:\chef-sample\httpserver\apache\templates\default\httpd.conf.erb
次に、配置したテンプレートであるhttpd.conf.erbを以下のように修正します。
~中略~ ServerAdmin <%= @admin %> ~中略~ ServerName <%= @servername %>:80 ~中略
これは、設定ファイル中のServerAdminおよびServerNameの値をChefで指定した@adminおよび@servernameという属性の値に書き換えるという意味になります。
次に、これらの属性値を定義します。Chefでの属性値は以下のファイルに定義します。
E:\chef-sample\httpserver\apache\attributes\default.rb
このファイルに以下のように属性値を記述します。
default['apache']['admin'] = 'root@test-domain.com' default['apache']['servername'] = 'www.test-domain.com'
これは、apacheという名前のCookBook配下のadminおよびservernameという属性を、'root@test-domain.com'および'www.test-domain.com'に置き換えるという意味になります。
最後に、このテンプレートと属性値からhttpd.confを生成するレシピを書きます。
レシピは以下のファイルです。
E:\chef-sample\httpserver\apache\recipes\default.rb
# 4. http.confの作成 template "httpd.conf" do source "httpd.conf.erb" path "/etc/httpd/conf/httpd.conf" group "root" owner "root" mode "0644" variables( :admin=>node['apache']['admin'], :servername=>node['apache']['servername'] ) end
このコードは、sourceで指定したテンプレートをもとにして、pathで指定した"/etc/httpd/conf/httpd.conf"を生成し、variablesで属性値を変数として割り当てます。
また、生成したファイルの属性を以下のように指定しています。
項目 | 指定値 | 説明 |
---|---|---|
group | "root" | ファイルのグループをrootにする |
owner | "root" | ファイルの所有者をrootにする |
mode | "0644" | ファイルのアクセス権を0644にする(所有者は読み書き可能/グループおよび他のユーザは読みのみ可) |
テンプレートの詳細については以下の公式サイトを参照してください。