Attributes - AWS OpsWorks

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

Attributes

重要

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

配方和模板取决于各种值,如配置设置。您可以创建一个包含表示每个值的属性的属性文件,而不是直接在配方或模板中对这些值进行硬编码。然后,在您的配方或模板中使用这些属性而不是显式值。使用属性的优点是,您可以覆盖属性值而不用接触到说明书。因此,您应始终使用属性来定义以下类型的值:

  • 因堆栈不同或随时间可能发生变化的值,如用户名。

    如果对这类值进行硬编码,您必须在每次需要更改值时更改相应的配方或模板。通过使用属性定义这些值,您可以针对每个堆栈使用相同的说明书,而且只需覆盖相应的属性。

  • 敏感值,如密码或私有密钥。

    将显式敏感值放置于您的说明书中可能会增加暴露的风险。相反,应使用虚拟值定义属性,然后覆盖它们以设置实际值。覆盖这类属性的最佳方法是使用自定义 JSON。有关更多信息,请参阅 使用自定义 JSON

有关属性以及如何覆盖它们的更多信息,请参阅覆盖属性

以下示例是示例属性文件的一部分。

... default["apache"]["listen_ports"] = [ '80','443' ] default["apache"]["contact"] = 'ops@example.com' default["apache"]["timeout"] = 120 default["apache"]["keepalive"] = 'Off' default["apache"]["keepaliverequests"] = 100 default["apache"]["keepalivetimeout"] = 3 default["apache"]["prefork"]["startservers"] = 16 default["apache"]["prefork"]["minspareservers"] = 16 default["apache"]["prefork"]["maxspareservers"] = 32 default["apache"]["prefork"]["serverlimit"] = 400 default["apache"]["prefork"]["maxclients"] = 400 default["apache"]["prefork"]["maxrequestsperchild"] = 10000 ...

AWS OpsWorks Stacks 通过使用以下语法定义属性:

node.type["attribute"]["subattribute"]["..."]=value

您也可以使用冒号 (:),如下所示:

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

一个属性定义包含以下部分:

node.

node. 前缀是可选的且通常会被省略,如示例中所示。

type

类型用于管理是否可以覆盖属性。AWS OpsWorks Stacks 属性通常使用以下类型之一:

  • default 是最常用类型,因为它允许覆盖属性。

  • normal 定义一个用于覆盖标准 AWS OpsWorks Stacks 属性值之一的属性。

注意

Chef 还支持其他类型,这对于 AWS OpsWorks Stacks 来说可能不必要,但对于您的项目可能会有用。有关更多信息,请参阅关于属性

attribute name

属性名称使用标准 Chef 节点语法:[:attribute][:subattribute][...]。您可以为您的属性使用您喜欢的任何名称。不过,如覆盖属性中所讨论的,自定义说明书属性与来自堆栈配置的属性和部署属性,以及 Chef 的 Ohai 工具一起,合并到实例的节点对象中。常用配置名称 (如 portuser) 可能会显示在各种说明书中。

为避免名称冲突,通常的做法是创建至少包含两个元素的限定属性名称,如示例中所示。第一个元素应是唯一的且通常基于产品名称,如 Apache。它后接一个或多个标识特定值的子属性,如 [:user][:port]。您可以根据项目的需要使用任意数量的子属性。

value

一个属性可设置为以下类型的值:

  • 字符串,如 default[:apache][:keepalive] = 'Off'

  • 数字 (不带引号),如 default[:apache][:timeout] = 120

  • 布尔值,可以是 truefalse (不带引号)。

  • 值列表,如 default[:apache][:listen_ports] = [ '80','443' ]

属性文件是一个 Ruby 应用程序,因此您还可以使用节点语法和逻辑运算符来基于其他属性分配值。有关如何定义属性的更多信息,请参阅关于属性。有关使用属性文件的示例,请参阅 AWS OpsWorkshttps://github.com/aws/opsworks-cookbooks 上的 Stacks 内置说明书。