如何在AWS Opsworks上增加部署超时限制?

时间:2014-05-05 22:40:43

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

我想在托管许多应用程序的堆栈层(AWS Opsworks)中增加部署时间。 Currenlty我收到以下错误:

Eror

[2014-05-05T22:27:51+00:00] ERROR: Running exception handlers
[2014-05-05T22:27:51+00:00] ERROR: Exception handlers complete
[2014-05-05T22:27:51+00:00] FATAL: Stacktrace dumped to /var/lib/aws/opsworks/cache/chef-stacktrace.out
[2014-05-05T22:27:51+00:00] ERROR: deploy[/srv/www/lakers_test] (opsworks_delayed_job::deploy line 65) had an error: Mixlib::ShellOut::CommandTimeout: Command timed out after 600s:

提前致谢。

1 个答案:

答案 0 :(得分:2)

首先,如上所述in this ticket报告类似问题,Opsworks的人建议先尝试加速通话(总是有优化空间)。

如果这不起作用,我们可以走下兔洞:this gets called,然后调用Mixlib::ShellOut.new,恰好有timeout option你可以通过初始化!

现在,您可以使用 Opsworks自定义菜谱来覆盖初始方法,并传递相应的超时选项。 Opsworks将其base cookbooks的内容与您自定义食谱的内容合并 - 因此您只需添加&将一个文件编辑到您的自定义食谱:opsworks_commons/libraries/shellout.rb

module OpsWorks
  module ShellOut
    extend self

    # This would be your new default timeout.
    DEFAULT_OPTIONS = { timeout: 900 }

    def shellout(command, options = {})
      cmd = Mixlib::ShellOut.new(command, DEFAULT_OPTIONS.merge(options))
      cmd.run_command
      cmd.error!
      [cmd.stderr, cmd.stdout].join("\n")
    end
  end
end

请注意唯一的添加内容仅为DEFAULT_OPTIONS,并在Mixlib::ShellOut.new调用中合并这些选项。

此方法的改进是通过主厨属性更改此超时选项,您可以通过Opsworks界面中的自定义JSON 进行更新。这意味着在初始timeout调用中传递Opsworks::ShellOut.shellout属性 - 而不是在方法定义中。但这取决于实际调用shellout方法的方式......