

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

# 在 Windows 实例上安装程序包
<a name="cookbooks-101-opsworks-install-software-package"></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 访问。

如果您的程序附带有安装程序包 (如 MSI)，您必须将该文件下载到实例，然后运行它。本示例说明如何实施说明书来安装 MSI 程序包 (Python 运行时)，包括如何定义关联的环境变量。有关如何安装 Windows 功能 (如 IIS) 的更多信息，请参阅[安装 Windows 功能：IIS](cookbooks-101-opsworks-install-software-feature.md)。

**设置说明书**

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

1. 将包含以下内容的 `metadata.rb` 文件添加到 `installpython`。

   ```
   name "installpython"
   version "0.1.0"
   ```

1. 将 `recipes` 和 `files` 目录添加到 `installpython`，并将 `default` 目录添加到文件。

1. 从[适用于 Windows 的 Python 版本](https://www.python.org/downloads/windows/)将 Python 程序包下载到说明书的 `files\default` 目录。本示例将安装 3.5.0a3 的 Windows x86- 版本，该版本使用一个名为 `python-3.4.3.amd64.msi`python-64. 的 MSI 安装程序。

1. 使用以下配方代码将名为 `default.rb` 的文件添加到 `recipes` 目录。

   ```
   directory 'C:\tmp' do
     rights :full_control, 'Everyone'
     recursive true
     action :create
   end
   
   cookbook_file 'C:\tmp\python-3.4.3.amd64.msi' do
     source "python-3.4.3.amd64.msi"
     rights :full_control, 'Everyone'
     action :create
   end
   
   windows_package 'python' do
     source 'C:\tmp\python-3.4.3.amd64.msi'
     action :install
   end
   
   env "PATH" do
     value 'c:\python34'
     delim ";"
     action :modify
   end
   ```

   此配方会执行以下操作：

   1. 使用[目录](https://docs.chef.io/chef/resources.html#directory)资源创建一个 `C:\tmp` 目录。

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

   1. 使用 [cookbook\$1file](https://docs.chef.io/chef/resources.html#cookbook-file) 资源将安装程序从说明书的 `files\default` 目录复制到 `C:\tmp`。

      有关此资源的更多信息，请参阅[从说明书安装文件](cookbooks-101-basics-files.md#cookbooks-101-basics-files-cookbook_file)。

   1. 使用 [windows\$1package](https://docs.chef.io/chef/resources.html#windows-package) 资源运行 MSI 安装程序，这会将 Python 安装到 `c:\python34`。

      安装程序将创建所需的目录并安装文件，但不会修改系统的 `PATH` 环境变量。

   1. 使用 [env](https://docs.chef.io/chef/resources.html#env) 资源将 `c:\python34` 添加到系统路径。

      您可使用 env 资源定义环境变量。在本例中，配方允许您通过将 `c:\python34` 添加到该路径来从命令行轻松运行 Python 脚本。
      + 资源名称指定环境变量的名称，本例中为 `PATH`。
      + `value` 属性指定该变量的值，本例中为 `c:\\python34` (您需要转义 `\` 字符)。
      + `:modify` 操作在该变量的当前值前加上指定的值。
      + `delim` 属性指定一个将新值与现有值分开的分隔符，本例中为 `;`。

1. 创建 `.zip` 的 `installpython` 存档，将该存档上传到 S3 存储桶，然后将其公开。记录该存档的 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)。

按下面所示为本示例创建堆栈。您也可以使用现有 Windows 堆栈。只需更新说明书即可，如下文所述。

**创建堆栈**

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

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

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

1. 向 Python 层[添加全天候实例](workinginstances-add.md) (采用默认设置) 并[启动该实例](workinginstances-starting.md)。

在实例处于联机状态后，您可以安装说明书并运行配方

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

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

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

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

1. 通过在 **Recipes to execute** 设置为 **installpython::default** 的情况下运行 **Execute Recipes** 堆栈命令来执行配方。此命令将使用一个包含 `installpython::default` 的运行列表来启动 Chef 运行。
**注意**  
为了方便起见，此示例使用了 **Execute Recipes**，但通常会 OpsWorks 让 Stacks 通过将[配方分配给相应的生命周期事件来自动运行](workingcookbook-assigningcustom.md)配方。您可以通过手动触发事件来运行此类配方。您可以使用堆栈命令触发设置和配置事件，使用[部署命令](workingapps-deploying.md)触发部署和取消部署事件。

1. 要确认安装，请[使用 RDP 连接到该实例](workinginstances-rdp.md)并打开 Windows 资源管理器。
   + 文件系统现在应有一个 `C:\Python34` 目录。
   + 如果您从命令行运行 `path`，则它应该如下所示：`PATH=c:\python34;C:\Windows\system32;...`
   + 如果您从命令行运行 `python --version`，则它应返回 `Python 3.4.3`。