使用 Windows Sysprep 和 EC2Launch 创建 AMI - Amazon Elastic Compute Cloud

使用 Windows Sysprep 和 EC2Launch 创建 AMI

当您从安装了 EC2Launch 代理的实例创建映像时,EC2Launch 会在准备映像时执行特定的任务。这包括使用 Windows Sysprep。有关更多信息,请参阅 Windows Sysprep 阶段

EC2Launch 为 Windows Sysprep 提供一个默认应答文件和批处理文件,来自动执行并保护 AMI 上的映像准备过程。您可以选择性地修改这些文件。这些文件默认位于以下目录:C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep

重要

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

用于 Windows Sysprep 的 EC2Launch 应答文件和批处理文件

用于 Windows Sysprep 的 EC2Launch 应答文件和批处理文件包括:

Unattend.xml

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

BeforeSysprep.cmd

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

SysprepSpecialize.cmd

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

使用 EC2Launch 运行 Windows Sysprep

在 Windows Server 2016 及更高版本的完整安装(带有桌面体验)上,可以通过手动方式使用 EC2Launch 运行 Windows Sysprep,也可以通过 EC2Launch Settings 应用程序运行 Windows Sysprep。

使用 EC2Launch Settings 应用程序运行 Windows 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 文件中,并且在 Windows Sysprep 设置管理员密码时会被删除。如果现在就关闭,则会立即设置密码。EC2Launch 使用用户的密钥对密码进行加密。

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

  7. 选择 Shutdown with Sysprep (使用 Sysprep 关闭)

使用 EC2Launch 手动运行 Windows 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 文件中,并且在 Windows 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 控制台中查看实例页面,实例状态会从 Running 变为 Stopping,然后变为 Stopped。此时,从该实例创建 AMI 是安全的。

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

要在启动自定义 AMI 时更新 Server 2016 及更高版本的元数据/KMS 路由,请执行下列操作之一:

  • 运行 EC2LaunchSettings GUI (C:\ProgramData\Amazon\EC2-Windows\Launch\Settings\Ec2LaunchSettings.exe),并选择相应选项以便在使用 Windows Sysprep 的情况下关闭。

  • 在创建 AMI 之前,运行 EC2LaunchSettings,并在未使用 Windows Sysprep 的情况下关闭。这会将 EC2 启动初始化任务设置为在下次引导时运行,从而根据实例的子网设置路由。

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

    重要

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

  • 要在发生 Windows 激活失败或与实例元数据通信失败的正在运行的实例上更新路由,请参阅“无法激活 Windows”