

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

# 在 Windows OpsWorks Stacks 上使用 Stacks 特定的搜尋索引
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-opsworks"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

**注意**  
此範例假設您已完成[在 Windows 執行個體上執行配方](cookbooks-101-opsworks-opsworks-windows.md)範例。否則，您應該先執行該範例。具體而言，它說明如何啟用 RDP 存取您的執行個體。

OpsWorks 除了 之外， Stacks 還提供下列搜尋索引`node`：
+ `aws_opsworks_stack` – 堆疊組態。
+ `aws_opsworks_layer` – 堆疊的 layer 組態。
+ `aws_opsworks_instance` – 堆疊的執行個體組態。
+ `aws_opsworks_app` – 堆疊的應用程式組態。
+ `aws_opsworks_user` – 堆疊的使用者組態。
+ `aws_opsworks_rds_db_instance` – 已註冊 RDS 執行個體的連線資訊。

這些索引包含一些標準 Chef 屬性，但主要用於擷取 OpsWorks Stacks 特定的屬性。例如，`aws_opsworks_instance` 包括 `status` 屬性，以提供執行個體的狀態 (例如 `online`)。

**注意**  
建議的做法是盡可能使用 `node`，在讓您的配方與標準 Chef 使用量一致。如需範例，請參閱 [在 Windows 堆疊上使用搜尋索引節點](cookbooks-101-opsworks-opsworks-stack-config-search-node.md)。

此範例示範如何使用 OpsWorks Stacks 索引來擷取 OpsWorks Stacks 特定屬性的值。它根據自訂 layer 具有一個執行個體的簡單 Windows 堆疊。它使用 Chef 搜尋來取得執行個體的 OpsWorks Stacks ID，並將結果放入 Chef 日誌中。

以下簡短地彙總如何針對此範例建立堆疊。如需詳細資訊，請參閱[建立新的堆疊](workingstacks-creating.md)。

**建立堆疊**

1. 開啟 [OpsWorks Stacks 主控台](https://console.aws.amazon.com/opsworks/)，然後選擇 **\$1 Stack (\$1 堆疊)**。指定下列設定，並接受其他設定的預設值，然後選擇 **Add Stack (新增堆疊)**。
   + **名稱** – IDSearch
   + **區域** – 美國西部 （奧勒岡）

     此範例適用於任何區域，但我們建議您使用美國西部 （奧勒岡） 進行教學課程。
   + **預設作業系統** – Microsoft Windows Server 2012 R2

1. 選擇 **Add a layer (新增 layer)**，並[新增自訂 layer](workinglayers-custom.md) 至具有下列設定的堆疊。
   + **名稱** – IDCheck
   + **簡短名稱** – IDcheck

1. [新增全年無休 t2.micro 執行個體](workinginstances-add.md) (具有預設設定) 至 IDCheck layer，以及[啟動它](workinginstances-starting.md)。它將會命名為 iptest1。

   OpsWorks Stacks 會自動指派給`AWS-OpsWorks-RDP-Server`此執行個體。 [啟用 RDP 存取](cookbooks-101-opsworks-opsworks-windows.md#cookbooks-101-opsworks-opsworks-windows-rdp) 說明如何將傳入規則新增至此安全群組，以允許授權使用者登入執行個體。

1. 選擇 **Permissions (許可)**，並選擇 **Edit (編輯)**，然後選擇 **SSH/RDP** 和 **sudo/admin**。除了 `AWS-OpsWorks-RDP-Server` 安全群組之外，一般使用者還需要有此授權，才能登入執行個體。
**注意**  
您也可以登入為管理員，但需要不同的程序。如需詳細資訊，請參閱[使用 RDP 登入](workinginstances-rdp.md)。

**設定技術指南**

1. 建立並導覽至名為 `idcheck` 的目錄。

1. 使用下列內容建立 `metadata.rb` 檔案，並將它儲存至 `opstest`。

   ```
   name "idcheck"
   version "0.1.0"
   ```

1. 在 `idcheck` 內建立 `recipes` 目錄，並將 `default.rb` 檔案新增至包含下列配方的目錄。

   ```
   windowsserver = search(:aws_opsworks_instance, "hostname:idcheck*").first
   Chef::Log.info("**********The public IP address is: '#{windowsserver[:instance_id]}'**********")
   ```

   配方使用 Chef 搜尋搭配`aws_opsworks_instance`搜尋索引，取得堆疊中每個執行個體的[執行個體屬性](data-bag-json-instance.md)，其主機名稱開頭為 `idcheck`。如果您使用預設主題 (這會將整數附加至 layer 的短名來建立主機名稱)，則此查詢將會傳回 IDCheck layer 中的每個執行個體。在此範例中，layer 已知只有一個執行個體，因此配方只需要將第一個執行個體指派給 `windowsserver`。針對多個執行個體，您可以取得完整清單，然後列舉它們。

   配方會利用具有此主機名稱之堆疊中只有一個執行個體的事實，因此第一個結果就是正確的結果。如果您的堆疊具有多個執行個體，則搜尋其他屬性可能會傳回多個結果。如需執行個體屬性的清單，請參閱[執行個體資料包 (aws\$1opsworks\$1instance)](data-bag-json-instance.md)。

   執行個體屬性基本上是雜湊資料表，且執行個體的 Stacks ID OpsWorks 會指派給 `instance_id` 屬性，因此您可以將 ID 稱為 `windowsserver[:instance_id]`。配方會將對應的字串插入至訊息，並將其新增至 Chef 日誌。

1. 建立`ipaddress`技術指南的`.zip`封存、[上傳封存至 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)，並記錄封存的 URL。如需技術指南儲存庫的詳細資訊，請參閱[技術指南儲存庫](workingcookbook-installingcustom-repo.md)。

   傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊，請參閱[如何清空 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)或[如何刪除 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。

您現在可以安裝技術指南，並執行配方。

**安裝技術指南並執行配方**

1. [編輯堆疊以啟用自訂技術指南](workingcookbook-installingcustom-enable.md)，然後指定下列設定。
   + **儲存庫類型** – **S3 封存**
   + **儲存庫 URL** – 您先前記錄的技術指南封存 URL

   接受其他設定的預設值，然後選擇 **Save (儲存)** 以更新堆疊組態。

1. [執行更新自訂技術指南堆疊命令](workingstacks-commands.md)，以在堆疊執行個體上安裝最新版的自訂技術指南 (包括線上執行個體)。如果存在舊版的技術指南，則此命令會予以覆寫。

1. 更新自訂技術指南完成後，透過使用配方執行[**執行配方**堆疊命令](workingstacks-commands.md)**以執行設定為 的配方****idcheck::default**。此命令會啟動 Chef 執行，內含包含您配方的回合清單。保留 execute\$1recipes 頁面的開啟狀態。

成功執行配方之後，您可以檢查 [Chef 日誌](troubleshoot-debug-log.md)中的最新 execute\$1recipes 事件來驗證。在**執行命令 execute\$1recipes 頁面上**，選擇在 iptest1 執行個體的**日誌**欄中**顯示** 以顯示日誌。向下捲動以在接近底端的位置找到您的日誌訊息，這看起來與下列類似。

```
...
[2015-05-13T20:03:47+00:00] INFO: Storing updated cookbooks/nodesearch/recipes/default.rb in the cache.
[2015-05-13T20:03:47+00:00] INFO: Storing updated cookbooks/nodesearch/metadata.rb in the cache.
[2015-05-13T20:03:47+00:00] INFO: **********The instance ID is: 'i-8703b570'**********
[2015-05-13T20:03:47+00:00] INFO: Chef Run complete in 0.312518 seconds 
...
```