使用自定义 JSON - AWS OpsWorks

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

使用自定义 JSON

重要

该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

有几个 AWS OpsWorks Stacks 操作允许你指定自定义 JSON, AWS OpsWorks Stacks 会将其安装在实例上并可供配方使用。

您可以在以下情况下指定自定义 JSON:

  • 当您创建、更新或克隆堆栈时。

    AWS OpsWorks Stacks 在所有实例上安装自定义 JSON,用于所有后续生命周期事件

  • 当您运行部署或堆栈命令时。

    AWS OpsWorks Stacks 仅将该事件的自定义 JSON 传递给实例。

自定义 JSON 必须由有效的 JSON 对象表示,并且必须格式化为有效的 JSON 对象。例如:

{ "att1": "value1", "att2": "value2" ... }

AWS OpsWorks 堆栈将自定义 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

注意

在 Chef 11.10 和较早版本的 Linux 中,自定义 JSON 位于 Linux 实例的以下路径中,Windows 实例不可用,且没有 attribs.json 文件。日志存储在与 JSON 相同的文件夹或目录中。有关 Chef 11.10 和较早版本的 Linux 中的自定义 JSON 的信息,请参阅用自定义 JSON 覆盖属性Chef 日志

/var/lib/aws/opsworks/chef/hostname.json

在上述路径中,run-ID 是 AWS OpsWorks Stacks 分配给实例上每个 Chef 运行的唯一 ID,hostname 是实例的主机名。

要访问 Chef 配方的自定义 JSON,请使用标准 Chef node 语法。

例如,假设您想为您要部署的某个应用程序定义简单的设置,如该应用程序最初是否显示,以及该应用程序的初始前台和后台颜色。假设您使用如下所示的 JSON 对象来定义这些应用程序设置:

{ "state": "visible", "colors": { "foreground": "light-blue", "background": "dark-gray" } }

声明堆栈的自定义 JSON:

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

  2. 对于 Custom Chef JSON,键入 JSON 对象,然后选择 Save

注意

您可以在部署、层和堆栈级别声明自定义 JSON。如果您希望某些自定义 JSON 仅对单个部署或层显示,则建议您执行此操作。或者,例如,建议您使用在层级别声明的自定义 JSON 来临时覆盖在堆栈级别声明的自定义 JSON。如果您在多个级别声明自定义 JSON,则在部署级别声明的自定义 JSON 将覆盖同时在层级别和堆栈级别声明的任何自定义 JSON。在层级别声明的自定义 JSON 会覆盖只在堆栈级别声明的任何自定义 JSON。

要使用 AWS OpsWorks Stacks 控制台为部署指定自定义 JSON,请在部署应用程序页面上选择高级。在 Custom Chef JSON 框中键入自定义 JSON,然后选择 Save

要使用 AWS OpsWorks Stacks 控制台为图层指定自定义 JSON,请在图层页面上为所需图层选择设置。在 Custom JSON 框中键入自定义 JSON,然后选择 Save

有关更多信息,请参阅 编辑图 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) 上。然后,您的自定义配方可以使用 AWS CLIAWS SDK for Ruby 将 Amazon S3 存储桶中的数据下载到您的实例。