Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 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 版本。

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 后缀列表。

  • 扩展启动卷大小。

  • 指定管理员密码。

配置初始化设置

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

  2. 根据需要更新以下设置并保存您的更改。仅当 adminPasswordtypeSpecify 时,在 adminPassword 中提供密码。

    { "setComputerName": false, "setWallpaper": true, "addDnsSuffixList": true, "extendBootVolumeSize": true, "adminPasswordType": "Random, Specify, DoNothing", "adminPassword": "Password that adheres to your security policy." }

    密码类型定义如下:

    Random

    EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。

    Specify

    选择此选项以在 adminPassword 中指定密码。如果密码不满足系统要求,则会生成随机密码。该密码以明文方式存储在 LaunchConfig.json 文件中,并且在 Sysprep 设置管理员密码时会被删除。EC2Launch 使用用户的密钥对密码进行加密。

    DoNothing

    如果您在 unattend.xml 文件中指定了密码,请选择此选项。如果您选择此选项,但未在 unattend.xml 中指定密码,则系统会使用父 AMI 的密码。

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

    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. 指定以下卷设置并保存您的更改:

    { "driveLetterMapping": [ { "volumeName": "Temporary Storage 0", "driveLetter": "H" } ] }
  3. 在 Windows PowerShell 中运行以下命令,以便系统安排脚本作为 Windows 计划任务运行。

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

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

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

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

<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. 配置以下日志设置并保存您的更改:

    { "events": [ { "logName": "System", "source": "An event source (optional)", "level": "Error", "numEntries": 3 } ] }
  3. 在 Windows PowerShell 中运行以下命令,以便每当实例启动时系统都安排脚本作为 Windows 计划任务运行。

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

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

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

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

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 一起运行。

使用 EC2Launch Settings 应用程序运行 Sysprep

  1. 在 Amazon EC2 控制台中,找到或创建 Windows Server 2016 标准版 AMI。

  2. 从该 AMI 中启动 Windows 实例。

  3. 连接到您的 Windows 实例并对其进行自定义。

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

     EC2 Launch Settings 应用程序
  5. 根据需要选中或清除选项。这些设置存储在 LaunchConfig.json 文件中。

  6. 对于 Administrator Password,请执行以下操作之一:

    • 选择 Random。EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。

    • 选择 Specify 并键入一个符合系统要求的密码。该密码以明文方式存储在 LaunchConfig.json 文件中,并且在 Sysprep 设置管理员密码时会被删除。如果现在就关闭,则会立即设置密码。EC2Launch 使用用户的密钥对密码进行加密。

    • 如果您在 unattend.xml 文件中指定了密码,请选择 DoNothing。如果您选择此选项,但未在 unattend.xml 中指定密码,则系统会设置密码来匹配父 AMI 的密码。

    • 如果您计划关闭系统而不运行 sysprep,请选择 DoNothing

  7. 选择 Shutdown with Sysprep

手动使用 EC2Launch 运行 Sysprep

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

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

  3. 自定义实例。

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

    对于 adminPasswordType,指定下列值之一:

    Random

    EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。

    Specify

    选择此选项以在 adminPassword 中指定密码。如果密码不满足系统要求,则会生成随机密码。该密码以明文方式存储在 LaunchConfig.json 文件中,并且在 Sysprep 设置管理员密码时会被删除。EC2Launch 使用用户的密钥对密码进行加密。

    DoNothing

    如果您在 unattend.xml 文件中指定了密码,请选择此选项。如果您选择此选项,但未在 unattend.xml 中指定密码,则系统会使用父 AMI 的密码。

  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 是安全的。