本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Attributes
重要
这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过
配方和模板取决于各种值,如配置设置。您可以创建一个包含表示每个值的属性的属性文件,而不是直接在配方或模板中对这些值进行硬编码。然后,在您的配方或模板中使用这些属性而不是显式值。使用属性的优点是,您可以覆盖属性值而不用接触到说明书。因此,您应始终使用属性来定义以下类型的值:
-
因堆栈不同或随时间可能发生变化的值,如用户名。
如果对这类值进行硬编码,您必须在每次需要更改值时更改相应的配方或模板。通过使用属性定义这些值,您可以针对每个堆栈使用相同的说明书,而且只需覆盖相应的属性。
-
敏感值,如密码或私有密钥。
将显式敏感值放置于您的说明书中可能会增加暴露的风险。相反,应使用虚拟值定义属性,然后覆盖它们以设置实际值。覆盖此类属性的最佳方法是使用自定义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
type
类型用于管理是否可以覆盖属性。 AWS OpsWorks Stacks 属性通常使用以下类型之一:
-
default
是最常用类型,因为它允许覆盖属性。 -
normal
定义一个覆盖其中一个标准的属性 AWS OpsWorks 堆叠属性值。
注意
Chef 支持其他类型,这不是必需的 AWS OpsWorks 堆叠但可能对你的项目有用。有关更多信息,请参阅关于属性
attribute
name
attribute
name
属性名称使用标准 Chef 节点语法:[:
。您可以为您的属性使用您喜欢的任何名称。不过,如覆盖属性中所讨论的,自定义说明书属性与来自堆栈配置的属性和部署属性,以及 Chef 的 Ohai 工具attribute
][:subattribute
][...]
为避免名称冲突,通常的做法是创建至少包含两个元素的限定属性名称,如示例中所示。第一个元素应是唯一的且通常基于产品名称,如 Apache。它后接一个或多个标识特定值的子属性,如 [:user]
或 [:port]
。您可以根据项目的需要使用任意数量的子属性。
value
一个属性可设置为以下类型的值:
-
字符串,如
default[:apache][:keepalive] = 'Off'
。 -
数字 (不带引号),如
default[:apache][:timeout] = 120
。 -
布尔值,可以是
true
或false
(不带引号)。 -
值列表,如
default[:apache][:listen_ports] = [ '80','443' ]
属性文件是一个 Ruby 应用程序,因此您还可以使用节点语法和逻辑运算符来基于其他属性分配值。有关如何定义属性的更多信息,请参阅关于属性