属性优先顺序 - AWS OpsWorks

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

属性优先顺序

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够正常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时它们将停产。为准备此过渡,我们建议您尽快将堆栈过渡到AWS Systems Manager。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终止常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager Application Manager

如果一个属性是唯一定义的,Chef 则会简单地将它并入到节点对象中。但是,任何属性源可定义任何属性,因此有可能同一个属性会具有多个使用不同的值的定义。例如,内置 apache2 说明书定义 node[:apache][:keepalive],但是您也可在自定义 JSON 或自定义说明书中定义该属性。如果一个属性具有多个定义,则将按下文中描述的顺序对这些定义进行评估,节点对象将接收具有最高最先顺序的定义。

属性的定义如下所示:

node.type[:attribute][:sub_attribute][:...]=value

如果一个属性具有多个定义,则类型将确定哪个定义具有优先顺序,并将该定义并入到节点对象中。Stacks 使用下列属性类型:

  • default-这是最常见的类型,并且它实际上意味着“如果属性尚未定义,请使用此值。” 如果属性的所有定义都是 default 类型,则评估顺序中的第一个定义具有优先顺序并且后续值将被忽略。请注意,AWS OpsWorks Stacks 会将所有堆栈配置和部署属性定义设置为 default 类型。

  • normal-此类型的属性将覆盖评估顺序中之前定义的任何 defaultnormal 属性。例如,如果第一个属性来自内置说明书并且具有 default 类型,第二个是具有 normal 类型的用户定义属性,则第二个定义具有优先顺序。

  • set -这是您可能会在早期说明书中看到的已弃用类型。它已由具有相同的优先顺序的 normal 取代。

Chef 支持多种其他属性类型,包括优先于所有其他属性定义的 automatic 类型。Chef 的 Ohai 工具生成的属性定义均为 automatic 类型,因此它们实际上是只读的。这通常不是问题,因为没有理由覆盖它们并且它们与 AWS OpsWorks Stacks 的属性截然不同。但是,您应谨慎为您的自定义说明书属性命名,以便将它们与 Ohai 属性区分开。有关更多信息,请参阅关于属性

注意

Ohai 工具是您可通过命令行运行的可执行文件。要列出某个实例的 Ohai 属性,请登录该实例并在终端窗口中运行 ohai。请注意,此操作将生成一个非常长的输出。

下面是将各种属性定义并入到节点对象中的步骤:

  1. 将任何自定义堆栈配置属性合并到堆栈配置和部署属性中。

    可为堆栈或某个特殊部署设置自定义 JSON 属性。它们在评估顺序中优先并且实际上为 normal 类型。如果一个或多个堆栈配置属性也是在自定义 JSON 中定义的,则自定义 JSON 值将优先。否则,AWS OpsWorks Stacks 只是将自定义 JSON 属性并入到堆栈配置中。

  2. 将任何部署自定义 JSON 属性合并到堆栈配置和部署属性中。

    部署自定义 JSON 属性实际上也是 normal 类型,因此它们优先于内置和自定义堆栈配置 JSON 以及内置部署 JSON。

  3. 将堆栈配置和部署属性合并到实例的节点对象中。

  4. 将实例的内置说明书属性合并到节点对象中。

    内置说明书属性均为 default 类型。如果一个或多个内置说明书属性也是在堆栈配置和部署属性中定义的(通常因为您使用自定义 JSON 定义它们),堆栈配置定义将优先于内置说明书定义。所有其他内置说明书属性将简单地合并到节点对象中。

  5. 将实例的自定义说明书属性合并到节点对象中。

    自定义说明书属性通常是 normaldefault 类型。唯一属性将合并到节点对象中。如果步骤 1 至步骤 3 中还定义了任何自定义说明书属性 (通常是因为您使用自定义 JSON 定义了它们),则优先顺序取决于自定义说明书属性的类型:

    • 步骤 1-步骤 3 中定义的属性优先于自定义说明书 default 属性。

    • 自定义说明书 normal 属性优先于步骤 1 - 步骤 3 中的定义。

重要

请勿使用自定义说明书 default 属性覆盖堆栈配置或内置说明书属性。由于自定义说明书属性将最后进行评估,因此 default 属性具有最低的优先顺序,并且无法覆盖任何属性。