创建自定义 Windows AMI - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建自定义 Windows AMI

您可从现有 Windows AMI 启动实例,自定义实例,然后将此更新后的配置另存为自定义 AMI。从该新自定义 AMI 启动的实例包括您在创建 AMI 时设置的自定义项。

您可以为 AMI 分配自定义标签,以帮助您对 AMI 进行分类和管理。有关更多信息,请参阅标记 Amazon EC2 资源

要创建自定义 Linux AMI,请使用适用于实例卷类型的过程。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的创建 Amazon EBS 支持的 Linux AMI创建由实例存储支持的 Linux AMI

创建自定义 AMI 的工作原理

首先,从类似于您要创建的 AMI 的 AMI 启动实例。您可以连接到您的实例并进行自定义。按照您的需求创建实例后,通过在创建 AMI 和映像之前停止该实例来确保数据完整性。我们自动为您注册 AMI。

在 AMI 创建过程中,Amazon EC2 会创建您实例的根卷和附加到您实例的任何其他 EBS 卷的快照。在注销 AMI 并删除快照之前,您需要支付快照的费用。有关更多信息,请参阅注销您的 AMI。如果有任何附加到实例的卷进行了加密,则新 AMI 只会在支持 Amazon EBS 加密 的实例类型上成功启动。有关更多信息,请参阅Amazon EBS 加密

根据卷的大小,可能需要几分钟才能完成 AMI 创建过程 (有时长达 24 小时)。您可能会发现先创建卷的快照,然后再创建 AMI 后会更高效。这样,创建 AMI 时就只需创建小的增量快照,且创建过程完成得更快 (快照创建的总时间保持不变)。有关更多信息,请参阅创建 Amazon EBS 快照

该过程完成之后,您便具有从实例的根卷创建的新 AMI 和快照。当您使用新 AMI 启动实例时,我们会使用快照为其根卷创建新 EBS 卷。

注意

Windows AMI 必须从 Amazon EC2 实例创建。目前不支持从 EBS 快照创建 Windows AMI,因为它可能会导致计费、性能和常规操作方面的问题。

如果除了根设备卷之外,您还向实例添加了实例存储卷或 Amazon Elastic Block Store (Amazon EBS) 卷,则新 AMI 的块储存设备映射包含这些卷的信息,并且您从新 AMI 启动的实例的块储存设备映射自动包含这些卷的信息。新实例的块储存设备映射中指定的实例存储卷是新的,不包含用于创建 AMI 的实例的实例存储卷中的任何数据。EBS 卷上的数据会持久保留。有关更多信息,请参阅块设备映射

注意

当您从自定义 AMI 创建新实例时,应该先初始化其根卷及任何额外的 EBS 存储,然后再将其投入生产。有关更多信息,请参见初始化 Amazon EBS 卷

从正在运行的实例创建 Windows AMI

可以使用 Amazon Web Services Management Console 或命令行创建 AMI。下图总结了从正在运行的 EC2 实例创建 AMI 的过程。从现有 AMI 开始,启动一个实例,自定义该实例,从该实例创建新 AMI,并最终启动新 AMI 的实例。下图中的步骤与下面的过程中的步骤匹配。

注意

如果您已有正在运行的 Windows 实例,则可以直接执行第 5 步操作。


					从实例创建 AMI 的工作流程
使用控制台从实例创建 AMI
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,在映像下选择 AMI

  3. 使用 Filter (筛选条件) 选项将 AMI 列表的范围限定为满足您需求的 Windows AMI。例如,要查看 Amazon 提供的 Windows AMI,请从下拉列表中选择 Public images (公有映像)。选择搜索栏,然后从菜单中依次选择拥有者别名= 和 amazon。从菜单中选择,然后选择以下内容之一,具体取决于您需要的 Windows Server 版本:

    • amazon/Windows_Server-2022

    • amazon/Windows_Server-2019

    • amazon/Windows_Server-2016

    • amazon/Windows_Server-2012

    添加您需要的任意筛选条件。在您选择了 AMI 之后,选中其复选框。

  4. 选择 Launch instance from AMI(从 AMI 启动实例)(新控制台)或 Launch(启动)(旧控制台)。接受默认值,以按向导逐步操作。有关更多信息,请参阅使用新启动实例向导启动实例。实例就绪之后,重新连接它。有关更多信息,请参阅连接到 Windows 实例

  5. 一旦连接到实例,您就可以执行以下任何操作,以便根据您的需求自定义该实例:

    • 安装软件和应用程序

    • 复制数据

    • 通过删除临时文件和对您的硬盘进行碎片整理来缩短启动时间

    • 附加其他 EBS 卷

    • 创建新用户账户并将其添加到 Administrators 组

      如果您要共享 AMI,则可以提供用于 RDP 访问的这些凭证而不公开您的默认管理员密码。

    • [Windows Server 2022 及更高版本] 使用 EC2Launch v2 配置设置。要在启动时生成随机密码,请配置 setAdminAccount 任务。有关更多信息,请参阅setAdminAccount

    • [Windows Server 2016 及 2019] 使用 EC2Launch 配置设置。要在启动时生成随机密码,请使用 adminPasswordType 设置。有关更多信息,请参阅配置 EC2Launch

    • [Windows Server 2012 R2 及早期版本] 使用 EC2Config 配置设置。要在启动时生成随机密码,请启用 Ec2SetPassword 插件;否则会使用当前管理员密码。有关更多信息,请参阅EC2Config 设置文件

  6. 在导航窗格中,选择 Instances,然后选择您的实例。依次选择 Actions (操作)Image and templates (映像和模板)Create image (创建映像)

    提示

    如果该选项处于禁用状态,则表明您的实例不是由 Amazon EBS 支持的实例。

  7. 指定映像的唯一名称和可选描述(最多 255 个字符)。

    默认情况下,当 Amazon EC2 创建新 AMI 时,会重新启动实例,以便其可以在数据处于静态状态时创建附加卷的快照,以确保状态的一致性。对于 No reboot(不重启)设置,您可以选中 Enable(启用)复选框以防止 Amazon EC2 关闭和重启实例。

    警告

    如果您选择启用 No reboot(不重启)选项,则我们无法保证所创建映像的文件系统完整性。

    (可选) 您可以根据需要修改根卷、&EBS; 卷和实例存储卷。例如:

    • 要更改根卷的大小,请在 Type (类型) 列中找到 Root (根) 卷,然后填写 Size (大小) 字段。

    • 要隐藏用于启动实例的 AMI 块储存设备映射所指定的 EBS 卷,请在列表中找到该 EBS 卷,然后选择 Delete (删除)

    • 要添加 EBS 卷,请依次选择 Add New Volume (添加新卷)Type (类型)EBS,然后填写字段。然后,当您从新 AMI 启动实例时,这些额外的卷会自动附加到该实例。您必须格式化并挂载空卷。您必须挂载基于快照的卷。

    • 要隐藏用于启动实例的 AMI 块储存设备映射所指定的实例存储卷,请在列表中找到卷,然后选择 Delete

    • 要添加实例存储卷,请依次选择 Add New Volume(添加新卷)、Type(类型)和 Instance Store(实例存储),然后从 Device(设备)列表中选择设备名称。当您从新 AMI 启动实例时,这些额外的卷会自动初始化并装载。这些卷不包含您的 AMI 所基于的运行实例的实例存储卷上的数据。

    完成后,选择 Create Image (创建映像)。

  8. 在创建 AMI 时,您可以选择导航窗格中的 AMIs 以查看其状态。清除之前的过滤器,然后从下拉列表中选择 Owned by me(我拥有的)。最初,状态是 pending。几分钟后,状态应更改为 available

    (可选)选择导航窗格中的 Snapshots 以查看为新 AMI 创建的快照。您从此 AMI 启动实例时,我们使用此快照创建其根设备卷。

  9. 从新 AMI 启动实例。有关更多信息,请参阅使用新启动实例向导启动实例。新的运行实例包含您在之前步骤中应用的所有自定义项,以及您在启动实例时添加的任意其他自定义项,例如用户数据 (在实例启动时运行的脚本)。

使用命令行从实例创建 AMI

您可以使用以下任一命令。有关这些命令行界面的更多信息,请参阅 访问 Amazon EC2

使用 Sysprep 创建标准化的 Amazon Machine Image (AMI)

系统准备 (Sysprep) 工具可简化复制 Microsoft Windows 自定义安装的过程。您可以使用 Sysprep 创建标准化 Amazon Machine Image (AMI)。随后可以通过此标准化映像为 Windows 创建新的 Amazon EC2 实例。

我们建议您使用 EC2 Image Builder 自动创建、管理和部署自定义、安全且最新的“黄金”服务器映像,这些映像是预先安装的,并预配置了软件和设置。

如果您使用 Sysprep 创建标准化 AMI,建议您使用 EC2Launch v2 运行 Sysprep。如果您仍在使用 EC2Config(Windows Server 2012 R2 及更早版本)或 EC2Launch(Windows Server 2016 及 2019)代理,请参阅以下有关将 Sysprep 与 EC2Config 和 EC2Launch 结合使用的文档。

重要

不要使用 Sysprep 创建实例备份。Sysprep 会删除特定于系统的信息;删除这些信息可能会对实例备份导致意外结果。

要解决 Sysprep 问题,请参阅 Sysprep 问题排查

开始前的准备工作

  • 执行 Sysprep 前,我们建议您删除所有本地用户账户及所有账户配置文件,而不是将在其下方运行 Sysprep 的单个管理员账户。如果使用其他账户和配置文件执行 Sysprep,可能会产生意外行为,包括配置文件数据丢失或完成 Sysprep 失败。

  • 在 Microsoft TechNet 上了解有关 Sysprep 的更多信息。

  • 了解 Sysprep 支持的服务器角色

将 Sysprep 与 EC2Launch v2 结合使用

本节详细介绍了不同的 Sysprep 执行阶段,以及 EC2Launch v2 服务在准备映像时执行的任务。此外,还介绍了结合使用 Sysprep 与 EC2Launch v2 服务来创建标准化 AMI 的步骤。

Sysprep 阶段

Sysprep 会经历以下阶段:

  • 一般化:该工具删除特定于映像的信息和配置。例如,Sysprep 会删除安全标识符 (SID)、计算机名称、事件日志和特定驱动程序等等。完成这一阶段后,操作系统 (OS) 即准备就绪,可以创建 AMI。

    注意

    当您将 Sysprep 与 EC2Launch v2 服务一起运行时,系统会阻止删除驱动程序,因为 PersistAllDeviceInstalls 在默认情况下设置为 true。

  • 专门化:即插即用功能会扫描计算机并为检测到的所有设备安装驱动程序。该工具会生成操作系统要求,如计算机名称和 SID。您可以选择在这一阶段运行命令。

  • 全新体验 (OOBE):系统运行 Windows 安装程序的一个简化版本并要求您输入系统语言、时区和注册组织等信息。如果将 Sysprep 与 EC2Launch v2 一起运行,应答文件会自动执行这一阶段。

Sysprep 操作

在准备映像的过程中,Sysprep 和 EC2Launch v2 会执行以下操作。

  1. 当您在 EC2Launch 设置对话框中选择使用 Sysprep 关闭时,系统会运行 ec2launch sysprep 命令。

  2. EC2Launch v2 通过读取 unattend.xml 的注册表值来编辑 HKEY_USERS\.DEFAULT\Control Panel\International\LocaleName 文件的内容。该文件位于以下目录中:C:\ProgramData\Amazon\EC2Launch\sysprep

  3. 系统运行 BeforeSysprep.cmd。该命令创建一个注册表项,如下所示:

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f

    该注册表项禁用 RDP 连接,直到它们重新启用。禁用 RDP 连接是必需的安全措施,因为在 Sysprep 运行之后的第一个启动会话过程中,在短时间内,RDP 允许连接并且管理员密码为空。

  4. EC2Launch v2 服务通过运行以下命令调用 Sysprep:

    sysprep.exe /oobe /generalize /shutdown /unattend: "C:\ProgramData\Amazon\EC2Launch\sysprep\unattend.xml"

一般化阶段
  • EC2Launch v2 删除特定于映像的信息和配置,如计算机名称和 SID。如果实例是域的成员,则会从域中将其删除。unattend.xml 应答文件包含影响这一阶段的以下设置:

    • PersistAllDeviceInstalls:此设置防止 Windows 安装程序删除和重新配置设备,这可加快映像准备过程,因为 Amazon AMI 需要运行特定驱动程序,而这些驱动程序的重新检测需要花费一些时间。

    • DoNotCleanUpNonPresentDevices:此设置为当前不存在的设备保留即插即用信息。

  • Sysprep 在准备创建 AMI 时会关闭操作系统。系统会启动新实例或启动原始实例。

专门化阶段

系统生成特定于操作系统的要求,如计算机名称和 SID。系统还会根据您在 unattend.xml 应答文件中指定的配置执行以下操作。

  • CopyProfile:Sysprep 可以配置为删除所有用户配置文件,包括内置管理员配置文件。此设置保留内置管理员账户,这样,您对该账户进行的所有自定义设置就都可以转移到新映像。默认值为 True

    CopyProfile 将默认配置文件替换为现有本地管理员配置文件。运行 Sysprep 后登录的所有账户在首次登录时都会收到该配置文件的副本及其内容。

    如果您没有要转移到新映像的特定用户配置文件自定义设置,请将此设置更改为 False。Sysprep 会删除所有用户配置文件,这可以节省时间和磁盘空间。

  • TimeZone:默认情况下,时区设置为协调世界时 (UTC)。

  • 顺序 1 同步命令:系统运行以下命令,以启用管理员账户并指定密码要求。

    net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES

  • 顺序 2 同步命令:系统加密管理员密码。如果未启用 ec2setpassword 设置,则此安全措施可防止实例在 Sysprep 完成后处于可访问状态。

    C:\Program Files\Amazon\Ec2ConfigService\ScramblePassword.exe" -u Administrator

  • 顺序 3 同步命令:系统运行以下命令:

    C:\Program Files\Amazon\Ec2ConfigService\Scripts\SysprepSpecializePhase.cmd

    该命令添加以下注册表项,用于重新启用 RDP:

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

OOBE 阶段
  1. 系统使用 EC2Launch v2 应答文件指定以下配置:

    • <InputLocale>en-US</InputLocale>

    • <SystemLocale>en-US</SystemLocale>

    • <UILanguage>en-US</UILanguage>

    • <UserLocale>en-US</UserLocale>

    • <HideEULAPage>true</HideEULAPage>

    • <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>

    • <ProtectYourPC>3</ProtectYourPC>

    • <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>

    • <TimeZone>UTC</TimeZone>

    • <RegisteredOrganization>Amazon.com</RegisteredOrganization>

    • <RegisteredOwner>EC2</RegisteredOwner>

    注意

    在一般化和专门化阶段,EC2Launch v2 会监控操作系统的状态。如果 EC2Launch v2 检测到操作系统处于 Sysprep 阶段,则会将以下消息发布到系统日志:

    正在配置 Windows。SysprepState=IMAGE_STATE_UNDEPLOYABLE

  2. 系统运行 EC2Launch v2。

Sysprep 之后

Sysprep 完成后,EC2Launch v2 会将以下消息发送到控制台输出:

Windows sysprep configuration complete.

EC2Launch v2 随后执行以下操作:

  1. 读取 agent-config.yml 文件的内容并运行配置的任务。

  2. 执行 preReady 阶段的所有任务。

  3. 完成后,将 Windows is ready 消息发送到实例系统日志。

  4. 执行 PostReady 阶段的所有任务。

有关 EC2Launch v2 的更多信息,请参阅使用 EC2Launch v2 配置 Windows 实例

将 Sysprep 与 EC2Launch v2 一起运行

按照以下过程,结合使用 Sysprep 与 EC2Launch v2 来创建标准化 AMI。

  1. 在 Amazon EC2 控制台中,查找或创建要复制的 AMI。

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

  3. 对它进行自定义。

  4. 在 Windows 开始菜单中,搜索并选择 Amazon EC2Launch 设置。有关 Amazon EC2Launch 设置对话框中的选项和设置的更多信息,请参阅 EC2Launch v2 设置

  5. 选择使用 Sysprep 关闭不使用 Sysprep 关闭

如果系统询问您是否想运行 Sysprep 并关闭该实例,请单击 Yes。EC2Launch v2 运行 Sysprep。然后,您退出实例,实例关闭。如果您在 Amazon EC2 控制台中查看实例页面,实例状态会从 Running 变为 Stopping,再变为 Stopped。此时,从该实例创建一个 AMI 是安全的。

您可以使用以下命令从命令行中手动调用 Sysprep 工具:

"%programfiles%\amazon\ec2launch\ec2launch.exe" sysprep --shutdown=true

将 Sysprep 与 EC2Launch 结合使用

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

重要

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

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

用于 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 (使用 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 控制台中查看实例页面,实例状态会从 Running 变为 Stopping,然后变为 Stopped。此时,从该实例创建 AMI 是安全的。

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

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

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

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

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

    重要

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

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

将 Sysprep 与 EC2Config 结合使用

本节详细介绍了不同的 Sysprep 执行阶段,以及 EC2Config 服务在准备映像时执行的任务。此外,还介绍了结合使用 Sysprep 与 EC2Config 服务来创建标准化 AMI 的步骤。

Sysprep 阶段

Sysprep 会经历以下阶段:

  • 一般化:该工具删除特定于映像的信息和配置。例如,Sysprep 会删除安全标识符 (SID)、计算机名称、事件日志和特定驱动程序等等。完成这一阶段后,操作系统 (OS) 即准备就绪,可以创建 AMI。

    注意

    将 Sysprep 与 EC2Config 服务一起运行时,系统会防止删除驱动程序,因为 PersistAllDeviceInstalls 在默认情况下设置为 true。

  • 专门化:即插即用功能会扫描计算机并为检测到的所有设备安装驱动程序。该工具生成操作系统要求,如计算机名称和 SID。您可以选择在这一阶段运行命令。

  • 全新体验 (OOBE):系统运行 Windows 安装程序的一个简化版本并要求用户输入信息(如系统语言、时区和注册组织)。如果配合使用 Sysprep 与 EC2Config,应答文件会自动执行这一阶段。

Sysprep 操作

准备映像时,Sysprep 和 EC2Config 服务执行以下操作。

  1. EC2 服务属性对话框中选择使用 Sysprep 关闭时,系统会运行 ec2config.exe -sysprep 命令。

  2. EC2Config 服务读取 BundleConfig.xml 文件的内容。默认情况下,该文件位于以下目录中:C:\Program Files\Amazon\Ec2ConfigService\Settings

    BundleConfig.xml 文件包含以下设置:您可以更改这些设置:

    • AutoSysprep:指明是否自动使用 Sysprep。如果从 EC2 Service Properties 对话框运行 Sysprep,则无需更改此值。默认值为 No

    • SetRDPCertificate:为远程桌面服务器设置自签名证书。这样,您可以安全地使用远程桌面协议 (RDP) 连接到实例。如果新实例应使用证书,请将该值更改为 Yes。此设置不适用于 Windows Server 2008 或 Windows Server 2012 实例,因为这些操作系统会生成自己的证书。默认值为 No

    • SetPasswordAfterSysprep:在新启动的实例上设置随机密码,使用用户启动密钥对其加密,并将加密密码输出到控制台。如果新实例不应设置为随机加密密码,请将该值更改为 No。默认值为 Yes

    • PreSysprepRunCmd:要运行的命令的位置。默认情况下,该命令位于以下目录中:C:\Program Files\Amazon\Ec2ConfigService\Scripts\BeforeSysprep.cmd

  3. 系统运行 BeforeSysprep.cmd。该命令创建一个注册表项,如下所示:

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f

    该注册表项禁用 RDP 连接,直到它们重新启用。禁用 RDP 连接是必需的安全措施,因为在 Sysprep 运行之后的第一个启动会话过程中,在短时间内,RDP 允许连接并且管理员密码为空。

  4. EC2Config 服务通过运行以下命令来调用 Sysprep:

    sysprep.exe /unattend: "C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /generalize /shutdown
一般化阶段
  • 该工具删除特定于映像的信息和配置 (如计算机名称和 SID)。如果实例是域的成员,则会从域中将其删除。sysprep2008.xml 应答文件包含影响这一阶段的以下设置:

    • PersistAllDeviceInstalls:此设置防止 Windows 安装程序删除和重新配置设备,这可加快映像准备过程,因为 Amazon AMI 需要运行特定驱动程序,而这些驱动程序的重新检测需要花费一些时间。

    • DoNotCleanUpNonPresentDevices:此设置为当前不存在的设备保留即插即用信息。

  • Sysprep 在准备创建 AMI 时会关闭操作系统。系统会启动新实例或启动原始实例。

专门化阶段

系统生成特定于操作系统的要求,如计算机名称和 SID。系统还根据您在 sysprep2008.xml 应答文件中指定的配置来执行以下操作。

  • CopyProfile:Sysprep 可以配置为删除所有用户配置文件,包括内置管理员配置文件。此设置保留内置管理员账户,这样,您对该账户进行的所有自定义都可转移到新映像。默认值是 True。

    CopyProfile 将默认配置文件替换为现有本地管理员配置文件。运行 Sysprep 后登录的所有账户将在首次登录时收到该配置文件的副本及其内容。

    如果您没有要转移到新映像的特定用户配置文件自定义设置,请将此设置更改为 False。Sysprep 会删除所有用户配置文件;这可以节省时间和磁盘空间。

  • TimeZone:默认情况下,时区设置为协调世界时 (UTC)。

  • 顺序 1 同步命令:系统运行以下命令,以启用管理员账户并指定密码要求。

    net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES

  • 顺序 2 同步命令:系统加密管理员密码。如果未启用 ec2setpassword 设置,则此安全措施可防止在 Sysprep 完成之后实例处于可访问状态。

    C:\Program Files\Amazon\Ec2ConfigService\ScramblePassword.exe" -u Administrator

  • 顺序 3 同步命令:系统运行以下命令:

    C:\Program Files\Amazon\Ec2ConfigService\Scripts\SysprepSpecializePhase.cmd

    该命令添加以下注册表项,用于重新启用 RDP:

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

OOBE 阶段
  1. 通过使用 EC2Config 服务应答文件,系统指定以下配置:

    • <InputLocale>en-US</InputLocale>

    • <SystemLocale>en-US</SystemLocale>

    • <UILanguage>en-US</UILanguage>

    • <UserLocale>en-US</UserLocale>

    • <HideEULAPage>true</HideEULAPage>

    • <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>

    • <NetworkLocation>Other</NetworkLocation>

    • <ProtectYourPC>3</ProtectYourPC>

    • <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>

    • <TimeZone>UTC</TimeZone>

    • <RegisteredOrganization>Amazon.com</RegisteredOrganization>

    • <RegisteredOwner>Amazon</RegisteredOwner>

    注意

    在一般化和专门化阶段期间,EC2Config 服务监控操作系统的状态。如果 EC2Config 检测到操作系统处于 Sysprep 阶段,则会将以下消息发布到系统日志:

    EC2ConfigMonitorState: 0 Windows is being configured. SysprepState=IMAGE_STATE_UNDEPLOYABLE

  2. OOBE 阶段完成后,系统将 从以下位置运行 SetupComplete.cmdC:\Windows\Setup\Scripts\SetupComplete.cmd。在 2015 年 4 月之前的 Amazon 公用 AMI 中,此文件为空,不对映像运行任何操作。在 2015 年 4 月之后的公开 AMI 中,此文件包含以下值:call "C:\Program Files\Amazon\Ec2ConfigService\Scripts\PostSysprep.cmd"

  3. 系统运行 PostSysprep.cmd,执行以下操作:

    • 将本地管理员密码设置为不过期。如果密码已过期,管理员可能无法登录。

    • 设置 MSSQLServer 机器名称 (如果已安装),以便该名称与 AMI 同步。

Sysprep 之后

Sysprep 完成之后,EC2Config 服务将以下消息发送到控制台输出:

Windows sysprep configuration complete.
			Message: Sysprep Start
			Message: Sysprep End

EC2Config 随后执行以下操作:

  1. 读取 config.xml 文件的内容并列出所有已启用的插件。

  2. 同时执行所有“Windows 就绪之前”插件。

    • Ec2SetPassword

    • Ec2SetComputerName

    • Ec2InitializeDrives

    • Ec2EventLog

    • Ec2ConfigureRDP

    • Ec2OutputRDPCert

    • Ec2SetDriveLetter

    • Ec2WindowsActivate

    • Ec2DynamicBootVolumeSize

  3. 完成之后,将“Windows 准备就绪”消息发送到实例系统日志。

  4. 同时运行所有“Windows 就绪之后”插件。

    • Amazon CloudWatch Logs

    • UserData

    • Amazon Systems Manager (Systems Manager)

有关 Windows 插件的更多信息,请参阅使用 EC2Config 服务配置 Windows 实例(旧版)

将 Sysprep 与 EC2Config 服务一起运行

通过以下过程可使用 Sysprep 和 EC2Config 服务创建标准化 AMI。

  1. 在 Amazon EC2 控制台中,查找或创建要复制的 AMI。

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

  3. 对它进行自定义。

  4. 在 EC2Config 服务应答文件中指定配置设置:

    C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml

  5. 在 Windows 开始菜单中,选择所有程序,然后选择 EC2ConfigService Settings

  6. Ec2 Service Properties 对话框中选择 Image 选项卡。有关 Ec2 Service Properties 对话框中的选项和设置的更多信息,请参阅 Ec2 服务属性

  7. 选择管理员密码选项,然后选择 Shutdown with SysprepShutdown without Sysprep。EC2Config 会根据您选择的密码选项编辑设置文件。

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

    • Specify:密码以非加密格式(明文)存储在 Sysprep 应答文件中。下一次运行 Sysprep 时,它将设置管理员密码。如果现在就关闭,则会立即设置密码。服务再次启动时,则会删除管理员密码。务必要记住此密码,因为以后无法将其取回。

    • Keep Existing:运行 Sysprep 或重新启动 EC2Config 时,管理员账户的现有密码不变。务必要记住此密码,因为以后无法将其取回。

  8. 选择 OK

如果系统询问您是否想运行 Sysprep 并关闭该实例,请单击 Yes。您会看到 EC2Config 运行 Sysprep。然后,您会退出实例并且实例会关闭。如果您在 Amazon EC2 控制台中查看 Instances (实例) 页面,实例状态会从 Running 变为 Stopping,然后最终变为 Stopped。此时,从该实例创建一个 AMI 是安全的。

您可以使用以下命令从命令行中手动调用 Sysprep 工具:

"%programfiles%\amazon\ec2configservice\"ec2config.exe -sysprep""
注意

如果您的 CMD Shell 已在 C:\Program Files\Amazon\EC2ConfigService\ 目录中,则命令中不需要双引号。

但是,请务必确保 Ec2ConfigService\Settings 文件夹中指定的 XML 文件选项正确无误,否则您可能无法连接到实例。有关设置文件的更多信息,请参阅 EC2Config 设置文件。有关配置 Sysprep 并从命令行中运行它的示例,请参阅 Ec2ConfigService\Scripts\InstallUpdates.ps1