如何增加 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 的部署超时限制?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MacOS 中安装 chef 12 以部署到 AWS Opsworks?
如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?
如何使用内置 Java 应用层在 AWS OpsWorks 上部署 Jenkins?