

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

# 第 12 步：更新说明书以使用自定义 JSON
<a name="gettingstarted-cookbooks-custom-json"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

通过添加可引用存储于实例上的自定义 JSON 的配方，更新您的说明书。

当您创建、更新或克隆堆栈时，或者当您运行部署或堆栈命令时，您可以以自定义的 JSON 格式指定信息。例如，这对为实例上您的配方提供小部分不变数据来代替从数据库中获得此数据来说非常有用。有关更多信息，请参阅 [使用自定义 JSON](workingstacks-json.md)。

在本演练中，您将使用自定义 JSON 来提供关于客户发票的一些虚构信息。本步骤后面部分将对自定义 JSON 进行讲解。

**更新实例上的说明书并运行新的配方**

1. 在您的本地工作站上的 `recipes` 目录的 `opsworks_cookbook_demo` 子目录中，创建名为 `custom_json.rb` 的包含以下配方代码的文件：

   ```
   Chef::Log.info("********** For customer '#{node['customer-id']}' invoice '#{node['invoice-number']}' **********")
   Chef::Log.info("********** Invoice line number 1 is a '#{node['line-items']['line-1']}' **********")
   Chef::Log.info("********** Invoice line number 2 is a '#{node['line-items']['line-2']}' **********")
   Chef::Log.info("********** Invoice line number 3 is a '#{node['line-items']['line-3']}' **********")
   ```

   此配方显示日志中关于自定义 JSON 中的值的消息。

1. 在终端处或在命令提示符下，使用 **tar** 命令创建 `opsworks_cookbook_demo.tar.gz` 文件的新版本，该文件包含 `opsworks_cookbook_demo` 目录及其更新的内容。

1. 将更新后的 `opsworks_cookbook_demo.tar.gz` 文件上传到 S3 存储桶。

1. 按照[第 5 步：更新实例上的说明书并运行配方](gettingstarted-cookbooks-copy-cookbook.md)中的步骤，更新实例上的说明书并运行配方。在“运行配方”步骤中，对于 **Recipes to execute (要执行的配方)**，键入 **opsworks\$1cookbook\$1demo::custom\$1json**。对于 **Advanced**、**Custom Chef JSON**，键入以下自定义 JSON：

   ```
   {
     "customer-id": "0123",
     "invoice-number": "9876",
     "line-items": {
       "line-1": "tractor",
       "line-2": "passenger car",
       "line-3": "trailer"
     }
   }
   ```

**测试配方**

1. 通过上一步骤显示了 **Running command execute\$1recipes** 页面时，对于 **cookbooks-demo1** 中的 **Log**，选择 **show**。此时将显示 **execute\$1recipes** 日志页面。

1. 向下滚动日志以查找类似于以下内容的条目：

   ```
   [2015-11-14T14:18:30+00:00] INFO: ********** For customer '0123' invoice '9876' **********
   [2015-11-14T14:18:30+00:00] INFO: ********** Invoice line number 1 is a 'tractor' **********
   [2015-11-14T14:18:30+00:00] INFO: ********** Invoice line number 2 is a 'passenger car' **********
   [2015-11-14T14:18:30+00:00] INFO: ********** Invoice line number 3 is a 'trailer' **********
   ```

   这些条目显示在 **Advanced**、**Custom Chef JSON** 框中键入的自定义 JSON 的信息。

在[下一步](gettingstarted-cookbooks-data-bags.md)中，您将更新食谱以从数据袋中获取信息，数据袋是 Stac OpsWorks ks 在每个实例上存储的堆栈设置的集合。