本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用自定义覆盖属性 JSON
重要
这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过
注意
因为 AWS OpsWorks 堆栈处理 Windows 堆栈的 Chef 运行方式与 Linux 堆栈不同,你不能将本节中讨论的技术用于 Windows 堆栈。
重写一个的最简单方法 AWS OpsWorks Stacks 属性是在自定义中定义的JSON,它优先于堆栈配置和部署属性以及内置和自定义食谱default
属性。有关更多信息,请参阅 属性优先顺序。
重要
您应谨慎地覆盖堆栈配置和部署属性。例如,覆盖 opsworks
命名空间中的属性可能会影响内置配方。有关更多信息,请参阅 堆栈配置和部署属性。
您也可以使用 custom JSON 来定义唯一的属性,通常用于将数据传递给您的自定义配方。这些属性将简单地并入到节点对象中,并且配方可通过使用标准 Chef 节点语法来引用它们。
如何指定自定义 JSON
要使用 custom JSON 覆盖属性值,必须先确定该属性的完全限定属性名称。然后,创建一个包含要覆盖的属性的JSON对象,将其设置为首选值。为方便起见,堆栈配置和部署属性:Linux 和内置说明书属性文档一般使用堆栈配置、部署和内置说明书属性,包括其完全限定名称。
对象的父子关系必须对应于适当的完全限定的 Chef 节点。例如,假设您需要更改以下 Apache 属性:
-
keepalivetimeout 属性,其节点为
node[:apache][:keepalivetimeout]
并且具有默认值3
。 -
logrotate
schedule 属性,其节点为node[:apache][:logrotate][:schedule]
,并且具有默认值"daily"
。
要覆盖属性并将值分别设置为5
和"weekly"
,应使用以下自定义JSON:
{ "apache" : { "keepalivetimeout" : 5, "logrotate" : { "schedule" : "weekly" } } }
何时指定自定义 JSON
您可以为以下任务指定自定义JSON结构:
对于每项任务, AWS OpsWorks Stacks 将自定义JSON属性与堆栈配置和部署属性合并,然后将其发送到实例,然后合并到节点对象中。但是,请注意以下事项:
-
如果您在创建、克隆或更新堆栈JSON时指定自定义,则这些属性将合并到所有后续生命周期事件和堆栈命令的堆栈配置和部署属性中。
-
如果您JSON为部署指定自定义,则这些属性将仅合并到相应事件的堆栈配置和部署属性中。
如果要在后续部署中使用这些自定义属性,则必须JSON再次明确指定自定义属性。
请务必记住,这些属性仅在配方使用它们时才会影响实例。如果您覆盖某个属性值,但没有后续配方引用该属性,则更改不会产生影响。您必须确保在关联配方运行之前发送自定义JSON配方,或者确保重新运行相应的配方。
自定义JSON最佳实践
你可以使用 custom JSON 来覆盖任何 AWS OpsWorks Stacks 属性,但是手动输入信息有点麻烦,而且不受任何来源控制。自定义JSON最适合用于以下目的:
-
您只想覆盖少量属性,并且您无需使用自定义说明书。
使用自定义JSON,您可以避免仅仅为了覆盖几个属性而设置和维护食谱存储库所产生的开销。
-
敏感值,如密码或身份验证密钥。
说明书属性存储在一个存储库中,因此所有敏感信息都有泄露风险。取而代之的是,使用虚拟值定义属性,然后使用自定义值JSON来设置实际值。
-
预计会变化的值。
例如,建议的做法是通过不同的开发和暂存堆栈来支持您的生产堆栈。假设这些堆栈支持某个用于接受付款的应用程序。如果您使用自定义JSON来指定支付端点,则可以URL为暂存堆栈指定测试。当您准备好将更新的堆栈迁移到生产堆栈时,您可以使用相同的食谱并使用自定义JSON将支付端点设置为生产URL环境。
-
特定于某个特殊堆栈或部署命令的值。