AWS OpsWorksで持っている値をCustom Chef Recipeの中で使いたい!
AWS OpsWorksで持っている値
AWS OpsWorks用にrecipeを書くにあたって、AWS OpsWorks内で持っている値を使いたい事があります。
特にLayerのタイプがCustomの時には必要になってきます。
AWS OpsWorksのcookbookの中でよく使われている
deploy[:***]が怪しいので、Documentを見てみましたが、それらしいものを見つける事ができませんでした。
それなら、実際にログとして出してみて確かめて見ようとという事で調べてみました。
調べた方法は以下のrecipeをCustom Chef recipeとしてdeploy のタイミングで動かして、ログに出力しました。
node[:deploy].each do |application,deploy| deploy.each do |key,value| Chef::Log.debug("deploy[:#{key}] = '#{value}'") end end
結果
ログに出力されていたものは以下のような感じです。${APPLICATION_NAME}はアプリケーション名に読み替えてください。
アプリケーションのリポジトリへのアクセス用の秘密鍵(${SSH_PRIVATE_KEY}のところ)なんかもココからとれてしまいます。
deploy[:application] にはアプリケーション名が入っている事がわかりました。
deploy[:application] = '${APPLICATION_NAME}' deploy[:current_path] = '/srv/www/${APPLICATION_NAME}/current' deploy[:delete_cached_copy] = 'true' deploy[:home] = '/home/deploy' deploy[:auto_bundle_on_deploy] = 'true' deploy[:absolute_document_root] = '/srv/www/${APPLICATION_NAME}/current/' deploy[:migrate] = 'false' deploy[:sleep_before_restart] = '0' deploy[:scm] = 'revisionmasterrepositorygit@github.com:hogehoge/fugafuga.gitscm_typegitpasswordssh_key${SSH_PRIVATE_KEY}' deploy[:database] = 'passworddatabase${APPLICATION_NAME}reconnecttrueusernameroothost' deploy[:symlinks] = '' deploy[:mounted_at] = '' deploy[:stack] = 'needs_reloadtrue' deploy[:ssl_support] = 'false' deploy[:document_root] = '' deploy[:ignore_bundler_groups] = 'testdevelopment' deploy[:rails_env] = 'production' deploy[:enable_submodules] = 'true' deploy[:rake] = 'rake' deploy[:group] = 'apache' deploy[:symlink_before_migrate] = '' deploy[:nodejs] = 'restart_commandmonit restart node_web_app_${APPLICATION_NAME}stop_commandmonit stop node_web_app_${APPLICATION_NAME}' deploy[:restart_command] = 'echo 'restarting app'' deploy[:ssl_certificate_ca] = '' deploy[:ssl_certificate] = '' deploy[:application_type] = 'other' deploy[:shell] = '/bin/bash' deploy[:memcached] = 'port11211host' deploy[:domains] = '${APPLICATION_DOMAIN}${APPLICATION_NAME}' deploy[:migrate_command] = 'if [ -f Gemfile ]; then echo 'OpsWorks: Gemfile found - running migration with bundle exec' && /usr/local/bin/bundle exec rake db:migrate; else echo 'OpsWorks: no Gemfile - running plain migrations' && rake db:migrate; fi' deploy[:action] = 'deploy' deploy[:shallow_clone] = 'false' deploy[:environment] = 'RACK_ENVHOME/home/deployRAILS_ENVRUBYOPT' deploy[:deploy_to] = '/srv/www/${APPLICATION_NAME}' deploy[:release] = '20130522080819' deploy[:user] = 'deploy' deploy[:auto_npm_install_on_deploy] = 'true' deploy[:ssl_certificate_key] = '' deploy[:release_path] = '/srv/www/${APPLICATION_NAME}/releases/20130522080819'
ひとこと
ココを使えば一つのrecipeで本番用とテスト環境用とで、処理を切り替えることができそうです。
例えば本番用とテスト環境用とで、コンフィグファイルを切り替えたい時には
node[:deploy].each do |application,deploy| if deploy[:application] == "本番用のアプリケーション名" #本番用の処理 elsif deploy[:application] == "テスト用のアプリケーション名" #テスト用の処理 end end
といったように処理を変える事が出来そうです。
本当はApplicationの値だけでなくて、LayerとかStackで決めた値も取れるかなと期待していたのですが、今回見つける事ができませんでした。
もしかしたら他のところにあるかもしれないので、見つけ次第追記します。
追記!
コメントで教えてもらえました!
こちらの方法で、Stack名とかも確認出来ています。ありがとうございます!
[chef]nodeのアトリビュートをファイルにダンプするレシピ、OpsWorksも対応