对 Windows 堆栈使用节点搜索索引 - AWS OpsWorks

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

对 Windows 堆栈使用节点搜索索引

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够正常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时它们将停产。为准备此过渡,我们建议您尽快将堆栈过渡到AWS Systems Manager。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终止常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager Application Manager

注意

此示例假定您已完成在 Windows 实例上运行配方示例。如果没有,您应该先完成该示例。具体而言,它介绍了如何启用对实例的 RDP 访问。

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

创建堆栈
  1. 打开 AWS OpsWorks Stacks 控制台,然后选择 Add Stack (添加堆栈)

  2. 指定以下设置,接受其他设置的默认值,然后选择 Add Stack

    • 姓名 — NodeSearch

    • 区域-美国西部(俄勒冈州)

      本示例在任何区域都有效,但我们建议将美国西部(俄勒冈州)用于教程。

    • 默认操作系统 - Microsoft Windows Server 2012 R2

  3. 选择 Add a layer 并将采用以下设置的自定义层添加到堆栈。

    • 名称 - IPTest

    • 短名称 - iptest

  4. 向 IPTest 层添加全天候 t2.micro 实例 (采用默认设置) 并启动此实例。它将被命名为 iptest1。

    AWS OpsWorks Stacks 会自动将 AWS-OpsWorks-RDP-Server 分配给此实例,这将允许授权用户登录实例。

  5. 选择 PermissionsEdit,然后选择 SSH/RDPsudo/admin。除了 AWS-OpsWorks-RDP-Server 安全组之外,普通用户还需要此授权才能登录实例。

    注意

    您还可以管理员身份登录,但这需要其他过程。有关更多信息,请参阅 使用 RDP 登录

设置说明书
  1. 创建一个名为 nodesearch 的目录并导航到该目录。

  2. 创建一个包含以下内容的 metadata.rb 文件,并将该文件保存到 opstest

    name "nodesearch" version "0.1.0"
  3. recipes 中创建 nodesearch 目录。

  4. 创建包含以下配方的 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:创建目录

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

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

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

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

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

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

  5. nodesearch 创建 .zip 存档,将存档上传到 S3 存储桶公开存档并记录存档的 URL。

    发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息,请参阅如何清空 S3 存储桶?如何删除 S3 存储桶?

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

安装说明书并运行配方
  1. 编辑堆栈以启用自定义说明书,然后指定以下设置。

    • 存储库类型 - S3 存档

    • 存储库 URL -您之前记录的说明书存档 URL

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

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

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

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

验证 nodesearch
  1. 查看 Chef 日志以了解最新的 execute_recipes 事件。在 Running command execute_recipes 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) ...
  2. 使用 RDP 登录实例并检查 C:\tmp\addresses.txt 的内容。