使用 EC2Launch 配置 Windows 实例 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 EC2Launch 配置 Windows 实例

EC2Launch 是一组 Windows PowerShell 脚本,它取代了 Windows Server 2016 及更高版本 AMI 上的 EC2Config 服务。所有受支持的 Windows Server 版本的最新启动服务是 EC2Launch v2,它取代了 EC2Config 和 EC2Launch。

EC2Launch 任务

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

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

  • 设置计算机名称。

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

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

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

  • 添加 DNS 后缀。

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

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

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

    重要

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

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

  • 初始化辅助 EBS 卷。

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

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

有关 Windows Server 2019 的更多信息,请参阅 Microsoft.com 上的 比较 Windows Server 版本中的功能

验证 EC2Launch 版本

使用以下 Windows PowerShell 命令验证已安装的 EC2Launch 版本。

PS C:\> Test-ModuleManifest -Path "C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1" | Select Version

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 目录都从 C:\ProgramData 继承其权限:

  • C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Scripts —此文件夹将继承自创建 C:\ProgramData 时起的所有初始权限,但会删除普通用户对目录中 CreateFiles 的访问权限。

配置 EC2Launch

在您的实例首次初始化后,您可以配置 EC2Launch 以再次运行并执行不同的启动任务。

配置初始化文件

指定 LaunchConfig.json 文件中的设置以启用或禁用以下初始化任务:

  • 设置计算机名称。

  • 将显示器设置为始终保持打开状态。

  • 设置新墙纸。

  • 添加 DNS 后缀列表。

  • 扩展引导卷大小。

  • 设置管理员密码。

配置初始化设置

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

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

    { "setComputerName": false, "setMonitorAlwaysOn": true, "setWallpaper": true, "addDnsSuffixList": true, "extendBootVolumeSize": true, "handleUserData": 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

计划 EC2Launch 在每次启动时运行

您可以计划 EC2Launch 在每次启动时运行,而不是仅仅在首次启动时运行。

要允许 EC2Launch 在每次启动时运行,请执行以下操作:

  1. 打开 Windows PowerShell 并运行以下命令:

    PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -SchedulePerBoot
  2. 或者,使用以下命令运行可执行文件:

    PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Settings\Ec2LaunchSettings.exe

    然后选择 Run EC2Launch on every boot。您可以为 EC2 实例指定 Shutdown without SysprepShutdown with Sysprep

注意

当您允许 EC2Launch 在每次启动时运行,下次 EC2Launch 运行时将发生以下情况:

  • 如果 AdminPasswordType 仍设置为 Random,则 EC2Launch 将在下次启动时生成新密码。在启动之后,AdminPasswordType 会自动设置为 DoNothing,以防止 EC2Launch 在后续启动时生成新密码。要防止 EC2Launch 在第一次启动时生成新密码,请手动将 AdminPasswordType 设置为 DoNothing,然后再重新启动。

  • 除非用户数据的 HandleUserData 设置为 false,否则 persist 将设置回 true。有关用户数据脚本的更多信息,请参阅 Amazon EC2 用户指南中的用户数据脚本

初始化驱动器并映射盘符

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