

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 步驟 14：更新技術指南以使用反覆運算
步驟 14：建立使用反覆運算的配方

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 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 (執行 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)中，您會更新技術指南，僅於滿足特定條件時執行配方程式碼。