

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

# OpsWorks Stacks 資料包參考
<a name="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 資料包內容的形式向配方公開各種設定。此參考清單列出資料包的內容。

「資料包」**是一種 Chef 概念。資料包為以 JSON 資料存放在執行個體上的全域變數。JSON 資料可從 Chef 進行存取。例如，資料包可以存放全域變數，例如應用程式的來源 URL、執行個體的主機名稱，以及相關聯的堆疊 VPC 識別符。 OpsWorks Stacks 會將其資料包存放在每個堆疊的執行個體上。在 Linux 執行個體上， OpsWorks Stacks 會將資料包存放在 `/var/chef/runs/run-ID/data_bags`目錄中。在 Windows 執行個體上，它會將資料包存放在 `drive:\chef\runs\run-id\data_bags` 目錄中。在這兩種情況下，*run-ID* 都是 Stacks OpsWorks 指派給執行個體上每個 Chef 執行的唯一 ID。這些目錄包含一組資料包 (子目錄)。每個資料包都包含零或多個資料包項目，即包含資料包內容組的 JSON 格式檔案。

**注意**  
OpsWorks Stacks 不支援加密的資料包。若要以加密形式存放機密資料 (例如密碼或憑證)，建議您將它存放在私有 S3 儲存貯體中。然後，您可以建立自訂配方，定義其使用[適用於 Ruby 的 Amazon 開發套件](https://aws.amazon.com/documentation/sdk-for-ruby/)擷取資料。如需範例，請參閱 [使用適用於 Ruby 的 SDK](cookbooks-101-opsworks-s3.md)。

資料包內容可包含下列任何項目：
+ **字串**內容遵循標準 Ruby 語法，可使用單引號或雙引號，雖然包含特定特殊字元的字串必須使用雙引號。如需詳細資訊，請前往 [Ruby](http://www.ruby-lang.org/en/documentation/) 文件網站。
+ **布林值**內容，為 `true` 或 `false` (無引號)。
+ **數字**內容，為整數或小數，例如 `4` 或 `2.5` (無引號)。
+ **清單**內容，其格式為以中括弧圍起的逗點分隔值 (無引號)，例如 `[ '80', '443' ]`
+ **JSON 物件**，包含額外的資料包內容，例如 `"my-app": {"elastic_ip": null,...}`。

Chef 配方可透過 Chef 搜尋或直接存取資料包、資料包項目，以及資料包內容。下列內容說明如何使用兩種存取方式 (雖然 Chef 搜尋為偏好選項)。

若要透過 Chef 搜尋存取資料包，請使用[搜尋](https://docs.chef.io/dsl_recipe.html#search)方法，指定所需的搜尋索引。 OpsWorks Stacks 提供下列搜尋索引：
+ [aws\$1opsworks\$1app](data-bag-json-app.md)，代表堆疊的一組部署應用程式。
+ [aws\$1opsworks\$1command](data-bag-json-command.md)，代表在堆疊上執行的一組命令。
+ [aws\$1opsworks\$1ecs\$1cluster](data-bag-json-ecs-cluster.md)，代表堆疊的一組 Amazon Elastic Container Service (Amazon ECS) 叢集執行個體。
+ [aws\$1opsworks\$1elastic\$1load\$1balancer](data-bag-json-elb.md)，代表堆疊的一組 Elastic Load Balancing 負載平衡器。
+ [aws\$1opsworks\$1instance](data-bag-json-instance.md)，代表堆疊的一組執行個體。
+ [aws\$1opsworks\$1layer](data-bag-json-layer.md)，代表堆疊的一組 layer。
+ [aws\$1opsworks\$1rds\$1db\$1instance](data-bag-json-rds.md)，代表堆疊的一組 Amazon Relational Database Service (Amazon RDS) 執行個體。
+ [aws\$1opsworks\$1stack](data-bag-json-stack.md)，代表堆疊。
+ [aws\$1opsworks\$1user](data-bag-json-user.md)，代表堆疊的一組使用者。

在您了解搜尋索引名稱之後，您便可以存取該搜尋索引的資料包內容。例如，下列配方程式碼使用 `aws_opsworks_app` 搜尋索引取得 `aws_opsworks_app` 資料包 (`aws_opsworks_app` 目錄) 中第一個資料包項目 (第一個 JSON 檔案) 的內容。然後，程式碼將兩個訊息寫入 Chef 日誌，一個有應用程式短名資料包內容 (JSON 檔案中的字串)，另一個有應用程式來源 URL 資料包內容 (JSON 檔案中的另一個字串)：

```
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']}' **********")
```

其中 `['shortname']` 和 `['app_source']['url']` 指定對應 JSON 檔案中的下列資料包內容：

```
{
  ...
  "shortname": "mylinuxdemoapp",
  ...
  "app_source": {
    ...
    "url": "https://s3.amazonaws.com/opsworks-demo-assets/opsworks-linux-demo-nodejs.tar.gz",
  },
  ...  
}
```

如需您可以搜尋的資料包內容清單，請參閱本節中的參考主題。

您也可以逐一查看資料包中的一組資料包項目。例如，下列配方程式碼 (與先前範例相似) 會在有超過一個資料包項目時，逐一查看資料包中的每個資料包項目。

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

若您知道特定資料包內容存在，您可以使用下列語法尋找對應的資料包項目：

```
search("search_index", "key:value").first
```

例如，下列配方程式碼使用 `aws_opsworks_app` 搜尋索引尋找包含應用程式短名 `mylinuxdemoapp` 的資料包項目。程式碼接著會使用資料包項目的內容將對應應用程式短名和來源 URL 寫入 Chef 日誌：

```
app = search("aws_opsworks_app", "shortname:mylinuxdemoapp").first
Chef::Log.info("********** For the app with the short name '#{app['shortname']}', the app's URL is '#{app['app_source']['url']}' **********")
```

僅適用於 `aws_opsworks_instance` 搜尋索引，您可以指定 `self:true` 代表正在執行配方的執行個體。下列配方程式碼使用對應的資料包項目內容，搭配對應的執行個體 Stacks 產生的 ID 和作業系統，將訊息寫入 Chef OpsWorks 日誌：

```
instance = search("aws_opsworks_instance", "self:true").first
Chef::Log.info("********** For instance '#{instance['instance_id']}', the instance's operating system is '#{instance['os']}' **********")
```

除了使用 Chef 搜尋存取資料包、資料包項目和資料包內容之外，您也可以直接存取他們。若要執行此作業，請使用 [data\$1bag](https://docs.chef.io/dsl_recipe.html#data-bag) 和 [data\$1bag\$1item](https://docs.chef.io/dsl_recipe.html#data-bag-item) 方法分別存取資料包和資料包項目。例如，下列配方程式碼會執行與先前範例一模一樣的動作，但是它會直接存取單一資料包項目，並會在超過一個的時候存取多個資料包項目：

```
# Syntax: data_bag_item("the data bag name", "the file name in the data bag without the file extension")
app = data_bag_item("aws_opsworks_app", "mylinuxdemoapp")
Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********")
Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")
    
data_bag("aws_opsworks_app").each do |data_bag_item|
  app = data_bag_item("aws_opsworks_app", data_bag_item)
  Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********")
  Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")
end
```

在這兩種方法中，我們建議您使用 Chef 搜尋。所有本指南中的相關範例都會示範此方法。

**Topics**
+ [應用程式資料包 (aws\$1opsworks\$1app)](data-bag-json-app.md)
+ [命令資料包 (aws\$1opsworks\$1command)](data-bag-json-command.md)
+ [Amazon ECS 叢集資料包 (aws\$1opsworks\$1ecs\$1cluster)](data-bag-json-ecs-cluster.md)
+ [Elastic Load Balancing 資料包 (aws\$1opsworks\$1elastic\$1load\$1balancer)](data-bag-json-elb.md)
+ [執行個體資料包 (aws\$1opsworks\$1instance)](data-bag-json-instance.md)
+ [Layer 資料包 (aws\$1opsworks\$1layer)](data-bag-json-layer.md)
+ [Amazon RDS 資料包 (aws\$1opsworks\$1rds\$1db\$1instance)](data-bag-json-rds.md)
+ [堆疊資料包 (aws\$1opsworks\$1stack)](data-bag-json-stack.md)
+ [使用者資料包 (aws\$1opsworks\$1user)](data-bag-json-user.md)

# 應用程式資料包 (aws\$1opsworks\$1app)
<a name="data-bag-json-app"></a>

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

針對[部署事件](workingcookbook-events.md)或[執行配方堆疊命令](workingstacks-commands.md)，代表應用程式的設定。

下列範例示範如何使用 Chef 搜尋搜尋單一資料包項目及多個資料包項目，將應用程式的短名和來源 URL 寫入 Chef 日誌：

```
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']}' **********")

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


****  

|  |  |  | 
| --- |--- |--- |
| [app\$1id](#data-bag-json-app-app-id) | [app\$1source](#data-bag-json-app-app-source) | [data\$1sources](#data-bag-json-app-app-data-source) | 
| [部署](#data-bag-json-app-deploy) | [屬性](#data-bag-json-app-attributes) | [domains](#data-bag-json-app-app-domains) | 
| [enable\$1ssl](#data-bag-json-app-enable-ssl) | [環境](#data-bag-json-app-app-environment) | [name](#data-bag-json-app-app-name) | 
| [shortname](#data-bag-json-app-app-shortname) | [ssl\$1configuration](#data-bag-json-app-app-ssl-config) | [type](#data-bag-json-app-app-type) | 

**app\$1id**  <a name="data-bag-json-app-app-id"></a>
應用程式 ID (字串)。識別應用程式的 GUID。

**app\$1source**  <a name="data-bag-json-app-app-source"></a>
一組內容，指定 OpsWorks Stacks 用來從其來源控制儲存庫部署應用程式的資訊。內容會根據儲存庫類型而有所不同。    
**password**  
私有儲存庫為密碼，公有儲存庫則為 `"null"` (字串)。若為私有 S3 儲存貯體，則此內容會設為私有金鑰。  
**修訂**  
如果儲存庫有多個分支，此內容會指定該應用程式的分支或版本，例如 `"version1"` (字串)。否則會設為 `"null"`。  
**ssh\$1key**  
用來存取私有 Git 儲存庫的[部署 SSH 金鑰](workingapps-deploykeys.md)，公有儲存庫則為 `"null"` (字串)。  
**type**  
應用程式的來源位置 (字串)。有效值包含：  
+ `"archive"`
+ `"git"`
+ `"other"`
+ `"s3"`  
**url**  
應用程式來源的位置 (字串)。  
**user**  
私有儲存庫為使用者名稱，公有儲存庫則為 `"null"` (字串)。若為私有 S3 儲存貯體，此內容會設為存取金鑰。

**屬性**  <a name="data-bag-json-app-attributes"></a>
一組內容，描述目錄結構和應用程式的內容。    
**document\$1root**  <a name="data-bag-json-app-documentroot"></a>
文件樹狀結構的根目錄。定義指向文件根 (或應用程式首頁位置，例如 `home_html`) 的路徑，相對於您的部署目錄。除非指定此屬性，否則 document\$1root 預設為 `public`。`document_root` 的值開頭只能為 `a-z`、`A-Z`、`0-9`、`_` (底線) 或 `-` (連字號) 字元。

**data\$1sources**  <a name="data-bag-json-app-app-data-source"></a>
連線到應用程式資料庫所需的資訊。如果應用程式有連接的資料庫層， OpsWorks Stacks 會自動將適當的值指派給此內容。  
data\$1sources 的值為一個陣列，陣列必須使用整數位移存取，而非鍵。例如，若要存取應用程式的第一個資料來源，請使用 `app[:data_sources][0][:type]`。    
**database\$1name**  
資料庫名稱，通常是應用程式的短名 (字串)。  
**type**  
資料庫執行個體的類型，通常為 `"RdsDbInstance"` (字串)。  
**arn**  
資料庫執行個體的 Amazon Resource Name (ARN) (字串)。

**部署**  <a name="data-bag-json-app-deploy"></a>
是否應部署應用程式 (布林值)。`true` 表示應用程式應在部署生命週期事件中部署。在安裝生命週期事件中，所有應用程式的此內容將為 `true`。若要判斷哪些應用程式應在執行個體上部署，請檢查執行個體所屬的 layer。

**domains**  <a name="data-bag-json-app-app-domains"></a>
應用程式的網域清單 (字串清單)。

**enable\$1ssl**  <a name="data-bag-json-app-enable-ssl"></a>
是否啟用 SSL 支援 (布林值)。

**環境**  <a name="data-bag-json-app-app-environment"></a>
使用者針對應用程式指定之環境變數的集合。如需如何定義應用程式環境變數的詳細資訊，請參閱[新增應用程式](workingapps-creating.md)。每個內容名稱都會設為環境變數名稱，並且對應的值都會設為變數的值。

**name**  <a name="data-bag-json-app-app-name"></a>
應用程式的名稱，用於顯示用途 (字串)。

**shortname**  <a name="data-bag-json-app-app-shortname"></a>
應用程式的簡短名稱，由 Stacks 從名稱 （字串） OpsWorks 產生。短名會在內部及由配方使用。短名會做為您應用程式檔案安裝目錄的名稱使用。

**ssl\$1configuration**  <a name="data-bag-json-app-app-ssl-config"></a>  
**certificate**  
若您啟用 SSL 支援，則為應用程式的 SSL 憑證，否則為 `"null"` (字串)。  
**chain**  
若啟用 SSL，則為指定中繼憑證授權單位金鑰或用戶端身分驗證的內容 (字串)。  
**private\$1key**  
若您啟用 SSL 支援，則為應用程式的 SSL 私有金鑰，否則為 `"null"` (字串)。

**type**  <a name="data-bag-json-app-app-type"></a>
應用程式的類型，若為 Chef 12 Linux 和 Chef 12.2 Windows 堆疊，則總是會設為 `"other"` (字串)。

# 命令資料包 (aws\$1opsworks\$1command)
<a name="data-bag-json-command"></a>

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

代表 Stacks OpsWorks 在一或多個執行個體上執行之命令的設定。

下列範例示範如何使用 Chef 搜尋搜尋單一資料包項目及多個資料包項目，將命令的類型和傳送命令的時間寫入 Chef 日誌：

```
command = search("aws_opsworks_command").first
Chef::Log.info("********** The command's type is '#{command['type']}' **********")
Chef::Log.info("********** The command was sent at '#{command['sent_at']}' **********")

search("aws_opsworks_command").each do |command|
  Chef::Log.info("********** The command's type is '#{command['type']}' **********")
  Chef::Log.info("********** The command was sent at '#{command['sent_at']}' **********")
end
```


****  

|  |  |  | 
| --- |--- |--- |
| [args](#data-bag-json-command-args) | [command\$1id](#data-bag-json-command-command-id) | [iam\$1user\$1arn](#data-bag-json-command-iam-user-arn) | 
| [instance\$1id](#data-bag-json-command-instance-id) | [sent\$1at](#data-bag-json-command-sent-at) | [type](#data-bag-json-command-type) | 

**args**  <a name="data-bag-json-command-args"></a>
命令的引數 (字串)。

**command\$1id**  <a name="data-bag-json-command-command-id"></a>
命令的隨機唯一識別符，由 Stacks OpsWorks （字串） 指派。

**iam\$1user\$1arn**  <a name="data-bag-json-command-iam-user-arn"></a>
若命令是由客戶建立，則為建立命令之使用者的 Amazon Resource Name (ARN) (字串)。

**instance\$1id**  <a name="data-bag-json-command-instance-id"></a>
執行命令之執行個體的識別符 (字串)。

**sent\$1at**  <a name="data-bag-json-command-sent-at"></a>
Stacks 執行命令 （字串） OpsWorks 時的時間戳記。

**type**  <a name="data-bag-json-command-type"></a>
命令的類型 (字串)。有效值包含：  
+ `"configure"`
+ `"deploy"`
+ `"deregister"`
+ `"execute_recipes"`
+ `"grant_remote_access"`
+ `"install_dependencies"`
+ `"restart"`
+ `"revoke_remote_access"`
+ `"rollback"`
+ `"setup"`
+ `"shutdown"`
+ `"start"`
+ `"stop"`
+ `"sync_remote_users"`
+ `"undeploy"`
+ `"update_agent"`
+ `"update_custom_cookbooks"`
+ `"update_dependencies"`

# Amazon ECS 叢集資料包 (aws\$1opsworks\$1ecs\$1cluster)
<a name="data-bag-json-ecs-cluster"></a>

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

代表 Amazon ECS 叢集的設定。

下列範例示範如何使用 Chef 搜尋來搜尋單一資料包項目，然後搜尋多個資料包項目，以使用 Amazon ECS 叢集的名稱和 Amazon Resource Name (ARNs) 將訊息寫入 Chef 日誌：

```
ecs_cluster = search("aws_opsworks_ecs_cluster").first
Chef::Log.info("********** The ECS cluster's name is '#{ecs_cluster['ecs_cluster_name']}' **********")
Chef::Log.info("********** The ECS cluster's ARN is '#{ecs_cluster['ecs_cluster_arn']}' **********")

search("aws_opsworks_ecs_cluster").each do |ecs_cluster|
  Chef::Log.info("********** The ECS cluster's name is '#{ecs_cluster['ecs_cluster_name']}' **********")
  Chef::Log.info("********** The ECS cluster's ARN is '#{ecs_cluster['ecs_cluster_arn']}' **********")
end
```


****  

|  |  | 
| --- |--- |
| [ecs\$1cluster\$1arn](#data-bag-json-ecs-cluster-ecs-cluster-arn) | [ecs\$1cluster\$1name](#data-bag-json-ecs-cluster-ecs-cluster-name) | 

**ecs\$1cluster\$1arn**  <a name="data-bag-json-ecs-cluster-ecs-cluster-arn"></a>
叢集的 Amazon Resource Name (ARN) (字串)。

**ecs\$1cluster\$1name**  <a name="data-bag-json-ecs-cluster-ecs-cluster-name"></a>
叢集的名稱 (字串)。

# Elastic Load Balancing 資料包 (aws\$1opsworks\$1elastic\$1load\$1balancer)
<a name="data-bag-json-elb"></a>

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

代表 Elastic Load Balancing 負載平衡器的設定。

下列範例示範如何使用 Chef 搜尋來搜尋單一資料包項目，然後使用 Elastic Load Balancing 負載平衡器的名稱和 DNS 名稱將訊息寫入 Chef 日誌：

```
elastic_load_balancer = search("aws_opsworks_elastic_load_balancer").first
Chef::Log.info("********** The ELB's name is '#{elastic_load_balancer['elastic_load_balancer_name']}' **********")
Chef::Log.info("********** The ELB's DNS name is '#{elastic_load_balancer['dns_name']}' **********")

search("aws_opsworks_elastic_load_balancer").each do |elastic_load_balancer|
  Chef::Log.info("********** The ELB's name is '#{elastic_load_balancer['elastic_load_balancer_name']}' **********")
  Chef::Log.info("********** The ELB's DNS name is '#{elastic_load_balancer['dns_name']}' **********")
end
```


****  

|  |  |  | 
| --- |--- |--- |
| [elastic\$1load\$1balancer\$1name](#data-bag-json-elb-elastic-load-balancer-name) | [dns\$1name](#data-bag-json-elb-dns-name) | [layer\$1id](#data-bag-json-elb-layer-id) | 

**elastic\$1load\$1balancer\$1name**  <a name="data-bag-json-elb-elastic-load-balancer-name"></a>
負載平衡器的名稱 (字串)。

**dns\$1name**  <a name="data-bag-json-elb-dns-name"></a>
負載平衡器的 DNS 名稱 (字串)。

**layer\$1id**  <a name="data-bag-json-elb-layer-id"></a>
負載平衡器指派給的 layer 的 OpsWorks Stacks ID （字串）。

# 執行個體資料包 (aws\$1opsworks\$1instance)
<a name="data-bag-json-instance"></a>

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

代表執行個體的設定。

下列範例示範如何使用 Chef 搜尋搜尋單一資料包項目及多個資料包項目，將執行個體的主機名稱和 ID 寫入 Chef 日誌：

```
instance = search("aws_opsworks_instance").first
Chef::Log.info("********** The instance's hostname is '#{instance['hostname']}' **********")
Chef::Log.info("********** The instance's ID is '#{instance['instance_id']}' **********")

search("aws_opsworks_instance").each do |instance|
  Chef::Log.info("********** The instance's hostname is '#{instance['hostname']}' **********")
  Chef::Log.info("********** The instance's ID is '#{instance['instance_id']}' **********")
end
```

下列範例顯示使用 Chef 搜尋來搜尋多個資料包項目的不同方式，以尋找包含指定 Amazon EC2 執行個體 ID 的資料包項目。範例接著會使用資料包項目的內容將對應執行個體的公有 IP 地址寫入 Chef 日誌：

```
instance = search("aws_opsworks_instance", "ec2_instance_id:i-12345678").first
Chef::Log.info("********** For instance '#{instance['ec2_instance_id']}', the instance's public IP address is '#{instance['public_ip']}' **********")
 
search("aws_opsworks_instance").each do |instance|
  if instance['ec2_instance_id'] == 'i-12345678'
    Chef::Log.info("********** For instance '#{instance['ec2_instance_id']}', the instance's public IP address is '#{instance['public_ip']}' **********")
  end
end
```

以下範例示範如何使用 Chef 搜尋以 `self:true` 尋找包含與執行配方之執行個體相關資訊的資料包項目。此範例接著會使用資料包項目的內容，以對應執行個體的 OpsWorks Stacks 產生的 ID 和執行個體的公有 IP 地址，將訊息寫入 Chef 日誌：

```
instance = search("aws_opsworks_instance", "self:true").first
Chef::Log.info("********** For instance '#{instance['instance_id']}', the instance's public IP address is '#{instance['public_ip']}' **********")
```


****  

|  |  |  | 
| --- |--- |--- |
| [ami\$1id](#data-bag-json-instance-ami) | [架構](#data-bag-json-instance-arch) | [auto\$1scaling\$1type](#data-bag-json-instance-autoscaling) | 
| [availability\$1zone](#data-bag-json-instance-az) | [created\$1at](#data-bag-json-instance-created-at) | [ebs\$1optimized](#data-bag-json-instance-ebs-optimized) | 
| [ec2\$1instance\$1id](#data-bag-json-instance-ec2-id) | [elastic\$1ip](#data-bag-json-instance-elastic-ip) | [hostname](#data-bag-json-instance-hostname) | 
| [instance\$1id](#data-bag-json-instance-id) | [instance\$1type](#data-bag-json-instance-type) | [layer\$1ids](#data-bag-json-instance-layers) | 
| [os](#data-bag-json-instance-os) | [private\$1dns](#data-bag-json-instance-private-dns) | [private\$1ip](#data-bag-json-instance-private-ip) | 
| [public\$1dns](#data-bag-json-instance-public-dns) | [public\$1ip](#data-bag-json-instance-public-ip) | [root\$1device\$1type](#data-bag-json-instance-root-device-type) | 
| [root\$1device\$1volume\$1id](#data-bag-json-instance-root-device-volume-id) | [self](#data-bag-json-instance-self) | [ssh\$1host\$1dsa\$1key\$1fingerprint](#data-bag-json-instance-ssh-host-dsa-key-fingerprint) | 
| [ssh\$1host\$1dsa\$1key\$1private](#data-bag-json-instance-ssh-host-dsa-key-private) | [ssh\$1host\$1dsa\$1key\$1public](#data-bag-json-instance-ssh-host-dsa-key-public) | [ssh\$1host\$1rsa\$1key\$1fingerprint](#data-bag-json-instance-ssh-host-rsa-key-fingerprint) | 
| [ssh\$1host\$1rsa\$1key\$1private](#data-bag-json-instance-ssh-host-rsa-key-private) | [ssh\$1host\$1rsa\$1key\$1public](#data-bag-json-instance-ssh-host-rsa-key-public) | [status](#data-bag-json-instance-status) | 
| [subnet\$1id](#data-bag-json-instance-subnet-id) | [virtualization\$1type](#data-bag-json-instance-virt-type) |  | 

**ami\$1id**  <a name="data-bag-json-instance-ami"></a>
執行個體的 AMI (Amazon Machine Image) ID (字串)。

**架構**  <a name="data-bag-json-instance-arch"></a>
執行個體的架構，一律設為 `"x86_64"` (字串)。

**auto\$1scaling\$1type**  <a name="data-bag-json-instance-autoscaling"></a>
執行個體的擴展類型：`null`、`timer` 或 `load` (字串)。

**availability\$1zone**  <a name="data-bag-json-instance-az"></a>
執行個體的可用區域 (AZ)，例如 `"us-west-2a"` (字串)。

**created\$1at**  <a name="data-bag-json-instance-created-at"></a>
執行個體的建立時間，使用 UTC `"yyyy-mm-dddThh:mm:ss+hh:mm"` 格式 (字串)。例如，`"2013-10-01T08:35:22+00:00"` 對應到 2013 年 10 月 10 日 8:35:22，無時區位移。如需詳細資訊，請參閱 [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)。

**ebs\$1optimized**  <a name="data-bag-json-instance-ebs-optimized"></a>
執行個體是否為 EBS 最佳化 (布林值)。

**ec2\$1instance\$1id**  <a name="data-bag-json-instance-ec2-id"></a>
EC2 執行個體 ID (字串)。

**elastic\$1ip**  <a name="data-bag-json-instance-elastic-ip"></a>
彈性 IP 地址，若執行個體沒有彈性 IP 地址，則設為 `"null"` (字串)。

**hostname**  <a name="data-bag-json-instance-hostname"></a>
主機名稱，例如 `"demo1"` (字串)。

**instance\$1id**  <a name="data-bag-json-instance-id"></a>
執行個體 ID，這是 OpsWorks Stacks 產生的 GUID，可唯一識別執行個體 （字串）。

**instance\$1type**  <a name="data-bag-json-instance-type"></a>
執行個體類型，例如 `"c1.medium"` (字串)。

**layer\$1ids**  <a name="data-bag-json-instance-layers"></a>
執行個體 layer 的清單，以其唯一 ID 識別。例如：`307ut64c-c7e4-40cc-52f0-67d5k1f9992c`。

**os**  <a name="data-bag-json-instance-os"></a>
執行個體的作業系統 (字串)。有效值包含：  
+ `"Amazon Linux 2"`
+ `"Amazon Linux 2018.03"`
+ `"Amazon Linux 2017.09"`
+ `"Amazon Linux 2017.03"`
+ `"Amazon Linux 2016.09"`
+ `"Custom"`
+ `"Microsoft Windows Server 2022 Base"`
+ `"Microsoft Windows Server 2022 with SQL Server Express"`
+ `"Microsoft Windows Server 2022 with SQL Server Standard"`
+ `"Microsoft Windows Server 2022 with SQL Server Web"`
+ `"Microsoft Windows Server 2019 Base"`
+ `"Microsoft Windows Server 2019 with SQL Server Express"`
+ `"Microsoft Windows Server 2019 with SQL Server Standard"`
+ `"Microsoft Windows Server 2019 with SQL Server Web"`
+ `"CentOS 7"`
+ `"Red Hat Enterprise Linux 7"`
+ `"Ubuntu 20.04 LTS"`
+ `"Ubuntu 18.04 LTS"`
+ `"Ubuntu 16.04 LTS"`
+ `"Ubuntu 14.04 LTS"`

**private\$1dns**  <a name="data-bag-json-instance-private-dns"></a>
私有 DNS 名稱 (字串)。

**private\$1ip**  <a name="data-bag-json-instance-private-ip"></a>
私有 IP 地址 (字串)。

**public\$1dns**  <a name="data-bag-json-instance-public-dns"></a>
公有 DNS 名稱 (字串)。

**public\$1ip**  <a name="data-bag-json-instance-public-ip"></a>
公有 IP 地址 (字串)。

**root\$1device\$1type**  <a name="data-bag-json-instance-root-device-type"></a>
根設備類型 (字串)。有效值包含：  
+ `"ebs`
+ `"instance-store"`

**root\$1device\$1volume\$1id**  <a name="data-bag-json-instance-root-device-volume-id"></a>
根設備的磁碟區 ID (字串)。

**self**  <a name="data-bag-json-instance-self"></a>
若此資料包項目包含執行配方之執行個體的相關資訊，則為 `true`。否則為 `false` (布林值)。此值僅適用於配方，而不是透過 OpsWorks Stacks API。

**ssh\$1host\$1dsa\$1key\$1fingerprint**  <a name="data-bag-json-instance-ssh-host-dsa-key-fingerprint"></a>
位元組的短序列，用來識別較長的 DSA 公有金鑰 (字串)。

**ssh\$1host\$1dsa\$1key\$1private**  <a name="data-bag-json-instance-ssh-host-dsa-key-private"></a>
由 DSA 為執行個體 SSH 身分驗證產生的私有金鑰 (字串)。

**ssh\$1host\$1dsa\$1key\$1public**  <a name="data-bag-json-instance-ssh-host-dsa-key-public"></a>
由 DSA 為執行個體 SSH 身分驗證產生的公有金鑰 (字串)。

**ssh\$1host\$1rsa\$1key\$1fingerprint**  <a name="data-bag-json-instance-ssh-host-rsa-key-fingerprint"></a>
位元組的短序列，用來識別較長的 RSA 公有金鑰 (字串)。

**ssh\$1host\$1rsa\$1key\$1private**  <a name="data-bag-json-instance-ssh-host-rsa-key-private"></a>
由 RSA 為執行個體 SSH 身分驗證產生的私有金鑰 (字串)。

**ssh\$1host\$1rsa\$1key\$1public**  <a name="data-bag-json-instance-ssh-host-rsa-key-public"></a>
由 RSA 為執行個體 SSH 身分驗證產生的公有金鑰 (字串)。

**status**  <a name="data-bag-json-instance-status"></a>
執行個體的狀態 (字串)。有效值包含：  
+ `"requested"`
+ `"booting"`
+ `"running_setup"`
+ `"online"`
+ `"setup_failed"`
+ `"start_failed"`
+ `"terminating"`
+ `"terminated"`
+ `"stopped"`
+ `"connection_lost"`

**subnet\$1id**  <a name="data-bag-json-instance-subnet-id"></a>
執行個體的子網路 ID (字串)。

**virtualization\$1type**  <a name="data-bag-json-instance-virt-type"></a>
執行個體的虛擬化類型 (字串)。

# Layer 資料包 (aws\$1opsworks\$1layer)
<a name="data-bag-json-layer"></a>

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

代表 layer 的設定。

下列範例示範如何使用 Chef 搜尋搜尋單一資料包項目及多個資料包項目，將 layer 的名稱和短名寫入 Chef 日誌：

```
layer = search("aws_opsworks_layer").first
Chef::Log.info("********** The layer's name is '#{layer['name']}' **********")
Chef::Log.info("********** The layer's shortname is '#{layer['shortname']}' **********")

search("aws_opsworks_layer").each do |layer|
  Chef::Log.info("********** The layer's name is '#{layer['name']}' **********")
  Chef::Log.info("********** The layer's shortname is '#{layer['shortname']}' **********")
end
```


****  

|  |  |  | 
| --- |--- |--- |
| [ecs\$1cluster\$1arn](#data-bag-json-ecs-cluster-arn) | [layer\$1id](#data-bag-json-layer-id) | [name](#data-bag-json-layer-name) | 
| [packages](#data-bag-json-layer-packages) | [shortname](#data-bag-json-layer-shortname) | [type](#data-bag-json-layer-type) | 
| [volume\$1configurations](#data-bag-json-layer-volume-config) |  |  | 

**ecs\$1cluster\$1arn**  <a name="data-bag-json-ecs-cluster-arn"></a>
如果 layer 已指派 Amazon ECS 叢集，Amazon ECS 叢集的 Amazon Resource Name (ARN) （字串）。

**encrypted**  
若 EBS 磁碟區已加密，則為 `true`。否則為 `false` (布林值)。

**layer\$1id**  <a name="data-bag-json-layer-id"></a>
layer ID，這是 Stacks OpsWorks 產生的 GUID，可唯一識別 layer （字串）。

**name**  <a name="data-bag-json-layer-name"></a>
layer 的名稱，用以在主控台中表示 layer (字串)。名稱可以是使用者定義的，且不一定要是唯一的。

**packages**  <a name="data-bag-json-layer-packages"></a>
要安裝的套件清單 (字串清單)。

**shortname**  <a name="data-bag-json-layer-shortname"></a>
layer 的短名，由使用者定義 (字串)。

**type**  <a name="data-bag-json-layer-type"></a>
layer 的類型，若為 Chef 12 Linux 和 Chef 12.2 Windows 堆疊，一律會設為 `"custom"` (字串)。

**volume\$1configurations**  <a name="data-bag-json-layer-volume-config"></a>
Amazon EBS 磁碟區組態的清單。    
**iops**  
 磁碟區可支援的每秒 I/O 操作數。  
**mount\$1point**  
磁碟區的掛載點目錄。  
**number\$1of\$1disks**  
磁碟區中的磁碟數。  
**raid\$1level**  
磁碟區的 RAID 組態層級。  
**size**  
磁碟區的大小 (GiB)。  
**volume\$1type**  
磁碟區的類型：一般用途、磁性、佈建 IOPS、輸送量最佳化 HDD，或冷 HDD。

# Amazon RDS 資料包 (aws\$1opsworks\$1rds\$1db\$1instance)
<a name="data-bag-json-rds"></a>

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

一組資料包內容，指定 Amazon Relational Database Service (Amazon RDS) 執行個體的組態，如下所示：


****  

|  |  |  | 
| --- |--- |--- |
| [address](#data-bag-json-rds-address) | [db\$1instance\$1identifier](#data-bag-json-rds-id) | [db\$1password](#data-bag-json-rds-password) | 
| [db\$1user](#data-bag-json-rds-user) | [engine](#data-bag-json-rds-engine) | [rds\$1db\$1instance\$1arn](#data-bag-json-rds-arn) | 
| [region](#data-bag-json-rds-region) |  |  | 

下列範例示範如何使用 Chef 搜尋來搜尋單一資料包項目，然後搜尋多個資料包項目，以使用 Amazon RDS 執行個體的地址和資料庫引擎類型將訊息寫入 Chef 日誌：

```
rds_db_instance = search("aws_opsworks_rds_db_instance").first
Chef::Log.info("********** The RDS instance's address is '#{rds_db_instance['address']}' **********")
Chef::Log.info("********** The RDS instance's database engine type is '#{rds_db_instance['engine']}' **********")

search("aws_opsworks_rds_db_instance").each do |rds_db_instance|
  Chef::Log.info("********** The RDS instance's address is '#{rds_db_instance['address']}' **********")
  Chef::Log.info("********** The RDS instance's database engine type is '#{rds_db_instance['engine']}' **********")
end
```

**address**  <a name="data-bag-json-rds-address"></a>
執行個體的 DNS 名稱。

**port**  <a name="data-bag-json-rds-port"></a>
執行個體的連接埠。

**db\$1instance\$1identifier**  <a name="data-bag-json-rds-id"></a>
執行個體的 ID。

**db\$1password**  <a name="data-bag-json-rds-password"></a>
執行個體的主要密碼。

**db\$1user**  <a name="data-bag-json-rds-user"></a>
執行個體的主要使用者名稱。

**engine**  <a name="data-bag-json-rds-engine"></a>
執行個體的資料庫引擎，例如 `mysql` (字串)。

**rds\$1db\$1instance\$1arn**  <a name="data-bag-json-rds-arn"></a>
執行個體的 Amazon Resource Name (ARN)。

**region**  <a name="data-bag-json-rds-region"></a>
執行個體的 AWS 區域，例如 `us-west-2` (字串)。

# 堆疊資料包 (aws\$1opsworks\$1stack)
<a name="data-bag-json-stack"></a>

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

代表堆疊的設定。

下列範例示範如何使用 Chef 搜尋將堆疊的名稱和技術指南的來源 URL 寫入 Chef 日誌：

```
stack = search("aws_opsworks_stack").first
Chef::Log.info("********** The stack's name is '#{stack['name']}' **********")
Chef::Log.info("********** The stack's cookbook URL is '#{stack['custom_cookbooks_source']['url']}' **********")
```


****  

|  |  |  | 
| --- |--- |--- |
| [arn](#data-bag-json-stack-arn) | [custom\$1cookbooks\$1source](#data-bag-json-stack-cookbook-source) | [name](#data-bag-json-stack-name) | 
| [region](#data-bag-json-stack-region) | [stack\$1id](#data-bag-json-stack-id) | [use\$1custom\$1cookbooks](#data-bag-json-stack-use-cookbooks) | 
| [vpc\$1id](#data-bag-json-stack-vpc-id) |  |  | 

**arn**  <a name="data-bag-json-stack-arn"></a>
堆疊的 Amazon Resource Name (ARN) (字串)。

**custom\$1cookbooks\$1source**  <a name="data-bag-json-stack-cookbook-source"></a>
一組內容，指定自訂技術指南的來源儲存庫。    
**type**  
儲存庫類型 (字串)。有效值包含：  
+ `"archive"`
+ `"git"`
+ `"s3"`  
**url**  
儲存庫 URL，例如 `"git://github.com/amazonwebservices/opsworks-demo-php-simple-app.git"` (字串)。  
**使用者名稱**  
私有儲存庫為使用者名稱，公有儲存庫則為 `null` (字串)。對於私有 Amazon Simple Storage Service (Amazon S3) 儲存貯體，內容會設定為存取金鑰。  
**password**  
私有儲存庫為密碼，公有儲存庫則為 `null` (字串)。若為私有 S3 儲存貯體，則此內容會設為私有金鑰。  
**ssh\$1key**  
用來存取私有 Git 儲存庫的[部署 SSH 金鑰](workingapps-deploykeys.md)，公有儲存庫則為 `null` (字串)。  
**修訂**  
如果儲存庫有多個分支，此內容會指定該應用程式的分支或版本，例如 `"version1"` (字串)。否則會設為 `null`。

**name**  <a name="data-bag-json-stack-name"></a>
堆疊名稱 (字串)。

**region**  <a name="data-bag-json-stack-region"></a>
堆疊的 AWS 區域名稱 (字串)。

**stack\$1id**  <a name="data-bag-json-stack-id"></a>
識別堆疊的 GUID (字串)。

**use\$1custom\$1cookbooks**  <a name="data-bag-json-stack-use-cookbooks"></a>
是否啟用自訂技術指南 (布林值)。

**vpc\$1id**  <a name="data-bag-json-stack-vpc-id"></a>
若堆疊正在 VPC 中執行，則為 VPC ID (若堆疊正在 VPC 中執行) (字串)。

# 使用者資料包 (aws\$1opsworks\$1user)
<a name="data-bag-json-user"></a>

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

代表使用者的設定。

下列範例示範如何使用 Chef 搜尋搜尋單一資料包項目及多個資料包項目，將使用者的使用者名稱和 Amazon Resource Name (ARN) 寫入 Chef 日誌：

```
user = search("aws_opsworks_user").first
Chef::Log.info("********** The user's user name is '#{user['username']}' **********")
Chef::Log.info("********** The user's user ARN is '#{user['iam_user_arn']}' **********")

# Or...

search("aws_opsworks_user").each do |user|
  Chef::Log.info("********** The user's user name is '#{user['username']}' **********")
  Chef::Log.info("********** The user's user ARN is '#{user['iam_user_arn']}' **********")
end
```


****  

|  |  |  | 
| --- |--- |--- |
| [administrator\$1privileges](#data-bag-json-user-admin) | [iam\$1user\$1arn](#data-bag-json-user-arn) | [remote\$1access](#data-bag-json-user-rdp) | 
| [ssh\$1public\$1key](#data-bag-json-user-ssh-public-key) | [unix\$1user\$1id](#data-bag-json-user-unix-id) | [使用者名稱](#data-bag-json-user-username) | 

**administrator\$1privileges**  <a name="data-bag-json-user-admin"></a>
使用者是否具備管理員權限 (布林值)。

**iam\$1user\$1arn**  <a name="data-bag-json-user-arn"></a>
使用者的 Amazon Resource Name (ARN) (字串)。

**remote\$1access**  <a name="data-bag-json-user-rdp"></a>
使用者是否可以使用 RDP 登入執行個體 (布林值)。

**ssh\$1public\$1key**  <a name="data-bag-json-user-ssh-public-key"></a>
使用者的公有金鑰，如透過 Stacks OpsWorks 主控台或 API （字串） 所提供。

**unix\$1user\$1id**  <a name="data-bag-json-user-unix-id"></a>
使用者的 Unix ID (號碼)。

**使用者名稱**  <a name="data-bag-json-user-username"></a>
使用者名稱 (字串)。