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

使用 EC2Launch 配置 Windows 实例

EC2Launch 是一组 Windows PowerShell 脚本,它取代了 Windows Server 2016 及 2019 AMI 上的 EC2Config 服务。这些 AMI 中有许多 AMI 仍然可用。EC2Launch v2 是所有支持的 Windows 版本的最新启动代理,它同时取代了 EC2Config 和 EC2Launch。有关更多信息,请参阅使用 EC2Launch v2 配置 Windows 实例

注意

要将 EC2Launch 与 IMDSv2 一起使用,版本必须为 1.3.2002730 或更高版本。

EC2Launch 任务

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

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

  • 将计算机名称设置为实例的私有 IPv4 地址。

  • 向 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 版本中的功能

遥测

遥测是附加信息,可帮助 Amazon 更好地了解您的需求、诊断问题并提供功能,以改善 Amazon 服务带给您的体验。

EC2Launch 版本 1.3.2003498 及更高版本会收集遥测,例如使用情况指标和错误。此数据是从运行 EC2Launch 的 Amazon EC2 实例收集的。这包括 Amazon 拥有的所有 Windows AMI。

EC2Launch 收集以下类型的遥测:

  • 使用情况信息 — 代理命令、安装方法和计划的运行频率。

  • 错误和诊断信息 — 代理安装和运行错误代码。

收集的数据示例:

2021/07/15 21:44:12Z: EC2LaunchTelemetry: IsAgentScheduledPerBoot=true 2021/07/15 21:44:12Z: EC2LaunchTelemetry: IsUserDataScheduledPerBoot=true 2021/07/15 21:44:12Z: EC2LaunchTelemetry: AgentCommandCode=1 2021/07/15 21:44:12Z: EC2LaunchTelemetry: AgentCommandErrorCode=5 2021/07/15 21:44:12Z: EC2LaunchTelemetry: AgentInstallCode=2 2021/07/15 21:44:12Z: EC2LaunchTelemetry: AgentInstallErrorCode=0

预设情况下,遥测处于启用状态。您可以随时禁用遥测收集。如果启用了遥测,EC2Launch 会发送遥测数据,无需额外的客户通知。

已收集您启用或禁用遥测的选择。

您可以选择或取消遥测收集。收集您选择或取消遥测的选择,以确保我们能够遵守您的遥测选项。

遥测可见性

启用遥测后,它将显示在 Amazon EC2 控制台输出中,如下所示:

2021/07/15 21:44:12Z: Telemetry: <Data>
在实例上禁用遥测

要通过设置系统环境变量来禁用遥测,请以管理员身份运行以下命令:

setx /M EC2LAUNCH_TELEMETRY 0

如需在安装过程中禁用遥测,请按照如下所示运行 install.ps1

. .\install.ps1 -EnableTelemetry:$false

验证 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 图形用户界面的应用程序。

  • Library — 包含 EC2 启动代理的共享库。

  • Logs — 包含脚本生成的日志文件。

EC2Launch 版本 1.3.2004592 及更高版本

Administrators 组的用户拥有对所有 EC2Launch 目录的 Full control 权限。不在管理员组中的用户拥有对所有 EC2Launch 目录(C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Config 除外)的 Read & execute 权限。Config 目录仅限 Administrators 组中的成员用户使用。

EC2Launch 版本 1.3.2004491 及更早版本

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

配置 EC2Launch

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

配置初始化文件

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

  • 将计算机名称设置为实例的私有 IPv4 地址。

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

  • 设置新墙纸。

  • 添加 DNS 后缀列表。

    注意

    这会为以下域添加 DNS 后缀查找,并配置其他标准后缀。有关启动代理如何设置 DNS 后缀的更多信息,请参阅 配置 DNS 后缀

    region.ec2-utilities.amazonaws.com
  • 扩展引导卷大小。

  • 设置管理员密码。

配置初始化设置
  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 实例上的卷。该脚本用于初始化尚未初始化和分区的驱动器。有关在 Windows 中获取卷详细信息的更多信息,请参阅 Microsoft 文档中的 Get-Volume

将盘符映射到卷
  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