使用 EC2Launch 配置 Windows 实例
EC2Launch 是一组 Windows PowerShell 脚本,它取代了 Windows Server 2016 及 2019 AMI 上的 EC2Config 服务。这些 AMI 中有许多 AMI 仍然可用。EC2Launch v2 是所有支持的 Windows 版本的最新启动代理,它同时取代了 EC2Config 和 EC2Launch。有关更多信息,请参阅使用 EC2Launch v2 配置 Windows 实例。
EC2Launch 任务
在初始实例启动期间,默认情况下 EC2Launch 执行以下任务:
-
设置用来呈现实例相关信息的新墙纸。
-
设置计算机名称。
-
向 Amazon EC2 控制台发送实例信息。
-
向 EC2 控制台发送 RDP 证书指纹。
-
设置管理员账户的随机密码。
-
添加 DNS 后缀。
-
动态扩展操作系统分区以包含所有未分区的空间。
-
执行用户数据 (如果指定)。有关指定用户数据的更多信息,请参阅处理实例用户数据。
-
设置持久静态路由以访问元数据服务和 AWS KMS 服务器。
重要
如果从此实例创建了自定义 AMI,则捕获这些路由作为操作配置的一部分,并且从 AMI 启动的任意新实例将保留相同的路由,而不论其子网放置如何。要更新路由,请参阅在启动自定义 AMI 时更新 Server 2016 及更高版本的元数据/KMS 路由。
以下任务有助于保持与 EC2Config 服务的向后兼容。在启动期间,您还可以配置 EC2Launch 来执行以下任务:
-
初始化辅助 EBS 卷。
-
将 Windows 事件日志发送到 EC2 控制台日志。
-
将 Windows 已可供使用 消息发送到 EC2 控制台。
有关 Windows Server 2019 的更多信息,请参阅 Microsoft.com 上的 比较 Windows Server 版本中的功能
遥测
遥测是附加信息,可帮助 AWS 更好地了解您的需求、诊断问题并提供功能,以改善 AWS 服务带给您的体验。
EC2Launch 版本 1.3.2003498
及更高版本会收集遥测,例如使用情况指标和错误。此数据是从运行 EC2Launch 的 Amazon EC2 实例收集的。这包括 AWS 拥有的所有 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 目录都从 C:\ProgramData
继承其权限:
C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Scripts
—此文件夹将继承自创建C:\ProgramData
时起的所有初始权限,但会删除普通用户对目录中CreateFiles
的访问权限。
配置 EC2Launch
在您的实例首次初始化后,您可以配置 EC2Launch 以再次运行并执行不同的启动任务。
配置初始化文件
指定 LaunchConfig.json
文件中的设置以启用或禁用以下初始化任务:
-
设置计算机名称。
-
将显示器设置为始终保持打开状态。
-
设置新墙纸。
-
添加 DNS 后缀列表。
-
扩展引导卷大小。
-
设置管理员密码。
配置初始化设置
-
在要配置的实例上,在文本编辑器中打开以下文件:
C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json
。 -
根据需要更新以下设置并保存您的更改。仅当
adminPassword
为adminPasswordtype
时,在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
中指定密码,管理员账户会被禁用。
-
在 Windows PowerShell 中运行以下命令,以便安排脚本作为 Windows 计划任务运行。该脚本将在下次启动期间执行一次,然后禁止这些任务再次运行。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
计划 EC2Launch 在每次启动时运行
您可以计划 EC2Launch 在每次启动时运行,而不是仅仅在首次启动时运行。
要允许 EC2Launch 在每次启动时运行,请执行以下操作:
打开 Windows PowerShell 并运行以下命令:
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -SchedulePerBoot或者,使用以下命令运行可执行文件:
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Settings\Ec2LaunchSettings.exe然后选择
Run EC2Launch on every boot
。您可以为 EC2 实例指定Shutdown without Sysprep
或Shutdown 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
将盘符映射到卷
-
在文本编辑器中打开
C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json
文件。 -
指定以下卷设置并保存您的更改:
{ "driveLetterMapping": [ { "volumeName": "
sample volume
", "driveLetter": "H
" } ] } -
打开 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 事件日志
-
在实例上,在文本编辑器中
C:\ProgramData\Amazon\EC2-Windows\Launch\Config\EventLogConfig.json
打开文件。 -
配置以下日志设置并保存您的更改:
{ "events": [ { "logName": "
System
", "source": "An event source (optional)
", "level": "Error | Warning | Information
", "numEntries":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