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

Posted

技术标签:

【中文标题】如何增加 AWS Opsworks 的部署超时限制?【英文标题】:How to increase deploy timeout limit at AWS Opsworks? 【发布时间】:2014-06-22 09:11:04 【问题描述】:

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

错误

[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:

提前致谢。

【问题讨论】:

How to set a timeout in deploy_revision provider?的可能重复 不同类型的错误,不同类型的解决方案,但相似的主题(见我的回答)。 【参考方案1】:

首先,正如 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 调用中合并这些选项。

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

【讨论】:

真的有人试过这个吗?我尝试了许多变体——将代码放在我的食谱中 opsworks_commons/libraries/shellout.rb,将它放在我实际食谱的顶部等,但在增加超时限制方面都没有任何运气。我实际上在 shellout 方法中放了一条日志消息,它似乎根本没有被调用。想法? 它确实对我们有用。每次更新自定义说明书存储库后,您是否调用了“更新自定义说明书”命令?它位于Stack -> Run command -> "Update custom cookbooks" 下,您的自定义食谱代码显然需要推送到您的远程存储库。您遇到了什么错误? 我正在使用 cloudformation,然后再次运行整个模板,设置了一个新堆栈。我肯定有更新的厨师代码正在运行(因为我将日志语句放入其中),但它总是超时设置 Java。我发现我可以通过使用更大的实例来解决这个问题,但最好知道如何手动配置它。如果你有一个公开的例子,请分享! p.s.我正在使用 Chef 11.10 - 但看起来这段代码对该版本仍然有效。

以上是关于如何增加 AWS Opsworks 的部署超时限制?的主要内容,如果未能解决你的问题,请参考以下文章

如何终止 AWS Opsworks 中的部署?

如何在 MacOS 中安装 chef 12 以部署到 AWS Opsworks?

如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?

如何使用内置 Java 应用层在 AWS OpsWorks 上部署 Jenkins?

如何对从 AWS OpsWorks 部署的应用程序拥有组可写文件权限?

如何在 AWS OpsWorks 上调试 Ruby On Rails?