使用 EC2Launch 配置 Windows 实例 - Amazon Elastic Compute Cloud

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 EC2Launch 配置 Windows 实例

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

EC2Launch 任务

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

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

  • 设置计算机名称。

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

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

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

  • 添加 DNS 后缀。

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

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

  • 设置持久静态路由以访问元数据服务和 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 运行时将对 LaunchConfig.json 进行以下更改:

  • AdminPasswordType 将设置回 DoNothing,这样就不在每次启动时更改密码。

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

与此类似,如果您不希望在下次启动时重置密码,则应在重新启动之前将 AdminPasswordType 设置为 DoNothing

初始化驱动器并映射盘符

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