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

使用 Sysprep 创建标准 Amazon 系统映像 (AMI)

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

我们还建议您将 Sysprep 与 EC2Config 服务一起运行,这样可使用应答文件自动执行并保护针对 AMI 的映像准备过程。默认情况下,该文件位于以下目录中:C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml

重要

  • EC2Launch 在 Windows Server 2016 上替换 EC2Config 服务。您可以在 Windows Server 2016 的完整版本 (带桌面体验) 上将 Sysprep 与 EC2Launch 配合使用。Windows Server 2016 的 Nano 安装不支持将 Sysprep 与 EC2Launch 配合使用。有关更多信息,请参阅 将 Sysprep 与 EC2Launch 结合使用

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

开始前的准备工作

将 Sysprep 与 EC2Config 服务结合使用

了解准备映像时的不同 Sysprep 执行阶段以及 EC2Config 服务执行的任务的详细信息。

Sysprep 阶段

Sysprep 会经历以下阶段:

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

    注意

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

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

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

Sysprep 操作

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

  1. EC2 Service Properties 对话框中选择 Shutdown with 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.exe

    sysprep.exe /unattend: "C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /generalize /shutdown

一般化阶段

  1. 该工具删除特定于映像的信息和配置 (如计算机名称和 SID)。如果实例是域的成员,则会从域中将其移除。sysprep2008.xml 应答文件包含影响这一阶段的以下设置:

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

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

  2. Sysprep.exe 在准备创建 AMI 时会关闭 OS。系统会启动新实例或启动原始实例。

专门化阶段

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

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

    如果您没有要转移到新映像的特定用户配置文件自定义设置,请将此设置更改为 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 服务监控 OS 的状态。如果 EC2Config 检测到 OS 处于 Sysprep 阶段,则会向系统日志发布以下消息:

    EC2ConfigMonitorState: 0 Windows is being configured. SysprepState=IMAGE_STATE_UNDEPLOYABLE

  2. 在 OOBE 阶段完成之后,系统从以下位置执行 SetupComplete.cmd:C:\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 就绪之后”插件。

    • AWS CloudWatch 日志

    • UserData

    • Simple Systems Manager (SSM)

有关 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

使用 EC2Config 对 Sysprep 进行故障排除

如果在映像准备过程中遇到问题或收到错误消息,请查看以下日志:

  • %WINDIR%\Panther\Unattendgc

  • %WINDIR%\System32\Sysprep\Panther

  • "C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt"

如果在使用 Sysprep 进行映像准备的过程中收到错误消息,则 OS 可能无法访问。要查看日志文件,您必须停止实例,将其根卷作为辅助卷挂载到另一个运行状况良好的实例,然后在辅助卷上查看前述日志。

如果在 Unattendgc 日志文件中找到错误,请使用 Microsoft 错误查找工具获取有关错误的更多详细信息。以下在 Unattendgc 日志文件中报告的问题通常是实例上一个或多个损坏的用户配置文件造成的:

Error [Shell Unattend] _FindLatestProfile failed (0x80070003) [gle=0x00000003] Error [Shell Unattend] CopyProfile failed (0x80070003) [gle=0x00000003]

有两个选项可用于解决此问题:

选项 1:在实例上使用 Regedit 搜索以下项。验证已删除用户是否没有配置文件注册表项:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\

选项 2:编辑 EC2Config 应答文件 (C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml) 并将 <CopyProfile>true</CopyProfile> 更改为 <CopyProfile>false</CopyProfile>。再次运行 Sysprep。请注意,此配置更改会在 Sysprep 完成之后删除内置管理员用户配置文件。