directory "#{install_dir}" do
recursive true
mode 0755
owner "apache"
group "apache"
action :create
end
WordPressをインストールするディレクトリを設定します。3行目のmodeでパーミッションの設定を、4・5行目のownerとgroupで所有者・グループの設定をしています。
この後の処理で、ここで作成したディレクトリの下に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」とは別の値になりますので、ご注意ください。
#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の動きをトレースできません。
そのため、あまりにも長々とコマンドを書くと、どこでエラーになったかが分からなくなります。筆者も、どうしてもこの手を使う場合は、かなり細かく記述するように考慮しています。
#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 [email protected]
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>
#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を完結させることを到達目標としていますので、その部分の説明は割愛します。
AttributeやTemplateを活用できるようになると、Chefにおける構築の自由度が一気に上がりますので、ここをぜひマスターしてもらいたいと思います。
また、個人的に推奨はできかねますが、Chefからコマンドを実行させるように記述することも可能なので、「ここは、どうしてもコマンドでやらないといけない、ChefのResourceで書けない」という場合に利用することで「手順書をChefのCookbookとして記述する」ことの障壁が下がると思います。
次回は本連載の最終回となります。Recipeの仕上げの部分について解説していきます。
環境構築自動化の手順と評価検証、Puppetの基礎知識
OpenStackで激変するシステム開発・運用 “抽象化”が実現する「究極の自動化」とは
PowerShell Desired State Configuration(DSC)とは(前編)
アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識Copyright © ITmedia, Inc. All Rights Reserved.