如何在AWS OpsWorks上运行自定义配方?

时间:2014-06-18 08:29:39

标签: amazon-web-services chef chef-recipe aws-opsworks

我为我的简单自定义食谱创建了一个GitHub回购:

laravel/
  |- recipes/
     |  - deploy.rb
  |- templates/
     |- default
        |  - database.php.erb

我已将自定义厨师食谱的回购添加为https://github.com/minkruben/Laravel-opsworks.git

我已将laravel::deploy添加到部署“周期”。

这是我的deploy.rb:

node[:deploy].each do |app_name, deploy|
 if deploy[:application] == "platform"
 script "set_permissions" do
  interpreter "bash"
  user "root"
  cwd "#{deploy[:deploy_to]}/current/app"
  code <<-EOH
  chmod -R 777 storage
  EOH
end


template "#{deploy[:deploy_to]}/current/app/config/database.php" do
  source "database.php.erb"
  mode 0660
  group deploy[:group]

  if platform?("ubuntu")
    owner "www-data"
  elsif platform?("amazon")   
    owner "apache"
  end

  variables(
    :host =>     (deploy[:database][:host] rescue nil),
    :user =>     (deploy[:database][:username] rescue nil),
    :password => (deploy[:database][:password] rescue nil),
    :db =>       (deploy[:database][:database] rescue nil)
  )

 only_if do
   File.directory?("#{deploy[:deploy_to]}/current")
 end
end

end
end

当我通过SSH与ubuntu用户登录实例时,app / storage文件夹权限不会更改&amp; app/config/database.php未填充数据库详细信息。

我错过了某个关键步骤吗?日志中没有错误。 配方清晰可识别并加载,但似乎没有执行。

1 个答案:

答案 0 :(得分:2)

使用OpsWorks,您有两个选择:

  1. 使用亚马逊的内置图层之一,在这种情况下,部署配方由亚马逊提供,您可以使用钩子扩展亚马逊的逻辑:http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-extend-hooks.html
  2. 使用自定义图层,在这种情况下,您负责提供所有配方,包括部署:http://docs.aws.amazon.com/opsworks/latest/userguide/create-custom-deploy.html
  3. 这里的逻辑看起来更像是一个钩子,而不是一个部署配方。为什么?因为您只是修改已部署的应用程序而不是指定部署逻辑本身。这似乎表明您正在使用亚马逊的内置层之一,并且亚马逊正在为您提供部署配方。

    如果上述假设是正确的,那么你就在路径#1上。重新实现你的逻辑作为一个钩子应该可以做到这一点。