

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

# 使用自訂 JSON
<a name="workingstacks-json"></a>

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

數個 OpsWorks Stacks 動作可讓您指定自訂 JSON，而 OpsWorks Stacks 會安裝在執行個體上，並且可供配方使用。

您可以在下列情況中指定自訂的 JSON：
+ 當您建立、更新或複製堆疊時。

  AWS OpsWorks Stacks 會在所有執行個體上安裝所有後續[生命週期事件](workingcookbook-events.md)的自訂 JSON。
+ 當您執行部署或堆疊命令時。

  AWS OpsWorks Stacks 只會針對該事件將自訂 JSON 傳遞給執行個體。

自訂 JSON 必須以有效的 JSON 物件表示，且格式化為有效的 JSON 物件。例如：

```
{
  "att1": "value1",
  "att2": "value2"
  ...
}
```

OpsWorks Stacks 會將自訂 JSON 存放在下列位置：

Linux 執行個體為：
+ `/var/chef/runs/run-ID/attribs.json`
+ `/var/chef/runs/run-ID/nodes/hostname.json`

Windows 執行個體為：
+ `drive:\chef\runs\run-ID\attribs.json`
+ `drive:\chef\runs\run-ID\nodes\hostname.json`

**注意**  
適用於 Linux 的 Chef 11.10 和舊版中，自訂 JSON 位於 Linux 執行個體的下列路徑，Windows 執行個體不可用，而且沒有 `attribs.json` 檔案。日誌存放在和 JSON 相同的資料夾或目錄中。如需適用於 Linux 之 Chef 11.10 和舊版中自訂 JSON 的詳細資訊，請參閱[使用自訂的 JSON 覆寫屬性](https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-json-override.html)和 [Chef 日誌檔](https://docs.aws.amazon.com/opsworks/latest/userguide/troubleshoot-debug-log.html#troubleshoot-debug-log-instance)。  
`/var/lib/aws/opsworks/chef/hostname.json`

在上述的路徑中，*run-ID* 是 OpsWorks Stacks 指派給在執行個體上執行之每個 Chef 的唯一 ID，而 *hostname* 則是執行個體的主機名稱。

若要從 Chef 配方存取自訂的 JSON，請使用標準的 Chef `node` 語法。

例如，假設您想要為要部署的應用程式定義簡單的設定；例如，是否一開始即顯示應用程式，以及應用程式的初始前景和背景顏色。假設您使用 JSON 物件定義這些應用程式設定，如下所示：

```
{
  "state": "visible",
  "colors": {
    "foreground": "light-blue",
    "background": "dark-gray"
  }
}
```

為堆疊宣告自訂的 JSON：

1. 在堆疊頁面中，選擇 **Stack Settings (堆疊設定)**，然後選擇 **Edit (編輯)**。

1. 針對 **Custom Chef JSON (自訂 Chef JSON)**，輸入 JSON 物件，然後選擇 **Save (儲存)**。

**注意**  
您可以在部署、layer 和堆疊層級宣告自訂 JSON。如果您只想向個別的部署或 layer 顯示一些自訂的 JSON，建議您執行此作業。或者，例如，您可能希望使用在 layer 層級宣告的自訂 JSON 暫時覆寫在堆疊層級宣告的自訂 JSON。如果您在多個層級宣告自訂 JSON，則在部署層級宣告的自訂 JSON，會覆寫在 layer 和堆疊層級宣告的任何自訂 JSON。在 layer 層級宣告的自訂 JSON，將會覆寫僅在堆疊層級宣告的任何自訂 JSON。  
若要使用 OpsWorks Stacks 主控台指定部署的自訂 JSON，請在**部署應用程式**頁面上選擇**進階**。在 **Custom Chef JSON (自訂 Chef JSON)** 方塊中輸入自訂的 JSON，然後選擇 **Save (儲存)**。  
若要使用 OpsWorks Stacks 主控台指定 layer 的自訂 JSON，請在 **Layers** 頁面上，選擇所需 layer **的設定**。在 **Custom JSON (自訂 JSON)** 方塊中輸入自訂的 JSON，然後選擇 **Save (儲存)**。  
如需詳細資訊，請參閱[編輯 OpsWorks Layer 的組態](workinglayers-basics-edit.md)及[部署應用程式](workingapps-deploying.md)。

當您執行部署或堆疊命令時，配方會使用標準的 Chef `node` 語法擷取這些自訂值，直接將它們映射在自訂 JSON 物件的階層。例如，下列配方程式碼會將有關先前自訂 JSON 值的訊息寫入 Chef 日誌：

```
Chef::Log.info("********** The app's initial state is '#{node['state']}' **********")
Chef::Log.info("********** The app's initial foreground color is '#{node['colors']['foreground']}' **********")
Chef::Log.info("********** The app's initial background color is '#{node['colors']['background']}' **********")
```

此方法有助於將資料傳遞至配方。 OpsWorks Stacks 會將該資料新增至執行個體，而配方可以使用標準 Chef `node` 語法擷取資料。

**注意**  
自訂 JSON 的大小限制為 120 KB。如果您需要更多容量，建議您將部分資料儲存在 Amazon Simple Storage Service (Amazon S3) 上。然後，您的自訂配方可以使用 [AWS CLI](https://aws.amazon.com/documentation/cli/) 或 [適用於 Ruby 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/)，將資料從 Amazon S3 儲存貯體下載到您的執行個體。