

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

# 屬性
<a name="workingcookbook-installingcustom-components-attributes"></a>

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

配方和範本視各種不同的值 (例如組態設定) 而定。您可以建立屬性檔案並以其中的屬性來代表每個值，而不必將這些值硬式編碼在配方或範本中。然後，您可以使用配方或範本中的屬性，而非明確的值。使用屬性的優點是您可以覆寫它們的值，而無需動用到技術指南。因此，您應該一律使用屬性來定義下列類型的值：
+ 可能因不同堆疊或時間而異的值，例如使用者名稱。

  如果您硬式編碼這些值，那麼在您每次變更值時都必須變更配方或範本。使用屬性來定義這些值時，您可以為每個堆疊使用相同的技術指南，而只要覆寫適當的屬性即可。
+ 機密值，例如密碼或秘密金鑰。

  若您在技術指南中放入明確的機密值，可能會提高曝光的風險。相反的，請使用虛設值定義屬性，再將其覆寫以設定實際的值。覆寫這類屬性的最佳方式是使用自訂 JSON。如需詳細資訊，請參閱[使用自訂 JSON](workingcookbook-json-override.md)。

如需屬性和其覆寫方式的詳細資訊，請參閱[覆寫屬性](workingcookbook-attributes.md)。

下列是範例屬性檔案的部分範例。

```
...
default["apache"]["listen_ports"] = [ '80','443' ]
default["apache"]["contact"] = 'ops@example.com'
default["apache"]["timeout"] = 120
default["apache"]["keepalive"] = 'Off'
default["apache"]["keepaliverequests"] = 100
default["apache"]["keepalivetimeout"] = 3
default["apache"]["prefork"]["startservers"] = 16
default["apache"]["prefork"]["minspareservers"] = 16
default["apache"]["prefork"]["maxspareservers"] = 32
default["apache"]["prefork"]["serverlimit"] = 400
default["apache"]["prefork"]["maxclients"] = 400
default["apache"]["prefork"]["maxrequestsperchild"] = 10000
...
```

 OpsWorks Stacks 使用以下語法定義屬性：

```
node.type["attribute"]["subattribute"]["..."]=value
```

您也可以使用冒號 (:)，如下所示：

```
node.type[:attribute][:subattribute][:...]=value
```

屬性定義具有下列元件：

## `node.`
<a name="node"></a>

`node.` 字首是選用的，且通常會將其省略，如範例所示。

## `type`
<a name="type"></a>

類型會管理是否可以覆寫屬性。 OpsWorks Stacks 屬性通常會使用下列其中一種類型：
+ `default` 是最常用的類型，因為它允許屬性覆寫。
+ `normal` 會定義屬性，覆寫其中一個標準 OpsWorks Stacks 屬性值。

**注意**  
Chef 支援其他類型，這些類型對 OpsWorks Stacks 來說並非必要，但可能對您的專案有用。如需詳細資訊，請參閱[關於屬性](http://docs.chef.io/attributes.html)。

## `attribute name`
<a name="attribute-name"></a>

屬性名稱會使用標準的 Chef 節點語法 `[:attribute][:subattribute][...]`。您可以隨喜好使用任何屬性名稱。不過，如[覆寫屬性](workingcookbook-attributes.md)中所述，自訂的技術指南屬性會與來自堆疊組態、部署屬性和 Chef [Ohai 工具](https://docs.chef.io/ohai.html)的屬性，一起合併到執行個體的節點物件中。常用的組態名稱 (如 *port* 或 *user*) 可能會出現在各種技術指南中。

為了避免名稱衝突，慣例是建立含有至少兩個元素的完整屬性名稱，如範例所示。第一個元素應該是唯一的，且通常以產品名稱 (如 *Apache*) 為依據。後面接著一或多個子屬性以識別特定的值，例如 `[:user]` 或 `[:port]`。您可以依據專案使用任何適當數量的子屬性。

## `value`
<a name="value"></a>

您可以為下列類型的值設定屬性：
+ 字串，例如 `default[:apache][:keepalive] = 'Off'`。
+ 數字 (不含引號)，例如 `default[:apache][:timeout] = 120`。
+ 布林值，其可為 `true` 或 `false` (無引號)。
+ 值清單，例如 `default[:apache][:listen_ports] = [ '80','443' ]`。

屬性檔案是一種 Ruby 應用程式，因此您也可以使用節點語法和邏輯運算子，根據其他屬性來指派值。如需如何定義屬性的詳細資訊，請參閱[關於屬性](https://docs.chef.io/chef_overview_attributes.html)。如需運作屬性檔案的範例，請參閱 OpsWorks Stacks 內建技術指南，網址為 https：//[https://github.com/aws/opsworks-cookbooks](https://github.com/aws/opsworks-cookbooks)。