

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

# 在 Window OpsWorks s 堆栈上使用特定于堆栈的搜索索引
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-opsworks"></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 支持 团队联系。

**注意**  
此示例假定您已完成[在 Windows 实例上运行配方](cookbooks-101-opsworks-opsworks-windows.md)示例。如果没有，您应该先完成该示例。具体而言，它介绍了如何启用对实例的 RDP 访问。

OpsWorks 除了以下搜索索引外，Stacks 还提供以下搜索索引：`node`
+ `aws_opsworks_stack`-堆栈配置。
+ `aws_opsworks_layer`-堆栈的层配置。
+ `aws_opsworks_instance`-堆栈的实例配置。
+ `aws_opsworks_app`-堆栈的应用程序配置。
+ `aws_opsworks_user`-堆栈的用户配置。
+ `aws_opsworks_rds_db_instance`-已注册 RDS 实例的连接信息。

这些索引包括一些标准的 Chef 属性，但主要用于检索特定于 OpsWorks Stacks 的属性。例如，`aws_opsworks_instance` 包含一个提供实例状态 (如 `status`) 的 `online` 属性。

**注意**  
建议的做法是，在能够确保配方与标准 Chef 用法保持一致的情况下使用 `node`。有关示例，请参阅[对 Windows 堆栈使用节点搜索索引](cookbooks-101-opsworks-opsworks-stack-config-search-node.md)。

此示例说明如何使用 OpsWorks 堆栈索引来检索 OpsWorks 堆栈特定属性的值。它基于一个具有自定义层 (带一个实例) 的简单 Windows 堆栈。它使用 Chef 搜索来获取实例的 OpsWorks Stacks ID 并将结果放入 Chef 日志中。

下面简要总结了如何为本示例创建堆栈。有关更多信息，请参阅 [创建新堆栈](workingstacks-creating.md)。

**创建堆栈**

1. 打开 [OpsWorks Stacks 控制台](https://console.aws.amazon.com/opsworks/)，然后选择 **\$1 Stack (\$1 堆栈)**。指定以下设置，接受其他设置的默认值，然后选择 **Add Stack**。
   + **姓名** — IDSearch
   + **区域**-美国西部（俄勒冈州）

     本示例在任何区域都有效，但我们建议将美国西部（俄勒冈州）用于教程。
   + **默认操作系统 **- Microsoft Windows Server 2012 R2

1. 选择 **Add a layer** 并将采用以下设置的[自定义层添加到](workinglayers-custom.md)堆栈。
   + **姓名** — IDCheck
   + **短名称 **- idcheck

1. 将具有默认设置@@ [的全天候 t2.micro 实例添加到](workinginstances-add.md)该 IDCheck 层并[启动](workinginstances-starting.md)它。它将被命名为 iptest1。

   OpsWorks 堆栈会自动分配`AWS-OpsWorks-RDP-Server`给此实例。 [启用 RDP 访问](cookbooks-101-opsworks-opsworks-windows.md#cookbooks-101-opsworks-opsworks-windows-rdp)说明如何向该安全组添加允许授权用户登录实例的入站规则。

1. 选择 **Permissions**、**Edit**，然后选择 **SSH/RDP** 和 **sudo/admin**。除了 `AWS-OpsWorks-RDP-Server` 安全组之外，普通用户还需要此授权才能登录实例。
**注意**  
您也可以以管理员身份登录，但需要采用另一个登录过程。有关更多信息，请参阅 [使用 RDP 登录](workinginstances-rdp.md)。

**设置说明书**

1. 创建一个名为 `idcheck` 的目录并导航到该目录。

1. 创建一个包含以下内容的 `metadata.rb` 文件，并将该文件保存到 `opstest`。

   ```
   name "idcheck"
   version "0.1.0"
   ```

1. 在 `recipes` 中创建一个 `idcheck` 目录，并将包含以下配方的 `default.rb` 文件添加到该目录。

   ```
   windowsserver = search(:aws_opsworks_instance, "hostname:idcheck*").first
   Chef::Log.info("**********The public IP address is: '#{windowsserver[:instance_id]}'**********")
   ```

   此配方使用包含 `aws_opsworks_instance` 搜索索引的 Chef 搜索来获取堆栈中每个主机名以 `idcheck` 开头的实例的[实例属性](data-bag-json-instance.md)。如果您使用默认主题，即通过在图层的短名称后添加整数来创建主机名，则此查询将返回图层中的每个实例。 IDCheck 在此示例中，已知层只有一个实例，因此配方只需将第一个实例分配给 `windowsserver`。对于多个实例，您可获取完整列表，然后枚举这些实例。

   此配方利用堆栈中只有一个实例具有此主机名的事实，因此第一个结果是正确结果。如果您的堆栈具有多个实例，则搜索其他属性可能返回多个结果。有关实例属性的列表，请参阅[实例数据包 (aws\$1opsworks\$1instance)](data-bag-json-instance.md)。

   实例属性基本上是一个哈希表，实例的 OpsWorks 堆栈 ID 已分配给该`instance_id`属性，因此您可以将 ID 引用为`windowsserver[:instance_id]`。配方将对应字符串插入消息并将消息添加到 Chef 日志中。

1. 创建 `ipaddress` 说明书的 `.zip` 存档，[将存档上传到 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)并记录存档的 URL。有关说明书存储库的更多信息，请参阅[说明书存储库](workingcookbook-installingcustom-repo.md)。

   发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息，请参阅[如何清空 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)或[如何删除 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。

您现在可以安装说明书并运行配方。

**安装说明书并运行配方**

1. [编辑堆栈以启用自定义说明书](workingcookbook-installingcustom-enable.md)，然后指定以下设置。
   + **存储库类型 **- **S3 存档**
   + **存储库 URL **-您之前记录的说明书存档 URL

   接受其他设置的默认值，然后选择 **Save** 更新堆栈配置。

1. [运行“Update Custom Cookbooks”堆栈命令](workingstacks-commands.md)，这会将当前版本的自定义说明书安装到堆栈的实例 (包括联机实例) 上。如果您的说明书存在早期版本，此命令会覆盖该版本。

1. 完成“Update Custom Cookbooks”命令后，通过在 **Recipes to execute** 设置为 **idcheck::default** 的情况下运行 **Execute Recipes** 堆栈命令执行配方。此命令将启动 Chef 运行并显示一个包含配方的运行列表。使 execute\$1recipes 页面保持打开状态。

配方成功运行后，您可通过查看 [Chef 日志](troubleshoot-debug-log.md)中的最新 execute\$1recipes 事件来验证它。在 **Running command execute\$1recipes page** 上，选择 iptest1 实例 **Log** 列中的 **show**，显示日志。向下滚动以查找您的日志消息 (接近底部位置)，该日志消息与以下内容类似。

```
...
[2015-05-13T20:03:47+00:00] INFO: Storing updated cookbooks/nodesearch/recipes/default.rb in the cache.
[2015-05-13T20:03:47+00:00] INFO: Storing updated cookbooks/nodesearch/metadata.rb in the cache.
[2015-05-13T20:03:47+00:00] INFO: **********The instance ID is: 'i-8703b570'**********
[2015-05-13T20:03:47+00:00] INFO: Chef Run complete in 0.312518 seconds 
...
```