連載
» 2015年06月29日 05時00分 公開

WordPressのダウンロード/配置とバーチャルホスト設定で見るChefの変数とAttributeの書き方の基本&Template活用サーバー管理者のためのChef超入門(5)(2/2 ページ)

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

【3】WordPressのダウンロードと解凍

WordPressインストールディレクトリの設定

directory "#{install_dir}" do
  recursive true
  mode 0755
  owner "apache"
  group "apache"
  action :create
end

 WordPressをインストールするディレクトリを設定します。3行目のmodeでパーミッションの設定を、4・5行目のownerとgroupで所有者・グループの設定をしています。

 この後の処理で、ここで作成したディレクトリの下にwordpressディレクトリが作成され、ドキュメントルートとして設定します。

remote_fileリソースでWordPressのダウンロードと解凍

#WordPressダウンロード
remote_file "/tmp/#{filename}" do
  source "#{remote_uri}"
  checksum "#{file_checksum}"
end

 remote_fileリソースでは、指定されたURL(今回の場合は、attributeで定義された「https://ja.wordpress.org/wordpress-4.2.2-ja.tar.gz」)から「/tmp」にファイルをいったんダウンロードし、checksumでファイルの正当性を確認しています。

 checksumは「sha256」です。「shasum -a 256 [FILENAME]」で取得できます。Webサイトに記載されている「md5sum」とは別の値になりますので、ご注意ください。

「手順書をChefのCookbookにする」上での最大の障壁――scriptリソースを利用したWordPressのファイル配置

#WordPress配置
script "install_wordpress" do
  interpreter "bash"
  user        "root"
  code <<-EOL
    install -d #{install_dir}
    tar zxvf /tmp/#{filename} -C #{install_dir}
  EOL
end

 次にWordPress配置の部分ですが、恐らくここが「手順書をChefのCookbookにする」上での最大の障壁になると思っています。

 Chefの設計思想としては、ChefのResourceでできることはResourceとして記述して実行することが推奨されます。ですが、往々にして「どうしてもResourceで記述できない」手順というのが出てくるものです。そこで登場するのが、最後の手段である「Chefにコマンドを実行させる」というものです。

 scriptリソースでは、bashを呼び出してコマンドを実行させています。イメージとしては、ChefのRecipeの中にシェルスクリプトを書いているようなイメージです。

 ここで注意していただきたいのは、「1つのscriptリソースであまりにも多数のコマンドを実行するように記述しないこと」です。scriptリソースはbashという外部プログラムを呼び出して実行内容(code)を渡しているだけなので、bashの動きをトレースできません。

 そのため、あまりにも長々とコマンドを書くと、どこでエラーになったかが分からなくなります。筆者も、どうしてもこの手を使う場合は、かなり細かく記述するように考慮しています。

【4】バーチャルホスト設定

Templateファイルでhttpd.confの修正

#httpd.conf配置
template "httpdconf" do
  path "#{httpd_conf_dir}httpd.conf"
  source "httpdconf.erb"
  mode 0644
end

 ここで実行している内容は、「httpdインストール時に作成されたhttpd.confファイルを「httpdconf.erb」というTemplateファイルを使って置き換える」というものです。

 長くなりますが、今回使用したTemplateファイルをダウンロードできるようにしておきます

 見てもらいたいのは一番下の下記の部分で、バーチャルホストの設定値をAttributeで定義している部分です。こうすることで、設定内容の可視性を高め、Recipeの再利用性を高めています。

<VirtualHost *:80>
    ServerAdmin enginnering@ec2.tokyo
    DocumentRoot <%= node['wordpress']['wp_dir'] %>/wordpress
    ServerName <%= node['wordpress']['vhost_domain'] %>
    ErrorLog logs/<%= node['wordpress']['vhost_domain'] %>-error_log
    CustomLog logs/<%= node['wordpress']['vhost_domain'] %>-access_log common
</VirtualHost>
cookbooks/wordpress01/templates/default/httpdconf.erbから一部抜粋

WordPressディレクトリの設定変更

#wordpressディレクトリpermission変更
directory "#{install_dir}/wordpress" do
  recursive true
  mode 0755
  owner "apache"
  group "apache"
end

 この部分の説明は重複する部分なので割愛します。

サービス起動

#httpd実行
service "httpd" do
  action :start
end
 
#mysqld実行
service "mysqld" do
  action :start
end

 リモートノードのhttpdとmysqldサービスを起動させています。「:restart」とすることも可能です。

 また、Rubyで条件判定処理を書くことで「設定値が変更されていた場合のみrestartする」というようなことも可能ですが、今回の入門編は原則としてChefのDSLだけでRecipeを完結させることを到達目標としていますので、その部分の説明は割愛します。

最終回は、Recipeの仕上げ

 AttributeやTemplateを活用できるようになると、Chefにおける構築の自由度が一気に上がりますので、ここをぜひマスターしてもらいたいと思います。

 また、個人的に推奨はできかねますが、Chefからコマンドを実行させるように記述することも可能なので、「ここは、どうしてもコマンドでやらないといけない、ChefのResourceで書けない」という場合に利用することで「手順書をChefのCookbookとして記述する」ことの障壁が下がると思います。

 次回は本連載の最終回となります。Recipeの仕上げの部分について解説していきます。

著者紹介

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

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


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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