

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

# 將堆疊設定屬性移至資料包
<a name="attributes-to-data-bags"></a>

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

OpsWorks Stacks 會向 Chef 配方公開各種堆疊設定。這些堆疊設定包含的值如：
+ 堆疊技術指南來源 URL
+ Layer 磁碟區組態
+ 執行個體主機名稱
+ Elastic Load Balancing DNS 名稱
+ 應用程式來源 URL
+ 使用者名稱

與直接在配方中硬編碼堆疊設定相比，參考配方中的堆疊設定能讓配方程式碼更強大且較不容易出錯。本主題說明如何存取這些堆疊設定，以及如何將它們從適用於 Linux 之 Chef 11.10 和舊版的屬性中移至 Chef 12 Linux 的資料包。

在適用於 Linux 的 Chef 11.10 和舊版中，堆疊設定可提供為 [Chef 屬性](https://docs.chef.io/attributes.html)，並可透過 Chef `node` 物件或透過 Chef 搜尋存取。這些屬性存放在 OpsWorks `/var/lib/aws/opsworks/chef`目錄中一組 JSON 檔案的 Stacks 執行個體上。如需詳細資訊，請參閱[堆疊組態及部署屬性：Linux](attributes-json-linux.md)。

在 Chef 12 Linux 中，堆疊設定可提供為 [Chef 資料包](https://docs.chef.io/data_bags.html)，但只能透過 Chef 搜尋存取。資料包存放在 OpsWorks `/var/chef/runs/run-ID/data_bags`目錄中一組 JSON 檔案的 Stacks 執行個體上，其中 *run-ID* 是 OpsWorks Stacks 指派給執行個體上每個 Chef 執行的唯一 ID。堆疊設定不再提供為 Chef 屬性，因此堆疊設定再也不能透過 Chef `node` 物件存取。如需更多資訊，請參閱[OpsWorks Stacks 資料包參考](data-bags.md)。

例如，在適用於 Linux 的 Chef 11.10 和舊版中，以下配方程式碼使用 Chef `node` 物件取得代表應用程式簡稱和來源 URL 的屬性。接著使用 Chef 日誌寫入這兩個屬性值：

```
Chef::Log.info ("********** The app's short name is '#{node['opsworks']['applications'].first['slug_name']}' **********")
Chef::Log.info("********** The app's URL is '#{node['deploy']['simplephpapp']['scm']['repository']}' **********")
```

在 Chef 12 Linux 中，以下配方程式碼使用 `aws_opsworks_app` 搜尋索引取得 `aws_opsworks_app` 資料包中第一個資料包項目的內容。然後，程式碼將兩個訊息寫入 Chef 日誌，一個有應用程式簡稱資料包內容，另一個有應用程式來源 URL 資料包內容：

```
app = search("aws_opsworks_app").first

Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********")
Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")
```

若要將您存取堆疊設定配方程式碼，從適用於 Linux 的 Chef 11.10 和舊版遷移至 Chef 12 Linux，您必須修改您的程式碼，以：
+ 存取 Chef 資料包，而非 Chef 屬性。
+ 使用 Chef 搜尋，而非 Chef `node` 物件。
+ 使用 OpsWorks Stacks 資料包名稱，例如 `aws_opsworks_app`，而不是使用 OpsWorks Stacks 屬性名稱，例如 `opsworks`和 `deploy`。

如需更多資訊，請參閱[OpsWorks Stacks 資料包參考](data-bags.md)。