数据包“aws_opsworks_instance”不可用
Posted
技术标签:
【中文标题】数据包“aws_opsworks_instance”不可用【英文标题】:Data bag 'aws_opsworks_instance' not available 【发布时间】:2020-02-02 01:11:40 【问题描述】:有谁知道为什么
instance = search('aws_opsworks_instance', 'self:true').first
# ...
instance_host: instance['hostname']
会间歇性地导致
nil:NilClass 的未定义方法 `[]'
在 OpsWorks 上?
我已经搜索了几个小时,但没有找到任何东西,所以我开始认为这是副产品,而不是实际问题。
由于它每隔一段时间就会发生一次,我认为这可能是一种“竞争条件”。也许 OpsWorks 需要一段时间来注入它,所以需要告诉 Chef 等待?如果是这样,我在文档中找不到任何类似的东西。
任何想法为什么会发生这种情况以及如何解决/避免它?
【问题讨论】:
【参考方案1】:这是特定于 aws opswork 的。这是aws documentation的摘录:
Chef search 和
self:true
查找包含与正在执行配方的实例相关的信息的 data bag 项。
根据您帖子的输出,instance
是 null
,这是在没有搜索结果时 search()
返回的值。
也许使用 --log_level debug
运行 chef-client 会揭示更多信息或尝试联系 aws 支持团队。
【讨论】:
是的,我也想通了。我已经阅读了文档,似乎这个数据包是由 OpsWorks 注入的。我没有找到任何解释为什么它似乎偶尔无法这样做的任何东西。有什么想法吗? @chrisandrew.cl:我已经更新了我的答案,希望对你有帮助 我还没有时间尝试调试配方,但如果我没有很快得到回复(来自 AWS 或 SO),我肯定会这样做。谢谢您的回答! :)【参考方案2】:OpsWorks 似乎依赖实例名称来识别这些数据包,因此由于我们的脚本要求同时创建多个新实例,因此在分配名称时会出现一些冲突(即名称重复)。
通过将 OpsWorks 命名主题从 Greek_Deities_and_Titans
(例如 hercules、zeus、poseidon)更改为 Layer_Dependent
(例如 api1、api2、notifications1、notification2)来避免该问题。
虽然对于 Opsworks 命名两个同名实例的问题可能不是最终的解决方案,但我还没有遇到使用 Layer_Dependent 命名的问题,所以至少机会大大减少了。
【讨论】:
以上是关于数据包“aws_opsworks_instance”不可用的主要内容,如果未能解决你的问题,请参考以下文章