

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

# 在 Windows 实例上运行配方
<a name="cookbooks-101-opsworks-opsworks-windows"></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 支持 团队联系。

本主题基本上是[在 Linux 实例上运行配方](cookbooks-101-opsworks-opsworks-instance.md)的简化版本，旨在向您展示如何在 Windows 堆栈上运行配方。我们建议您先浏览[在 Linux 实例上运行配方](cookbooks-101-opsworks-opsworks-instance.md)，当中信息更为详细，且大部分内容都与任一类型的操作系统有关。

有关如何在 OpsWorks Stacks Linux 实例上运行配方的说明，请参阅[在 Linux 实例上运行配方](cookbooks-101-opsworks-opsworks-instance.md)。

**Topics**
+ [启用 RDP 访问](#cookbooks-101-opsworks-opsworks-windows-rdp)
+ [创建和运行配方](#cookbooks-101-opsworks-opsworks-windows-run-recipe)
+ [自动执行配方](#cookbooks-101-opsworks-opsworks-windows-event)

## 启用 RDP 访问
<a name="cookbooks-101-opsworks-opsworks-windows-rdp"></a>

在开始之前，如果您尚未执行此操作，则必须设置一个安全组，该安全组包含一条允许对您的实例进行 RDP 访问的入站规则。您在创建堆栈时将需要该组。

当您在某个区域中创建第一个堆栈时， OpsWorks Stacks 会创建一组安全组。它们包括一个名为类似的名字`AWS-OpsWorks-RDP-Server`， OpsWorks 堆栈将其连接到所有 Windows 实例以允许 RDP 访问。但是，默认情况下，此安全组没有任何规则，因此您必须添加入站规则以允许 RDP 访问您的实例。

**允许 RDP 访问**

1. 打开 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2/v2/)，将其设置为堆栈区域，然后从导航窗格中选择**安全组**。

1. **选择 **AWS-OpsWorks RDP-Server**，选择 “**入站**” 选项卡，然后选择 “编辑”。**

1. 使用以下设置添加一条规则：
   + **类型** - **RDP**
   + **源 **-允许的源 IP 地址。

     通常您会允许来自您的 IP 地址或指定 IP 地址范围（一般是公司的 IP 地址范围）的入站 RDP 请求。

**注意**  
如下文所述，您还必须编辑用户权限以便为普通用户授予 RDP 访问权限。

有关更多信息，请参阅 [使用 RDP 登录](workinginstances-rdp.md)。

## 创建和运行配方
<a name="cookbooks-101-opsworks-opsworks-windows-run-recipe"></a>

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

**创建堆栈**

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

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

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

1. 向 RecipeTest图层@@ [添加具有默认设置的全天候实例](workinginstances-add.md)并[启动它](workinginstances-starting.md)。

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

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

当实例正在启动时(通常需要几分钟)，您可以创建说明书。本示例的配方将创建一个数据目录，该配方基本上来自于[示例 3：创建目录](cookbooks-101-basics-directories.md)，只是针对 Windows 进行了修改。

**注意**  
在为 OpsWorks Stacks Windows 实例实现食谱时，你使用的目录结构与为 Stacks Lin OpsWorks ux 实例实现食谱时使用的目录结构略有不同。有关更多信息，请参阅 [说明书存储库](workingcookbook-installingcustom-repo.md)。

**设置说明书**

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

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

   ```
   name "windowstest"
   version "0.1.0"
   ```

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

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

   ```
   Chef::Log.info("******Creating a data directory.******")
   
   directory 'C:\data' do
     rights :full_control, 'instance_name\username'
     inherits false
     action :create
   end
   ```

   将 *username* 替换为您的用户名。

1. 将说明书放在存储库中。

   要在 OpsWorks Stacks 实例上安装您的食谱，您必须将其存储在存储库中，并向 OpsWorks Stacks 提供将食谱下载到该实例所需的信息。您可以将 Windows 说明书作为存档文件存储在 S3 存储桶或 Git 存储库中。本示例使用了 S3 存储桶，因此您必须创建 `windowstest` 目录的 .zip 存档。有关说明书存储库的更多信息，请参阅[说明书存储库](workingcookbook-installingcustom-repo.md)。

1. [将存档上传到 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** 设置为 **windowstest::default** 的情况下运行 **Execute Recipes** 堆栈命令执行配方。此命令将启动 Chef 运行并显示一个包含配方的运行列表。

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

**验证 windowstest**

1. 检查 [Chef 日志](troubleshoot-debug-log.md)。选择 opstest1 实例 **Log** 列中的 **show**，显示日志。向下滚动，您将在接近底部的位置看到您的日志。

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. 选择 **Instances**，选择实例的 **Actions** 列中的 **rdp**，然后请求一个具有合适到期时间的 RDP 密码。复制 DNS 名称、用户名和密码。您随后可以将该信息用于 RDP 客户端 (如 Windows 远程桌面连接客户端) 以登录实例并验证 `c:\data` 是否存在。有关更多信息，请参阅 [使用 RDP 登录](workinginstances-rdp.md)。

**注意**  
如果您的配方无法正常运行，请参阅[排查并修复配方问题](cookbooks-101-opsworks-opsworks-instance.md#cookbooks-101-opsworks-opsworks-instance-bugs)以获取故障排除提示；其中大多数提示也适用于 Windows 实例。如果你想通过编辑实例上的配方来测试你的修复程序，请在`C:\chef\cookbooks`目录中查找你的食谱， OpsWorks Stacks 会安装自定义食谱。

## 自动执行配方
<a name="cookbooks-101-opsworks-opsworks-windows-event"></a>

**Execute Recipes** 命令是一种测试自定义配方的便捷方式，这正是大多数此类示例中都使用它的原因。但是，实际上，您通常会在实例生命周期的标准时刻运行配方，例如在实例完成启动后或部署应用程序时。 OpsWorks Stacks 支持每个层的一组[生命周期事件](workingcookbook-events.md)：设置、配置、部署、取消部署和关闭，从而简化实例上的运行配方。通过将配方分配给相应的生命周期事件，可以让 OpsWorks Stacks 在图层的实例上自动运行配方。

您通常会在实例完成启动后立即创建目录，与设置事件对应。下面展示了如何使用之前在示例中创建的同一堆栈在设置时运行示例配方。您可以对其他事件使用相同的过程。

**在设置时自动运行配方**

1. 在导航窗格中选择 “**图层**”，然后选择图 RecipeTest 层的 “**食谱**” 链接旁边的铅笔图标。

1. 将 **windowstest::default** 添加到层的 **Setup (设置)** 配方，选择 **\$1** 将前者添加到层，然后选择 **Save (保存)** 保存配置。

1. 选择 **Instances**，将另一个实例添加到层，然后启动该实例。

   该实例应名为 `recipetest2`。启动完成后， OpsWorks Stacks 将运行。`windowstest::default`

1. 在 `recipetest2` 实例处于在线状态后，请验证 `c:\data` 是否存在。

**注意**  
如果您已将配方分配给设置、配置或部署事件，您也可以使用[堆栈命令](workingstacks-commands.md) (设置和配置) 或[部署命令](workingapps-deploying.md) (部署) 来触发事件，手动运行。请注意，如果您向某个事件分配了多个配方，那么这些命令将运行所有这些配方。