Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 EC2Launch 配置 Windows 实例

EC2Launch 是一组 Windows PowerShell 脚本,用于替换 Windows Server 2016 AMI 上的 EC2Config 服务。

EC2Launch 任务

在初始实例启动期间,默认情况下 EC2Launch 执行以下任务:

  • 设置用来呈现实例相关信息的新墙纸。

  • 设置计算机名称。

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

  • 向 EC2 控制台发送 RDP 证书指纹。

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

  • 添加 DNS 后缀。

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

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

  • 设置持久静态路由以访问元数据服务和 KMS 服务器。

    重要

    如果从此实例创建了自定义 AMI,则捕获这些路由作为操作配置的一部分,并且从 AMI 启动的任意新实例将保留相同的路由,而不论其子网放置如何。要更新路由,请参阅启动自定义 AMI 时更新 Server 2016 的元数据/KMS 路由

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

  • 初始化辅助 EBS 卷。

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

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

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

验证 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 安装在根目录 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 (optional)" }

    密码类型定义如下:

    Random

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

    Specify

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

    DoNothing

    EC2Launch 使用您在 unattend.xml 文件中指定的密码。如果未在 unattend.xml 中指定密码,管理员账户会被禁用。

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

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

初始化驱动器并映射盘符

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

将盘符映射到卷

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

  2. 指定以下卷设置并保存您的更改:

    { "driveLetterMapping": [ { "volumeName": "sample volume", "driveLetter": "H" } ] }
  3. 打开 Windows PowerShell 并使用以下命令来运行初始化磁盘的 EC2Launch 脚本:

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

    要在每次实例启动时初始化磁盘,请添加 -Schedule 标记,如下所示:

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

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

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

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

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

  2. 配置以下日志设置并保存您的更改:

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

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

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

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

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

PS C:\> 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

重要

不要使用 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 使用用户的密钥对密码进行加密。

    • 选择 DoNothing 并在 unattend.xml 文件中指定密码。如果未在 unattend.xml 中指定密码,管理员账户会被禁用。

  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

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

    DoNothing

    EC2Launch 使用您在 unattend.xml 文件中指定的密码。如果未在 unattend.xml 中指定密码,管理员账户会被禁用。

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

启动自定义 AMI 时更新 Server 2016 的元数据/KMS 路由

在启动自定义 AMI 时更新 Server 2016 的元数据/KMS 路由

  1. 使用 EC2LaunchSettings GUI (C:\ProgramData\Amazon\EC2-Windows\Launch\Settings\Ec2LaunchSettings.exe),以便在使用 Sysprep 的情况下关闭。

  2. 或者,创建 AMI 之前,在不使用 Sysprep 的情况下关闭。这将 EC2 启动初始化任务设置为在下次引导时运行,这会根据要启动到的子网设置路由。

  3. 或者,在从 PowerShell 创建 AMI 之前,手动重新计划 EC2 启动初始化任务。

重要

请在重新计划任务之间记录默认的密码重置行为。