数据包“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 项。

根据您帖子的输出,instancenull,这是在没有搜索结果时 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”不可用的主要内容,如果未能解决你的问题,请参考以下文章

如何将https数据包解密成http2数据包

蓝牙BLE数据包格式汇总

如何对抓到的数据包分析?

黑客是怎么截取数据包的?

抓包工具(如Charles)抓取Https数据包

Wireshark抓包分析---分析数据包