

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

# 第 14 步：更新说明书以使用迭代
<a name="gettingstarted-cookbooks-iteration"></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 支持 团队联系。

通过添加可使用*迭代* (一种多次重复配方代码的方法) 的配方，更新您的说明书。此配方会在日志中显示包含多方面内容的数据包项目的消息。

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

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

   ```
   stack = search("aws_opsworks_stack").first
   Chef::Log.info("********** Content of 'custom_cookbooks_source' **********")
   
   stack["custom_cookbooks_source"].each do |content|
     Chef::Log.info("********** '#{content}' **********")
   end
   ```
**注意**  
编写上述配方代码比编写下面未使用迭代的配方代码用时更短、更灵活，且较不容易出错。  

   ```
   stack = search("aws_opsworks_stack").first
   Chef::Log.info("********** Content of 'custom_cookbooks_source' **********")
   
   Chef::Log::info("********** '[\"type\", \"#{stack['custom_cookbooks_source']['type']}\"]' **********")
   Chef::Log::info("********** '[\"url\", \"#{stack['custom_cookbooks_source']['url']}\"]' **********")
   Chef::Log::info("********** '[\"username\", \"#{stack['custom_cookbooks_source']['username']}\"]' **********")
   Chef::Log::info("********** '[\"password\", \"#{stack['custom_cookbooks_source']['password']}\"]' **********")
   Chef::Log::info("********** '[\"ssh_key\", \"#{stack['custom_cookbooks_source']['ssh_key']}\"]' **********")
   Chef::Log::info("********** '[\"revision\", \"#{stack['custom_cookbooks_source']['revision']}\"]' **********")
   ```

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::iteration\$1demo**。

**测试配方**

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

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

   ```
   [2015-11-16T19:56:56+00:00] INFO: ********** Content of 'custom_cookbooks_source' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["type", "s3"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["url", "https://s3.amazonaws.com/amzn-s3-demo-bucket/opsworks_cookbook_demo.tar.gz"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["username", "secret-key-value"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["password", "secret-access-key-value"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["ssh_key", nil]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["revision", nil]' **********
   ```

   此配方会在日志中显示包含多方面内容的数据包项目的消息。数据包项目位于 `aws_opsworks_stack` 数据包中。数据包项目包含名为 `custom_cookbooks_source` 的内容。此内容包含六个部分，名称分别为 `type`、`url`、`username`、`password`、`ssh_key` 和 `revision`；还会显示它们的值。

在[下一步](gettingstarted-cookbooks-conditional-logic.md)中，您将更新说明书以仅在满足了某些条件后才运行配方代码。