

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

# 使用 Chef 搜尋取得屬性值
<a name="cookbooks-101-opsworks-opsworks-stack-config-search"></a>

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

**注意**  
此方式適用於 Windows 堆疊和 Chef 11.10 Linux 堆疊。

直接從節點物件取得堆疊組態和部署屬性值可能十分複雜，而且無法與 Windows 堆疊搭配使用。替代方式是使用 [Chef 搜尋](http://docs.chef.io/chef_search.html)查詢感興趣的屬性。如果您熟悉 Chef 伺服器，您會發現 Chef 搜尋與 Stacks OpsWorks 的運作方式略有不同。由於 OpsWorks Stacks 在本機模式中使用 Chef-client，因此 Chef 搜尋取決於稱為 chef-zero 的 Chef 伺服器本機版本，因此搜尋會操作存放在執行個體節點物件本機的資料，而非遠端伺服器。

實際上，限制搜尋本機儲存的資料通常並不重要，因為 Stacks OpsWorks 執行個體上的節點物件包含[堆疊組態和部署屬性](workingcookbook-json.md)。如果不是配方通常從 Chef 伺服器取得並使用相同名稱的所有資料，則它們包含大部分資料，因此您通常可以在 Stacks OpsWorks 執行個體上使用為 Chef 伺服器撰寫的搜尋碼，無需修改。如需詳細資訊，請參閱[使用 Chef 搜尋](workingcookbook-chef11-10.md#workingcookbook-chef11-10-search)。

以下顯示搜尋查詢的基本結構：

```
result = search(:search_index, "key:pattern")
```
+ 搜尋索引指定要套用查詢的屬性，以及決定要傳回的物件類型。
+ 索引鍵指定屬性名稱。
+ 模式指定您要擷取之屬性的值。

  您可以查詢特定屬性值，或使用萬用字元來查詢某範圍的值。
+ 結果是滿足查詢的物件清單，而且各為包含多個相關屬性的雜湊表。

  例如，如果您使用 `node` 搜尋索引，則查詢會傳回執行個體物件清單，而每個滿足查詢的執行個體都各有一個清單。每個物件都是一個雜湊表，其中包含可定義執行個體組態的一組屬性 (例如主機名稱和 IP 地址)。

例如，下列查詢使用 `node` 搜尋索引，這是套用至堆疊執行個體 (或 Chef 術語的節點) 的標準 Chef 索引。它會搜尋主機名稱為 `myhost` 的執行個體。

```
result = search(:node, "hostname:myhost")
```

搜尋會傳回主機名稱為 `myhost` 的執行個體物件清單。如果您想要第一個執行個體的作業系統 (例如，以 `result[0][:os]` 表示)。如果查詢傳回多個物件，您可以列舉它們以擷取所需資訊。

如何在配方中使用搜尋的詳細資訊取決於您使用 Linux 還是 Windows 堆疊。下列主題提供這兩種堆疊類型的範例。

**Topics**
+ [在 Linux 堆疊上使用搜尋](cookbooks-101-opsworks-opsworks-stack-config-search-linux.md)
+ [在 Windows 堆疊上使用搜尋](cookbooks-101-opsworks-opsworks-stack-config-search-windows.md)