

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# OpsWorks 堆栈数据包参考
<a name="data-bags"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

OpsWorks Stacks 为食谱提供了各种各样的设置作为厨师数据包的内容。本参考列出了此数据包内容。

*数据包*是一个 Chef 概念。数据包是一种全局变量，在实例上存储为 JSON 数据；可从 Chef 访问该 JSON 数据。例如，数据袋可以存储全局变量，例如应用程序的源 URL、实例的主机名和关联堆栈的 VPC 标识符。 OpsWorks 堆栈将其数据包存储在每个堆栈的实例上。在 Linux 实例上， OpsWorks Stacks 将数据包存储在`/var/chef/runs/run-ID/data_bags`目录中。在 Windows 实例上，它将数据包存储在 `drive:\chef\runs\run-id\data_bags` 目录中。在这两种情况下，都*run-ID*是 OpsWorks Stacks 分配给在实例上运行的每个 Chef 的唯一 ID。这些目录包含一组数据包（子目录）。每个数据包均包含零个或多个数据包项目，这些项目是 JSON 格式的文件，其中包含一系列数据包内容。

**注意**  
OpsWorks 堆栈不支持加密的数据包。要以加密形式存储敏感数据，例如密码或证书，我们建议将其存储在私有 S3 存储桶中。然后，您可以创建一个使用[适用于 Ruby 的 Amazon SDK](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)，表示堆栈的一组层。
+ [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` 以表示正在对其执行配方的实例。以下配方代码使用相应的数据袋项的内容向 Chef 日志写一条消息，其中包含相应实例的 OpsWorks Stacks 生成的 ID 和操作系统：

```
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)
+ [层数据包 (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 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

对于 [Deploy 事件](workingcookbook-events.md)或 [Execute Recipes 堆栈命令](workingstacks-commands.md)，表示应用程序的设置。

以下示例显示了如何使用 Chef 搜索来搜索单个数据袋项目，然后搜索多个数据袋项目，将包含应用程序短名称和来源 URLs的消息写入 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) | [域](#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) | [类型](#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 存储桶，此内容设置为私有密钥。  
**revision**  
如果存储库具有多个分支，该内容将指定应用程序的分支或版本，如 `"version1"` (字符串)。否则，其设置为 `"null"`。  
**ssh\$1key**  
访问私有 Git 存储库时为[部署 SSH 密钥](workingapps-deploykeys.md)，对于公共存储库为 `"null"` (字符串)。  
**类型**  
应用程序的源位置 (字符串)。有效值包括：  
+ `"archive"`
+ `"git"`
+ `"other"`
+ `"s3"`  
**url**  
应用程序源代码所在的位置 (字符串)。  
**用户**  
对于私有存储库为用户名称，对于公共存储库为 `"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**  
数据库名称，这通常是应用程序的短名称 (字符串)。  
**类型**  
数据库实例的类型，通常为 `"RdsDbInstance"` (字符串)。  
**arn**  
数据库实例的 Amazon 资源名称 (ARN) (字符串)。

**部署**  <a name="data-bag-json-app-deploy"></a>
是否应部署应用程序（布尔值）。`true` 表示应在 Deploy 生命周期事件中部署应用程序。在 Setup 生命周期事件中，所有应用程序的此内容均为 `true`。要确定应在实例上部署哪些应用程序，请查看该实例所属的层。

**域**  <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>
应用程序的短名称，由 OpsWorks Stacks 根据名称（字符串）生成。该短名称在内部由配方使用；用作安装应用程序文件的目录的名称。

**ssl\$1configuration**  <a name="data-bag-json-app-app-ssl-config"></a>  
**证书**  
如果您启用了 SSL 支持，即为应用程序的 SSL 证书；否则，为 `"null"` (字符串)。  
**chain**  
如果启用 SSL，则为指定中间证书颁发机构密钥或客户端身份验证的内容 (字符串)。  
**private\$1key**  
如果您启用了 SSL 支持，即为应用程序的 SSL 私有密钥；否则，为 `"null"` (字符串)。

**类型**  <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 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

表示 OpsWorks Stacks 在一个或多个实例上运行的命令的设置。

以下示例演示了如何使用 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) | [类型](#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>
命令的随机唯一标识符，由 OpsWorks Stacks（字符串）分配。

**iam\$1user\$1arn**  <a name="data-bag-json-command-iam-user-arn"></a>
如果命令是由客户创建的，即为创建命令的用户的 Amazon 资源名称 (ARN) (字符串)。

**instance\$1id**  <a name="data-bag-json-command-instance-id"></a>
运行命令的实例的标识符 (字符串)。

**sent\$1at**  <a name="data-bag-json-command-sent-at"></a>
 OpsWorks Stacks 运行命令的时间戳（字符串）。

**类型**  <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 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

表示 Amazon ECS 集群的设置。

以下示例说明如何使用 Chef 搜索搜索单个数据袋项目，然后搜索多个数据袋项目，将包含 Amazon ECS 集群名称和 Amazon 资源名称 () 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 资源名称 (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 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 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>
负载均衡器分配到的层的 OpsWorks 堆栈 ID（字符串）。

# 实例数据包 (aws\$1opsworks\$1instance)
<a name="data-bag-json-instance"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

表示实例的设置。

以下示例说明如何使用 Chef 搜索来搜索单个数据袋项目，然后搜索多个数据袋项目，将包含实例主机名和 Chef 日志的消息写入 Chef 日志： IDs

```
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` 以查找数据包项目，其中包含有关正在对其执行配方的实例的信息。然后，该示例使用数据袋项的内容向 Chef 日志写一条消息，其中包含相应实例的 OpsWorks Stacks 生成的 ID 和实例的公有 IP 地址：

```
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 系统映像) 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 堆栈生成的 GUID，用于唯一标识实例（字符串）。

**instance\$1type**  <a name="data-bag-json-instance-type"></a>
实例类型，如 `"c1.medium"` (字符串)。

**layer\$1ids**  <a name="data-bag-json-instance-layers"></a>
实例的图层列表，由其唯一层标识 IDs；例如，`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>
实例的虚拟化类型 (字符串)。

# 层数据包 (aws\$1opsworks\$1layer)
<a name="data-bag-json-layer"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

表示层的设置。

以下示例演示了如何使用 Chef 搜索来先后搜索单个数据包项目和多个数据包项目，以将包含层的名称和短名称的消息写入 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) | 
| [软件包](#data-bag-json-layer-packages) | [shortname](#data-bag-json-layer-shortname) | [类型](#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>
如果层分配了一个 Amazon ECS 集群，即为 Amazon ECS 集群的 Amazon 资源名称 (ARN)（字符串）。

**encrypted**  
如果 EBS 卷已加密，则为 `true` ；否则为 `false` (布尔值)。

**layer\$1id**  <a name="data-bag-json-layer-id"></a>
图层 ID，这是由 OpsWorks Stacks 生成的 GUID，用于唯一标识图层（字符串）。

**name**  <a name="data-bag-json-layer-name"></a>
层的名称，用于表示控制台中的层 (字符串)。它可以由用户定义，并且不必唯一。

**软件包**  <a name="data-bag-json-layer-packages"></a>
要安装的软件包的列表 (字符串列表)。

**shortname**  <a name="data-bag-json-layer-shortname"></a>
由用户定义的层的短名称 (字符串)。

**类型**  <a name="data-bag-json-layer-type"></a>
层的类型，对于 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 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

一组数据包内容，用于指定 Amazon Relational Database Service (Amazon RDS) 实例的配置，如下所示：


****  

|  |  |  | 
| --- |--- |--- |
| [地址](#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
```

**地址**  <a name="data-bag-json-rds-address"></a>
实例的 DNS 名称。

**端口**  <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 资源名称 (ARN)。

**region**  <a name="data-bag-json-rds-region"></a>
实例的 Amazon Web Services Region，如 `us-west-2`。

# 堆栈数据包 (aws\$1opsworks\$1stack)
<a name="data-bag-json-stack"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 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 资源名称 (ARN) (字符串)。

**custom\$1cookbooks\$1source**  <a name="data-bag-json-stack-cookbook-source"></a>
一组指定自定义说明书源存储库的内容。    
**类型**  
存储库类型 (字符串)。有效值包括：  
+ `"archive"`
+ `"git"`
+ `"s3"`  
**url**  
存储库 URL，如 `"git://github.com/amazonwebservices/opsworks-demo-php-simple-app.git"` (字符串)。  
**username**  
对于私有存储库为用户名称，对于公共存储库为 `null` (字符串)。对于私有 Amazon Simple Storage Service (Amazon S3) 存储桶，该内容设置为访问密钥。  
**password**  
对于私有存储库为密码，对于公共存储库为 `null` (字符串)。对于私有 S3 存储桶，此内容设置为私有密钥。  
**ssh\$1key**  
访问私有 Git 存储库时为[部署 SSH 密钥](workingapps-deploykeys.md)，对于公共存储库为 `null` (字符串)。  
**revision**  
如果存储库具有多个分支，该内容将指定应用程序的分支或版本，如 `"version1"` (字符串)。否则，其设置为 `null`。

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

**region**  <a name="data-bag-json-stack-region"></a>
堆栈的 Amazon Web Services Region (字符串)。

**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 (字符串)。

# 用户数据包 (aws\$1opsworks\$1user)
<a name="data-bag-json-user"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

表示用户的设置。

以下示例说明如何使用 Chef 搜索搜索单个数据袋项目，然后搜索多个数据袋项目，将包含用户名和 Amazon 资源名称 (ARNs) 的消息写入 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) | [username](#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 资源名称 (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>
用户的公钥，由 OpsWorks Stacks 控制台或 API 提供（字符串）。

**unix\$1user\$1id**  <a name="data-bag-json-user-unix-id"></a>
用户的 Unix ID (数字)。

**username**  <a name="data-bag-json-user-username"></a>
用户名称 (字符串)。