使用自定义 JSON - AWS OpsWorks

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

使用自定义 JSON

您可以通过多个 AWS OpsWorks Stacks 操作指定 AWS OpsWorks Stacks 安装在实例上且可由配方使用的自定义 JSON。

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

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

    AWS OpsWorks Stacks 在所有后继的生命周期事件的所有实例上安装自定义 JSON。

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

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

自定义 JSON 必须由有效的 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

注意

在 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,请在 Deploy App (部署应用程序) 页面上,选择 Advanced (高级)。在 Custom Chef JSON 框中键入自定义 JSON,然后选择 Save

要使用 AWS OpsWorks Stacks 控制台为层指定自定义 JSON,请在 Layers (层) 页面上,选择所需层的 Settings (设置)。在 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 CLI适用于 Ruby 的 AWS 开发工具包 将 Amazon S3 存储桶中的数据下载到您的实例。