Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 EC2Launch 配置 Windows 实例

EC2Launch 是一组 Windows PowerShell 脚本,用于替换 Windows Server 2016 AMI 上的 EC2Config 服务。在初始实例启动期间,默认情况下 EC2Launch 执行以下任务:

  • 设置用来呈现实例相关信息的新墙纸。(不适用于 Nano Server)。

  • 设置计算机名称。

  • 向 Amazon EC2 控制台发送实例信息。

  • 向 EC2 控制台发送 RDP 证书指纹。(不适用于 Nano Server)。

  • 设置管理员账户的随机密码。

  • 添加 DNS 后缀。

  • 动态扩展操作系统分区以包含所有未分区的空间。

  • 执行用户数据 (如果指定)。有关指定用户数据的更多信息,请参阅使用用户数据配置实例

以下任务有助于保持与 EC2Config 服务的向后兼容。在启动期间,您还可以配置 EC2Launch 来执行以下任务:

  • 初始化辅助 EBS 卷。

  • 将 Windows 事件日志发送到 EC2 控制台日志。

  • Windows 已可供使用 消息发送到 EC2 控制台。

有关 Windows Server 2016 的更多信息,请参阅 Microsoft.com 上的 Windows Server 2016 的新增功能安装 Nano Server

验证 EC2Launch 版本

使用以下 Windows Powershell 命令验证已安装的 EC2Launch 版本。

Copy
PS C:\> Import-Module -Name C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1; (Get-Module EC2Launch).Version.ToString()

安装最新版本的 EC2Launch

使用以下过程在实例上下载并安装最新版本的 EC2Launch。

下载并安装最新版本的 EC2Launch

  1. 如果已在实例上安装和配置 EC2Launch,请备份 EC2Launch 配置文件。安装过程不保留此文件中的更改。默认情况下,该文件位于以下 C:\ProgramData\Amazon\EC2-Windows\Launch\Config 目录中。

  2. EC2-Windows-Launch.zip 下载到实例上的一个目录中。

  3. install.ps1 下载到 EC2-Windows-Launch.zip 的下载目录中。

  4. 运行 install.ps1

  5. 如果您对 EC2Launch 配置文件进行了备份,则将其复制到 C:\ProgramData\Amazon\EC2-Windows\Launch\Config 目录。

EC2Launch 目录结构

默认情况下, EC2Launch 安装在根目录 C:\ProgramData\Amazon\EC2-Windows\Launch 中的 Windows Server 2016 AMI 上。

注意

默认情况下,Windows 会隐藏 C:\ProgramData 下的文件和文件夹。要查看 EC2Launch 目录和文件,必须在 Windows 资源管理器中键入路径,或者更改文件夹属性以显示隐藏的文件和文件夹。

Launch 目录包含以下子目录。

  • Scripts — 包含组成 EC2Launch 的 PowerShell 脚本。

  • Module — 包含用于生成与 Amazon EC2 相关的脚本的模块。

  • Config — 包含您可以自定义的脚本配置文件。

  • Sysprep - 包含 Sysprep 资源。

  • Settings — 包含一个适用于 Sysprep 图形用户界面的应用程序。

  • Logs — 包含脚本生成的日志文件。

配置 EC2Launch

在您的实例首次初始化后,您可以配置 EC2Launch 以再次运行并执行不同的启动任务。

配置初始化文件

LaunchConfig.json 配置文件中启用或禁用任务,以便更改类似以下的初始化任务:

  • 设置计算机名称。

  • 设置新墙纸。

  • 添加 DNS 后缀列表。

  • 扩展启动卷大小。

  • 指定管理员密码。

要更改管理员密码的默认设置,必须指定以下选项之一。

  • Random:EC2Launch 会生成一个密码,使用用户的密钥加密,并向控制台显示加密的密码。

  • Specify:指定符合您的系统和组织要求的密码。EC2Launch 会加密密码并将它发送到 EC2 控制台,以便您在以后需要时进行检索。

  • DoNothing:如果您在用于自动安装的 unattend.xml 文件中提供了密码,请选择此选项。如果您未使用 unattend.xml 文件,请选择其他选项之一。如果您选择此选项,但未在 unattend.xml 文件中指定密码,则系统会设置密码来匹配父 AMI 的密码。

配置初始化设置

  1. 在要配置的实例上,在文本编辑器中打开以下文件:C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json

  2. 在要配置的任务旁边键入 truefalse 或特定设置。仅当 adminPasswordtypeSpecify 时,提供密码。例如:

    Copy
    { "setComputerName": false, "setWallpaper": true, "addDnsSuffixList": true, "extendBootVolumeSize": true, "adminPasswordType": "Random, Specify, DoNothing", "adminPassword": "Password that adheres to your security policy." }
  3. 保存您的更改。

  4. 在 Windows PowerShell 中运行以下命令,以便系统安排脚本作为 Windows 计划任务运行。该脚本将在下次启动期间执行一次,然后禁止这些任务再次运行。

    Copy
    C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule

初始化驱动器和盘符映射

DriveLetterMappingConfig.json 文件中指定设置,以初始化和格式化驱动器并将盘符映射到您的 EC2 实例上的 EBS 卷。如果驱动器尚未初始化和分区,则脚本将执行此操作。

将盘符映射到卷

  1. 在文本编辑器中打开 C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json 文件。

  2. 按以下示例所示指定卷设置:

    Copy
    { "driveLetterMapping": [ { "volumeName": "Temporary Storage 0", "driveLetter": "H" } ] }
  3. 保存您的更改。

  4. 在 Windows PowerShell 中运行以下命令,以便系统安排脚本作为 Windows 计划任务运行。

    Copy
    C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1

    默认情况下,该脚本只有在实例首次启动时才执行。要每次实例启动时都初始化磁盘 (一个与 EC2Config 向后兼容的选项),请运行以下命令:

    Copy
    C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule

您还可以通过将以下路径添加到 PowerShell 脚本的 Amazon EC2 用户数据中,在实例启动时初始化连接的磁盘。

Copy
<powershell> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 </powershell>

将 Windows 事件日志发送到 EC2 控制台

EventLogFilter.json 配置文件中指定设置,以便将 Windows 事件日志发送到 EC2 控制台日志。

配置设置来发送 Windows 事件日志

  1. 在实例上,在文本编辑器中 C:\ProgramData\Amazon\EC2-Windows\Launch\Config\EventLogFilter.json 打开文件。

  2. 按照以下示例所示配置日志设置:

    Copy
    { "events": [ { "logName": "System", "source": "An event source (optional)", "level": "Error", "numEntries": 3 } ] }
  3. 保存您的更改。

  4. 在 Windows PowerShell 中运行以下命令,以便每当实例启动时系统都安排脚本作为 Windows 计划任务运行。

    Copy
    C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SendEventLogs.ps1 -Schedule

    日志可能需要三分钟或更长时间才会显示在 EC2 控制台日志中。

在成功启动后发送 Windows 已准备就绪消息

在每次启动后,EC2Config 服务会向 EC2 控制台发送“Windows 已准备就绪”消息。EC2Launch 仅在初次启动后发送此消息。为了实现与 EC2Config 服务的向后兼容,您可以安排 EC2Launch 在每次启动时发送此消息。在实例上,打开 Windows PowerShell 并运行以下命令。系统会安排脚本作为 Windows 计划任务运行。

Copy
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SendWindowsIsReady.ps1 -Schedule

将 Sysprep 与 EC2Launch 结合使用

Sysprep 简化了重复执行 Windows Server 2016 自定义安装的过程。Ec2Launch 为 Sysprep 提供一个默认回复文件和各种批处理文件,来自动执行并保护您的 AMI 上的映像准备过程。您可以选择性地修改这些文件。这些文件默认位于以下目录:C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep

重要

Windows Server 2016 Nano Server 上不支持 Sysprep。另外,不要使用 Sysprep 创建实例备份。Sysprep 会删除系统特定信息。如果您删除此信息,可能会给实例备份带来意想不到的后果。

用于 Sysprep 的 EC2Launch 回复文件和批处理文件包括:

Unattend.xml

这是默认应答文件。如果您运行 SysprepInstance.ps1 或者在用户界面中选择 ShutdownWithSysprep,系统会从该文件中读取设置。

BeforeSysprep.cmd

自定义此批处理文件,以便在 Ec2Launch 运行 Sysprep 前执行命令。

SysprepSpecialize.cmd

自定义此批处理文件,以便在 Sysprep 专门化阶段期间运行命令。

将 Sysprep 与 EC2Launch 一起运行

在 Windows Server 2016 的完整安装 (带有桌面体验) 上,可以通过手动方式或者使用 EC2 Launch Settings 应用程序将 Sysprep 与 EC2Launch 一起运行。

注意

Nano Server 安装上不支持 Sysprep。

按照以下过程之一,使用 Sysprep 和 EC2Launch 创建标准化 AMI。

使用 EC2Launch Settings 应用程序运行 Sysprep

  1. 在 Amazon EC2 控制台中查找或创建您要复制的 Windows Server 2016 标准版 AMI。

  2. 启动并连接到您的 Windows 实例。

  3. 对它进行自定义。

  4. 搜索并运行 EC2LaunchSettings 应用程序。默认情况下它位于以下内容:C:\ProgramData\Amazon\EC2-Windows\Launch\Settings

     EC2 Launch Settings 应用程序
  5. 在应用程序中指定所需选项。您指定的选项将用来配置 LaunchConfig.json 文件。

  6. 为管理员密码选择选项。

    • Random:EC2Launch 会生成一个密码,使用用户的密钥加密,并向控制台显示加密的密码。系统会在首次启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。

    • Specify:指定符合您的系统和组织要求的密码。如果您指定不符合系统要求的密码,系统会生成随机密码。该密码以明文方式存储在 LaunchConfig.json 文件中,一旦在下次启动时设置密码,该密码即会被删除。当 Sysprep 运行时,它将设置管理员密码。如果现在就关闭,则会立即设置密码。服务再次启动时,则会删除管理员密码。您可以从 EC2 控制台检索密码。

    • DoNothing:仅当您在用于自动安装的 unattend.xml 文件中提供了密码时,才选择此选项。如果您选择此选项,但未在 unattend.xml 中指定密码,则系统会设置密码来匹配父 AMI 的密码。

      如果您打算在下一步中选择 Shutdown without Sysprep,可以选择此选项。

      有关更多信息,请参阅 Microsoft 的 AdministratorPassword

  7. 选择 Shutdown with Sysprep 开始创建标准化 AMI。

手动使用 EC2Launch 运行 Sysprep

  1. 在 Amazon EC2 控制台中查找或创建您要复制的 Windows Server 2016 标准版 AMI。

  2. 启动并连接到您的 Windows 实例。

  3. 对它进行自定义。

  4. LaunchConfig.json 文件中指定设置。默认情况下,该文件位于 C:\ProgramData\Amazon\EC2-Windows\Launch\Config 目录中。

    对于 Administrator password,选择以下任一项:

    • Random:EC2Launch 会生成一个密码,使用用户的密钥加密,并向控制台显示加密的密码。系统会在首次启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。

    • Specify:指定符合您的系统和组织要求的密码。如果您指定不符合系统要求的密码,系统会生成随机密码。该密码以明文方式存储在 LaunchConfig.json 文件中,一旦在下次启动时设置密码,该密码即会被删除。当 Sysprep 运行时,它将设置管理员密码。如果现在就关闭,则会立即设置密码。服务再次启动时,则会删除管理员密码。您可以从 EC2 控制台检索密码。

    • DoNothingunattend.xml:如果您在用于自动安装的 文件中输入了密码,请选择此选项。如果您未使用 unattend.xml 文件,请选择其他选项之一。如果您选择此选项,但未在 unattend.xml 文件中指定密码,则系统会设置密码来匹配父 AMI 的密码。

      如果您打算在下一步中选择 Shutdown without Sysprep,可以选择此选项。

      有关更多信息,请参阅 Microsoft 的 AdministratorPassword

  5. 如果您需要,可在 unattend.xml 和其他批处理文件中指定设置。如果您计划参与安装,则无需在这些文件中进行更改。这些文件默认位于以下目录:C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep

  6. 在 Windows PowerShell 中,运行 ./InitializeInstance.ps1 -Schedule。默认情况下,该脚本位于以下目录中:C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts。该脚本安排实例在下次启动期间初始化。您必须先运行此脚本,然后再在下一个步骤中执行 SysprepInstance.ps1 脚本。

  7. 在 Windows PowerShell 中,运行 ./SysprepInstance.ps1。默认情况下,该脚本位于以下目录中:C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts

您会退出实例并且实例会关闭。如果您在 Amazon EC2 控制台中查看 Instances 页面,实例状态会从 running 变为 stopping,然后最终变为 stopped。此时,从该实例创建一个 AMI 是安全的。