認証に問題が無いのに404 Forbiddenになる
chef-clientを走らせていて、以下のようなエラーにたまに出くわします:
198.xx.xxx.xxx ================================================================================
198.xx.xxx.xxx Error executing action `create` on resource 'template[/var/www/mysite.com/shared/config/database.yml]'
198.xx.xxx.xxx ================================================================================
198.xx.xxx.xxx
198.xx.xxx.xxx Net::HTTPServerException
198.xx.xxx.xxx ------------------------
198.xx.xxx.xxx
198.xx.xxx.xxx 403 "Forbidden"
198.xx.xxx.xxx
198.xx.xxx.xxx
198.xx.xxx.xxx Resource Declaration:
198.xx.xxx.xxx
198.xx.xxx.xxx ---------------------
198.xx.xxx.xxx # In /var/chef/cache/cookbooks/rails/recipes/production.rb
198.xx.xxx.xxx
198.xx.xxx.xxx 40: template node[:rails][:app_root]+"/shared/config/database.yml" do
198.xx.xxx.xxx 41: owner "root"
198.xx.xxx.xxx 42: group "xx-dev"
198.xx.xxx.xxx 43: mode 0775
198.xx.xxx.xxx 44: end
198.xx.xxx.xxx 45:
198.xx.xxx.xxx
198.xx.xxx.xxx Compiled Resource:
198.xx.xxx.xxx
198.xx.xxx.xxx ------------------
198.xx.xxx.xxx
198.xx.xxx.xxx # Declared in /var/chef/cache/cookbooks/rails/recipes/production.rb:40:in `from_file'
198.xx.xxx.xxx
198.xx.xxx.xxx template("/var/www/mysite.com/shared/config/database.yml") do
198.xx.xxx.xxx provider Chef::Provider::Template
198.xx.xxx.xxx action "create"
198.xx.xxx.xxx retries 0
198.xx.xxx.xxx retry_delay 2
198.xx.xxx.xxx path "/var/www/mysite.com/shared/config/database.yml"
198.xx.xxx.xxx backup 5
198.xx.xxx.xxx source "database.yml.erb"
198.xx.xxx.xxx cookbook_name "rails"
198.xx.xxx.xxx recipe_name "production"
198.xx.xxx.xxx mode 509
198.xx.xxx.xxx owner "root"
198.xx.xxx.xxx group "xx-dev"
198.xx.xxx.xxx end
198.xx.xxx.xxx
198.xx.xxx.xxx [2014-05-29T20:16:34+00:00] ERROR: Running exception handlers
198.xx.xxx.xxx [2014-05-29T20:16:34+00:00] FATAL: Saving node information to /var/chef/cache/failed-run-data.json
198.xx.xxx.xxx [2014-05-29T20:16:34+00:00] ERROR: Exception handlers complete
198.xx.xxx.xxx [2014-05-29T20:16:34+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
198.xx.xxx.xxx [2014-05-29T20:16:34+00:00] FATAL: Net::HTTPServerException: template[/var/www/mysite.com/shared/config/database.yml] (rails::production line 40) had an error: Net::HTTPServerException: 403 "Forbidden"
しかし、最初はうまく走っていたので、認証周りで何かおかしいとは考え難い現象です。
no_lazy_loadを指定してみる
もしあなたのchef-client
が、十数分とか長い時間動作しているとしたら、以下のフラグをclient.rb
に追記すると改善するかもしれません:
no_lazy_load true
chef-clientは必要に応じてcookbook_file
やtemplate
を取得します(lazy-load)。
しかし、長い時間走らせていると、認証がタイムアウトするようです。
これを防ぐため、no_lazy_load true
を指定することでlazy-loadを無効にします。
これによって、はじめに必要なデータをすべて取得するようになります。