AWS OpsWorksって何? から、運用しやすくなる下準備のポイントまで:AWS OpsWorksアプリケーション運用の勘所(1)(2/5 ページ)
ChefをベースにしたAWS OpsWorks。実際に使ってみるとどんな感じ? 筆者が体当たりで検証。運用面でのハウツーも紹介していきます。
運用しやすさを重視した準備の進め方
ここからは、今後の「運用のしやすさ」をポイントに導入準備の手順を見ていきます。ポイントに絞って解説しますので、Chefやgithubの操作については別途ドキュメントなどを参照してください。
カスタムレシピの準備
まずは、カスタムレシピの準備をします。自分でいちからcookbookを作っても構いませんが、手間を考えるとAWSがgithub上に用意しているRecipeをforkして自分のgithubアカウントに移してから用意する方が楽でしょう。ここではその方法で作成していきます。
https://github.com/aws/opsworks-cookbooks
自分のリポジトリにforkしたら、まずはアプリケーションごとにbranchを切っておくと後々便利です。今回はEC-CUBEを使うので、eccubeというブランチを切りました。これで自分用にResipeをカスタマイズして使えるようになります。
利用時はstackにCustom chef recipeを設定しておくと良いでしょう。設定は、Layerの設定のcustom recipeのところで指定します。
レシピのオーバーライドはできないようで、built in recipeと同じ名前だと実行されませんので注意が必要です。
ディレクトリのパーミッションの設定
AWS OpsWorksでは、ディレクトリの所有者がdeploy:rootになっているため、アプリケーションの書き込みができなくなってしまいます。そもそもローカルのディスクに書き込むようなものはスケーリング時に問題になるので「やめとけ」って話なんでしょうが、オープンソースのさまざまなアプリケーションの中にはローカルにファイルを書き出すものが結構あります。
ですから、これをdeploy:apacheにして、パーミッションを775にするか、もしくはapache:rootにして755にするかのどちらかに変更しておく方が都合が良さそうです。ここは少しrecipeをいじる必要があるでしょう。
そこでカスタムレシピの出番となります。
current/htmlとcurrent/dataの2つとその配下のディレクトリに対してdeploy:apache 0775にするrecipeを書きます。筆者は残念ながらchefにはあまり詳しくないので、再帰的にディレクトリの情報を書き換える方法が見つからず、今回はスクリプトを使った方法で実施しました。下記Rubyのコードでは、単純に2つのディレクトリに対してchownとchmodを実行させています。
# # Cookbook Name:: deploy # Recipe:: eccube # node[:deploy].each do |application, deploy| if deploy[:application_type] != 'php' Chef::Log.debug("Skipping deploy::php application #{application} as it is not an PHP app") next end script "chmod_applicaton" do Chef::Log.info("tottokug-Log permission change ") interpreter "bash" cwd deploy[:deploy_to] user "root" code <<-EOH chmod -R 775 current/html current/data chown -R deploy:apache current/html current/data EOH end end
上記のようなファイルをcookbookのdeploy/recipes/eccube.rbとして追加します。また、cookbookのdeploy/metadata.rbにも下記の1行追加しておきましょう。
recipe "deploy::eccube", "permission"
ここまでの作業が終わったらgithubにpushしておきましょう。
Copyright © ITmedia, Inc. All Rights Reserved.