使用自定义 JSON - AWS OpsWorks

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

使用自定义 JSON

重要

这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过 AWS 高级支持

有几个 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,请执行以下操作:

  1. 在堆栈页面上,选择 Stack Settings,然后选择 Edit

  2. 对于 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) 上。然后,您的自定义食谱可以使用AWSCLIAWS SDK for Ruby将数据从 Amazon S3 存储桶下载到您的实例。