本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用自定义 JSON
重要
这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过
有几个 AWS OpsWorks 堆栈操作允许您指定自定义JSON,哪个 AWS OpsWorks 堆栈安装在实例上,可供配方使用。
JSON在以下情况下,您可以指定自定义:
-
当您创建、更新或克隆堆栈时。
AWS OpsWorks Stacks 会为所有后续生命周期事件JSON在所有实例上安装自定义。
-
当您运行部署或堆栈命令时。
AWS OpsWorks Stacks 仅将该事件JSON的自定义传递给实例。
Custom JSON 必须由有效对象表示并格式化为有效JSON对象。例如:
{ "att1": "value1", "att2": "value2" ... }
AWS OpsWorks Stacks 将定制存储JSON在以下位置:
在 Linux 实例上:
-
/var/chef/runs/
run-ID
/attribs.json -
/var/chef/runs/
run-ID
/nodes/hostname
.json
在 Windows 实例上:
-
drive
:\chef\runs\run-ID
\attribs.json -
drive
:\chef\runs\run-ID
\nodes\hostname
.json
注意
在适用于 Linux 的 Chef 11.10 及更早版本中,在 Linux 实例上,自定义JSON位于以下路径中,Windows 实例不可用,也没有attribs.json
文件。日志存储在与相同的文件夹或目录中JSON。有关适用于 Linux 的 Chef 11.10 及更早版本JSON中的自定义的更多信息,请参阅使用自定义JSON和 Chef 日志覆盖属性。
/var/lib/aws/opsworks/chef/
hostname
.json
在前面的路径中,run-ID
是一个唯一的 ID AWS OpsWorks 堆栈分配给在实例上运行的每个 Chef,以及 hostname
是实例的主机名。
要JSON从 Chef 食谱中访问自定义,请使用标准的 Chef node
语法。
例如,假设您想为您要部署的某个应用程序定义简单的设置,如该应用程序最初是否显示,以及该应用程序的初始前台和后台颜色。假设你用一个JSON对象定义这些应用程序设置,如下所示:
{ "state": "visible", "colors": { "foreground": "light-blue", "background": "dark-gray" } }
要为堆栈声明自定义JSON,请执行以下操作:
-
在堆栈页面上,选择 Stack Settings,然后选择 Edit。
-
对于 Custom Chef JSON,键入JSON对象,然后选择 “保存”。
注意
您可以在部署、层和堆栈级别声明自定义JSON。如果您希望某些自定义仅对单个部署或层JSON可见,则可能需要这样做。或者,例如,您可能想暂时覆盖在堆栈级别JSON声明的 custom,并在层级别JSON声明自定义。如果您JSON在多个级别上声明自定义,则在部署级别JSON声明的 custom 会覆盖在层和堆栈级别JSON声明的任何自定义。在层级JSON声明的自定义会覆盖仅在堆栈级别JSON声明的任何自定义。
要再次使用 AWS OpsWorks Stacks 控制台要JSON为部署指定自定义,请在 “部署应用程序” 页面上选择 “高级”。在 “自定义 ChefJSON” 框JSON中键入自定义,然后选择 “保存”。
要再次使用 AWS OpsWorks Stacks 控制台要JSON为图层指定自定义,请在 “图层” 页面上为所需图层选择设置。在 “自定义JSON” 框JSON中键入自定义,然后选择 “保存”。
有关更多信息,请参阅编辑图 OpsWorks 层的配置 和部署应用程序。
当你运行部署或堆栈命令时,配方可以使用标准的 Chef node
语法来检索这些自定义值,该语法直接映射到自定义JSON对象中的层次结构。例如,以下配方代码将有关上述自定义JSON值的消息写入 Chef 日志:
Chef::Log.info("********** The app's initial state is '#{node['state']}' **********") Chef::Log.info("********** The app's initial foreground color is '#{node['colors']['foreground']}' **********") Chef::Log.info("********** The app's initial background color is '#{node['colors']['background']}' **********")
这种方法可用于将数据传递给配方。 AWS OpsWorks Stacks 会将这些数据添加到实例,而配方可以通过使用标准 Chef node
语法来检索这些数据。
注意
JSON“自定义” 限制在 120 KB 以内。如果您需要更多容量,则建议您将部分数据存储在 Amazon Simple Storage Service (Amazon S3) 上。然后,您的自定义食谱可以使用AWSCLI