

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

# 对 Windows 堆栈使用节点搜索索引
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-node"></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 访问。

此示例基于一个具有一个自定义层和一个实例的 Windows 堆栈。它使用带 `node` 搜索索引的 Chef 搜索来获取服务器的公用 IP 地址，并将该地址放入 `C:\tmp` 目录中的文件中。下面简单总结了为此示例创建堆栈的方式。有关更多信息，请参阅 [创建新堆栈](workingstacks-creating.md)。

**创建堆栈**

1. 打开 [OpsWorks Stacks 控制台](https://console.aws.amazon.com/opsworks/)，然后选择 **Add Stack (添加堆栈)**。

1. 指定以下设置，接受其他设置的默认值，然后选择 **Add Stack**。
   + **姓名** — NodeSearch
   + **区域**-美国西部（俄勒冈州）

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

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

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

   OpsWorks 堆栈会自动分配`AWS-OpsWorks-RDP-Server`给此实例，从而允许授权用户登录该实例。

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

**设置说明书**

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

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

   ```
   name "nodesearch"
   version "0.1.0"
   ```

1. 在 `recipes` 中创建 `nodesearch` 目录。

1. 创建包含以下配方的 `default.rb` 文件，并将该文件保存到 `recipes` 目录。

   ```
   directory 'C:\tmp' do
     rights :full_control, 'Everyone'
     recursive true
     action :create
   end
   
   windowsserver = search(:node, "hostname:iptest*").first
   Chef::Log.info("**********The public IP address is: '#{windowsserver[:ipaddress]}'**********")
   
   file 'C:\tmp\addresses.txt' do
     content "#{windowsserver[:ipaddress]}"
     rights :full_control, 'Everyone'
     action :create
   end
   ```

   此配方会执行以下操作：

   1. 使用目录资源为此文件创建一个 `C:\tmp` 目录。

      有关此资源的更多信息，请参阅[示例 3：创建目录](cookbooks-101-basics-directories.md)。

   1. 使用带 `node` 搜索索引的 Chef 搜索来获取主机名以 `iptest` 开头的节点 (实例) 的列表。

      如果您使用默认主题，即通过在图层的短名称后添加整数来创建主机名，则此查询将返回图层中的每个实例。 IPTest 在此示例中，已知层只有一个实例，因此配方只需将第一个实例分配给 `windowsserver`。对于多个实例，您可获取完整列表，然后枚举这些实例。

   1. 对于此运行，将包含 IP 地址的消息添加到 Chef 日志。

      `windowsserver` 对象是一个 `ipaddress` 属性设置为实例的公有 IP 地址的哈希表，因此您可在后续配方代码中将此地址表示为 `windowsserver[:ipaddress]`。配方将对应字符串插入消息并将消息添加到 Chef 日志中。

   1. 使用 `file` 资源创建一个名为 `C:\tmp\addresses.txt` 的带此 IP 地址的文件。

      资源的 `content` 属性指定要添加到文件中的内容 (在此示例中为公有 IP 地址)。

1. 为 `nodesearch` 创建 `.zip` 存档，[将存档上传到 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)，[公开存档](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)并记录存档的 URL。

   发送到 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** 设置为 **nodesearch::default** 的情况下运行 [**Execute Recipes** 堆栈命令](workingstacks-commands.md)来执行配方。此命令将启动 Chef 运行并显示一个包含配方的运行列表。使 execute\$1recipes 页面保持打开状态。

配方成功运行后，可以对其进行验证。

**验证 nodesearch**

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

   ```
   ...
   [2015-05-13T18:55:47+00:00] INFO: Storing updated cookbooks/nodesearch/recipes/default.rb in the cache.
   [2015-05-13T18:55:47+00:00] INFO: Storing updated cookbooks/nodesearch/metadata.rb in the cache.
   [2015-05-13T18:55:47+00:00] INFO: **********The public IP address is: '192.0.0.1'**********
   [2015-05-13T18:55:47+00:00] INFO: Processing directory[C:\tmp] action create (nodesearch::default line 1)
   [2015-05-13T18:55:47+00:00] INFO: Processing file[C:\tmp\addresses.txt] action create (nodesearch::default line 10) 
   ...
   ```

1. [使用 RDP 登录实例](workinginstances-rdp.md)并检查 `C:\tmp\addresses.txt` 的内容。