EC2Launch v2 设置
本节包含有关如何配置 EC2Launch v2 的设置的信息。
主题包含:
使用 EC2Launch v2 设置对话框更改设置
以下过程介绍如何使用 EC2Launch v2 设置对话框来启用或禁用设置。
注意
如果您在 agent-config.yml 文件中适当配置了自定义任务,并尝试打开 Amazon EC2Launch settings(Amazon EC2Launch 设置)对话框,则会收到错误消息。有关示例架构,请参阅 示例:agent-config.yml。
-
启动并连接到您的 Windows 实例。
-
从“开始”菜单,选择所有程序,然后导航到 EC2Launch 设置。
-
在 EC2Launch 设置 对话框的常规选项卡上,您可以启用或禁用以下设置。
-
Set Computer Name(设置电脑名称)
如果启用此设置(默认情况下禁用),则每次引导时会将当前主机名与所需主机名进行比较。如果主机名不匹配,则会重置主机名,然后系统可以选择重新启动以接受新的主机名。如果未指定自定义主机名,则该主机名会以十六进制格式的私有 IPv4 地址生成,例如:
ip-AC1F4E6
。若要防止修改现有主机名,请不要启用该设置。 -
扩展引导卷
此设置可动态扩展
Disk 0
/Volume 0
以包含所有未分区的空间。从具有自定义大小的根设备卷启动实例时,此设置非常有用。 -
设置管理员帐户
启用后,您可以为在本地计算机上创建的管理员账户设置用户名和密码属性。如果未启用此功能,则在 Sysprep 之后,不会在系统上创建管理员账户。仅当
adminPassword
为adminPasswordtype
时,在Specify
中提供密码。密码类型定义如下:
-
Random
EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。
-
Specify
EC2Launch 使用您在
adminPassword
中指定的密码 如果密码不满足系统要求,EC2Launch 会生成随机密码。该密码以明文方式存储在agent-config.yml
文件中,并且在 Sysprep 设置管理员密码时会被删除。EC2Launch 使用用户的密钥对密码进行加密。 -
Do not set
EC2Launch 使用您在 unattend.xml 文件中指定的密码。如果未在 unattend.xml 中指定密码,管理员账户会被禁用。
-
-
启动 SSM 服务
如果选择此选项,Systems Manager 服务将启用,以便在 Sysprep 之后启动。EC2Launch v2 执行前面所述的所有任务,而 SSM Agent 处理 Run Command 和 State Manager 这样的 Systems Manager 功能的请求。
您可以使用 Run Command 升级现有实例,以便使用最新版本的 EC2Launch v2 服务和 SSM Agent。有关更多信息,请参阅 Amazon Systems Manager 用户指南中的使用 Run Command 更新 SSM Agent。
-
优化 ENA
在选中时,将配置 ENA 设置以确保针对 Amazon 优化了 ENA 接收端扩展和接收队列深度设置。有关更多信息,请参阅配置 RSS CPU 关联。
-
启用 SSH
此设置为更高版本的 Windows 启用 OpenSSH,以允许远程系统管理。
-
启用巨型帧
选择此项可启用巨型帧。巨型帧可能会对您的网络通信造成意外的影响,因此在启用之前,请确保您了解巨型帧将如何影响系统。有关巨型帧的详细信息,请参阅巨型帧 (9001 MTU)。
-
准备映像
选择您希望在使用或不使用 Sysprep 的情况下关闭 EC2 实例。如果您希望将 Sysprep 与 EC2Launch v2 配合使用,请选择 Shutdown with Sysprep (使用 Sysprep 关闭)。
-
-
在 DNS 后缀选项卡上,您可以选择是否要添加 DNS 后缀列表,供在 EC2 中运行的服务器的 DNS 解析使用,而不提供完全限定的域名。DNS 后缀可以包含变量
$REGION
和$AZ
。只有尚不存在的后缀才会添加到列表中。 -
在墙纸选项卡上,您可以使用背景图像配置实例墙纸,并为要显示的墙纸指定实例详细信息。Amazon EC2 会在您每次登录时生成详细信息。
您可以使用以下控件配置墙纸。
-
在墙纸上显示实例详细信息 – 此复选框会启用或禁用在墙纸上显示实例详细信息。
-
图像路径 (.jpg) – 指定用作墙纸背景的图像路径。
-
选择要在墙纸上显示的属性 – 选中要在墙纸上显示的实例详细信息的复选框。清除之前选中的要从墙纸中删除的实例详细信息的复选框。
-
在墙纸上显示实例标签 – 选择以下设置之一,以在墙纸上显示实例标签:
-
无 – 不在墙纸上显示任何实例标签。
-
显示全部 – 在墙纸上显示所有实例标签。
-
显示筛选部分 – 在墙纸上显示指定的实例标签。当您选择此设置时,您可以在实例标签筛选条件框中添加要在墙纸上显示的实例标签。
注意
必须启用元数据中的标签,才能在墙纸上显示标签。有关实例标签和元数据的更多信息,请参阅 使用实例元数据中的实例标签。
-
-
-
在卷选项卡上,选择是否要初始化附加到实例的卷。启用时,可为任何附加卷设置驱动器盘符,并扩展它们以使用可用空间。如果选择全部,则初始化所有存储卷。如果选择设备,则只初始化列表中指定的设备。您必须为要初始化的每个设备进行输入。使用 EC2 控制台上列出的设备,例如,
xvdb
或/dev/nvme0n1
。下拉列表显示已附加到实例的存储卷。要输入未附加到实例的设备,请在文本字段中输入该设备。名称、盘符和分区是可选字段。如果没有为分区指定值,则使用 GPT 分区类型初始化大于 2 TB 的存储卷,使用 MBR 分区类型初始化小于 2 TB 的存储卷。如果配置了设备,并且非 NTFS 设备包含分区表,或者磁盘的前 4 KB 包含数据,则跳过磁盘并记录操作。
以下是根据在 EC2Launch 对话框中输入的设置创建的示例配置 YAML 文件。
version: 1.0 config: - stage: boot tasks: - task: extendRootPartition - stage: preReady tasks: - task: activateWindows inputs: activation: type: amazon - task: setDnsSuffix inputs: suffixes: - $REGION.ec2-utilities.amazonaws.com - task: setAdminAccount inputs: password: type: random - task: setWallpaper inputs: path: C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg attributes: - hostName - instanceId - privateIpAddress - publicIpAddress - instanceSize - availabilityZone - architecture - memory - network - stage: postReady tasks: - task: startSsm
EC2Launch v2 目录结构
EC2Launch v2 应安装在以下目录中:
-
服务二进制文件:
%ProgramFiles%\Amazon\EC2Launch
-
服务数据(设置、日志文件和状态文件):
%ProgramData%\Amazon\EC2Launch
注意
默认情况下,Windows 会隐藏 C:\ProgramData
下的文件和文件夹。要查看 EC2Launch v2 目录和文件,必须在 Windows 资源管理器中输入路径,或者更改文件夹属性以显示隐藏的文件和文件夹。
%ProgramFiles%\Amazon\EC2Launch
目录包含二进制文件和支持库。它包括以下子目录:
-
settings
-
EC2LaunchSettingsUI.exe
– 用于修改agent-config.yml
文件的用户界面 -
YamlDotNet.dll
– 用于支持用户界面中部分操作的 DLL
-
-
tools
-
ebsnvme-id.exe
– 用于检查实例上 EBS 卷的元数据的工具 -
AWSAcpiSpcrReader.exe
– 用于确定要使用的正确 COM 端口的工具 -
EC2LaunchEventMessage.dll
– 用于支持 EC2Launch 的 Windows 事件日志记录的 DLL。
-
-
service
-
EC2LaunchService.exe
— 当启动代理作为一项服务运行时所启动的 Windows 服务可执行文件。
-
-
EC2Launch.exe
– 主要 EC2Launch 可执行文件 -
EC2LaunchAgentAttribution.txt
– EC2Launch 中使用的代码的归因
%ProgramData%\Amazon\EC2Launch
目录包含以下子目录。服务生成的所有数据(包括日志、配置和状态)都存储在此目录中。
-
config
– 配置服务配置文件作为
agent-config.yml
存储在此目录中。此文件可以进行更新以修改、添加或删除由服务运行的原定设置任务。在此目录中创建文件的权限仅限于管理员账户,以防止特权提升。 -
log
– 实例日志服务 (
agent.log
)、控制台 (console.log
)、性能 (bench.log
) 和错误 (error.log
) 的日志存储在此目录中。日志文件会在服务的后续执行时附加。 -
state
– 服务状态数据服务用于确定应运行哪些任务的状态存储在此处。其中有一个
.run-once
文件,指示服务是否已在 Sysprep 之后运行(因此,频率为一次的任务在下次运行时将跳过)。此子目录包含state.json
和previous-state.json
,用于跟踪每个任务的状态。 -
sysprep
– Sysprep此目录包含的文件用于确定 Sysprep 在创建可重复使用的自定义 Windows AMI 时,需要执行哪些操作。
使用 CLI 配置 EC2Launch v2
您可以使用命令行界面 (CLI) 配置 EC2Launch 设置和管理服务。以下部分包含您可用于管理 EC2Launch v2 的 CLI 命令的描述和使用信息。
collect-logs
收集 EC2Launch 的日志文件,压缩文件,并将其放置在指定的目录中。
示例
ec2launch collect-logs -o C:\Mylogs.zip
用法
ec2launch collect-logs [flags]
Flags
-h
, --help
collect-logs
的帮助
-o
, --output string
压缩输出日志文件的路径
get-agent-config
以指定的格式(JSON 或 YAML)输出 agent-config.yml
。如果未指定格式,则会以先前指定的格式输出 agent-config.yml
。
示例
ec2launch get-agent-config -f json
示例 2
以下 PowerShell 命令展示了如何以 JSON 格式编辑和保存 agent-config
文件。
$config = & "$env:ProgramFiles/Amazon/EC2Launch/EC2Launch.exe" --format json | ConvertFrom-Json $jumboFrame =@" { "task": "enableJumboFrames" } "@ $config.config | %{if($_.stage -eq 'postReady'){$_.tasks += (ConvertFrom-Json -InputObject $jumboFrame)}} $config | ConvertTo-Json -Depth 6 | Out-File -encoding UTF8 $env:ProgramData/Amazon/EC2Launch/config/agent-config.yml
用法
ec2launch get-agent-config [flags]
Flags
-h
, --help
get-agent-config
的帮助
-f
, --format string
agent-config
文件的输出格式:json
、yaml
list-volumes
列出附加到实例的所有存储卷,包括临时卷和 EBS 卷。
示例
ec2launch list-volumes
用法
ec2launch list-volumes
Flags
-h
, --help
list-volumes
的帮助
重置
此任务的主要目标是在代理下次运行时对其进行重置 为此,reset 命令从本地 EC2Launch
目录中删除 EC2Launch v2 的所有代理状态数据(请参阅 EC2Launch v2 目录结构)。重置可选择性地删除服务和 Sysprep 日志。
脚本行为取决于代理在哪种模式下运行脚本:内联或分离。
- 内联(默认)
-
EC2Launch v2 代理一次只能运行一个脚本(
detach: false
)。这是默认设置。注意
当您的内联脚本发出 reset 或 sysprep 命令时,它会立即运行并重置代理。当前任务完成,然后代理在不运行任何其他任务的情况下关闭。
例如,如果发出命令的任务之后会有
startSsm
任务(默认情况下在用户数据运行后包括在内),则该任务不会运行,Systems Manager 服务也不会启动。 - 已分离
-
EC2Launch v2 代理与其他任务同时运行脚本(
detach: true
)。注意
当分离的脚本发出 reset 或 sysprep 命令时,这些命令会等待代理完成后再运行。executeScript 之后的任务仍将运行。
示例
ec2launch reset -c
用法
ec2launch reset [flags]
Flags
-c
, --clean
在reset
前清除实例日志
-h
, --help
reset
的帮助
run
运行 EC2Launch v2。
示例
ec2launch run
用法
ec2launch run [flags]
Flags
-h
, --help
run
的帮助
status
获取 EC2Launch v2 代理的状态。也可选择在代理完成运行之前阻止该进程。进程退出代码决定了代理状态:
-
0
– 代理已运行并且成功。 -
1
– 代理已运行但失败。 -
2
– 代理仍在运行中。 -
3
– 代理处于未知状态。代理状态为未运行或已停止。 -
4
– 尝试检索代理状态时出现错误。 -
5
– 代理未运行,并且上次已知运行的状态未知。这可能意味着以下之一:-
state.json
和previous-state.json
都将被删除。 -
previous-state.json
已损坏。
这是运行 reset 命令后的代理状态。
-
示例:
ec2launch status -b
用法
ec2launch status [flags]
Flags
-b
,--block
在代理完成运行前阻止才进程
-h
,--help
status
的帮助
sysprep
此任务的主要目标是在代理下次运行时对其进行重置 为此,sysprep 命令会重置代理状态、更新 unattend.xml
文件、禁用 RDP 并运行 Sysprep。
脚本行为取决于代理在哪种模式下运行脚本:内联或分离。
- 内联(默认)
-
EC2Launch v2 代理一次只能运行一个脚本(
detach: false
)。这是默认设置。注意
当您的内联脚本发出 reset 或 sysprep 命令时,它会立即运行并重置代理。当前任务完成,然后代理在不运行任何其他任务的情况下关闭。
例如,如果发出命令的任务之后会有
startSsm
任务(默认情况下在用户数据运行后包括在内),则该任务不会运行,Systems Manager 服务也不会启动。 - 已分离
-
EC2Launch v2 代理与其他任务同时运行脚本(
detach: true
)。注意
当分离的脚本发出 reset 或 sysprep 命令时,这些命令会等待代理完成后再运行。executeScript 之后的任务仍将运行。
示例:
ec2launch sysprep
用法
ec2launch sysprep [flags]
Flags
-c
,--clean
在sysprep
前清除实例日志
-h
,--help
Sysprep 的帮助
-s
,--shutdown
sysprep
之后关闭实例
验证
验证 agent-config
文件 C:\ProgramData\Amazon\EC2Launch\config\agent-config.yml
。
示例
ec2launch validate
用法
ec2launch validate [flags]
Flags
-h
,--help
validate
的帮助
版本
获取可执行版本。
示例
ec2launch version
用法
ec2launch version [flags]
Flags
-h
, --help
version
的帮助
wallpaper
将新壁纸设置为提供的壁纸路径(.jpg 文件),并显示选定的实例详细信息。
语法
ec2launch wallpaper ^ --path="C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg" ^ --all-tags ^ --attributes=hostName,instanceId,privateIpAddress,publicIpAddress,instanceSize,availabilityZone,architecture,memory,network
输入
参数
- --allowed-tags [
tag-name-1
、tag-name-n
] -
(可选)要显示在墙纸上的实例标签名称的 JSON 数组(采用 Base64 编码)。您可以使用此标签或
--all-tags
,但不能同时使用两者。 - --attributes
attribute-string-1
、attribute-string-n
-
(可选)以逗号分隔的
wallpaper
属性字符串列表,用于将设置应用于墙纸。 - [--path | -p]
path-string
-
(必需)指定
wallpaper
背景图像文件路径。
Flags
- --all-tags
-
(可选)显示墙纸上的所有实例标签。您可以使用此标签或
--allowed-tags
,但不能同时使用两者。 - [--help | -h]
-
显示 wallpaper 命令的帮助信息。
EC2Launch v2 任务配置
本节包括 agent-config.yml
和用户数据的配置架构、任务、详细信息和示例。
架构:agent-config.yml
agent-config.yml
文件的结构如下所示。请注意,不能在同一阶段重复一个任务。有关任务属性,请参阅随后的任务说明。
文档结构:agent-config.yml
JSON
{ "version": "1.0", "config": [ { "stage": "string", "tasks": [ { "task": "string", "inputs": { ... } }, ... ] }, ... ] }
YAML
version: 1.0 config: - stage: string tasks: - task: string inputs: ... ... ...
示例:agent-config.yml
以下示例显示了 agent-config.yml
配置文件的设置。
version: 1.0 config: - stage: boot tasks: - task: extendRootPartition - stage: preReady tasks: - task: activateWindows inputs: activation: type: amazon - task: setDnsSuffix inputs: suffixes: - $REGION.ec2-utilities.amazonaws.com - task: setAdminAccount inputs: password: type: random - task: setWallpaper inputs: path: C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg attributes: - hostName - instanceId - privateIpAddress - publicIpAddress - instanceSize - availabilityZone - architecture - memory - network - stage: postReady tasks: - task: startSsm
架构:用户数据
以下 JSON 和 YAML 示例显示了用户数据的文档结构。Amazon EC2 解析您在文档中指定的 tasks
数组中命名的每个任务。每个任务都有自己的一组属性和要求。有关详细信息,请参阅 任务定义。
注意
任务只能在用户数据任务数组中出现一次。
文档结构:用户数据
JSON
{ "version": "1.1", "tasks": [ { "task": "string", "inputs": { ... }, }, ... ] }
YAML
version: 1.1 tasks: - task: string inputs: ... ...
示例:用户数据
有关用户数据的更多信息,请参阅 启动时在 Windows 实例上运行命令。
以下 YAML 文档示例显示了 EC2Launch v2 作为用户数据运行的 PowerShell 脚本,用于创建文件。
version: 1.1 tasks: - task: executeScript inputs: - frequency: always type: powershell runAs: localSystem content: |- New-Item -Path 'C:\PowerShellTest.txt' -ItemType File
您可以对用户数据使用与先前版本的启动代理兼容的 XML 格式。EC2Launch v2 在 UserData
阶段将脚本作为 executeScript
任务运行。为了符合 EC2Launch v1 和 EC2Config 的行为,默认情况下,用户数据脚本以附加/内联进程运行。
您可以添加可选标签来自定义脚本的运行方式。例如,要在实例重新启动时运行用户数据脚本以及在实例启动时运行一次用户数据脚本,您可以使用以下标签:
<persist>true</persist>
示例:
<powershell> $file = $env:SystemRoot + "\Temp" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>
要将 XML 用户数据脚本作为分离的进程运行,请在您的用户数据中添加以下标签。
<detach>true</detach>
示例:
<powershell> $file = $env:SystemRoot + "\Temp" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <detach>true</detach>
注意
以前的启动代理不支持分离标签。
更改日志:用户数据
下表列出了用户数据更改,并将其交叉引用至适用的 EC2Launch v2 代理版本。
用户数据版本 | 详细信息 | 已引入 |
---|---|---|
1.1 |
|
EC2Launch v2 版本 2.0.1245 |
1.0 |
|
EC2Launch v2 版本 2.0.0 |
* 与默认 agent-config.yml
文件结合使用时。
任务定义
每个任务都有自己的一组属性和要求。有关详细信息,请参阅要包含在文档中的单个任务。
任务
activateWindows
针对一组 Amazon KMS 服务器激活 Windows。如果实例被检测为自带许可(BYOL),则会跳过激活过程。
Frequency – 一次
AllowedStages – [PreReady]
输入 –
activation
:(映射)
type
:(字符串)使用的激活类型,设置为 amazon
示例
task: activateWindows inputs: activation: type: amazon
enableJumboFrames
启用巨型帧,这会增加网络适配器的最大传输单位 (MTU)。有关更多信息,请参阅巨型帧 (9001 MTU)。
Frequency – 始终
AllowedStages – [PostReady, UserData]
Inputs – 无
示例
task: enableJumboFrames
enableOpenSsh
启用 Windows OpenSSH 并将实例的公有密钥添加到授权密钥文件夹中。
Frequency – 一次
AllowedStages – [PreReady, UserData]
Inputs – 无
示例
以下示例说明如何在实例上启用 OpenSSH,以及如何将实例的公有密钥添加到授权的密钥文件夹中。此配置仅适用于运行 Windows Server 2019 及更高版本的实例。
task: enableOpenSsh
executeProgram
使用可选参数并以指定的频率运行程序。
阶段:您可以在 PreReady
、PostReady
和 UserData
阶段运行 executeProgram
任务。
频率:可配置,参见输入。
- 输入
-
您可将运行时系统参数配置如下:
- 频率(字符串)
-
(必填)确切指定以下默认值中的一项:
-
once
-
always
-
- 路径(字符串)
-
(必填)要运行的可执行文件的路径。
- 参数(字符串列表)
-
(可选)以逗号分隔的参数列表,作为输入提供给程序。
- 运行为(字符串)
-
(必填)必须设置为
localSystem
- 输出
-
所有任务都会将日志文件条目写入
agent.log
文件。executeProgram
任务的其他输出会单独存储在一个动态命名的文件夹中,如下所示:%LocalAppData%\Temp\
EC2Launch#########
\outputfilename.tmp
输出文件的确切路径包含在
agent.log
文件中,例如:Program file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\ExecuteProgramInputs.tmp Output file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Output.tmp Error file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Err.tmp
executeProgram
任务的输出文件ExecuteProgramInputs.tmp
-
包含可执行文件的路径以及
executeProgram
任务将在运行时传递给该可执行文件的所有输入参数。 Output.tmp
-
包含
executeProgram
任务运行的程序的运行时系统输出。 Err.tmp
-
包含
executeProgram
任务运行的程序的运行时系统错误消息。
- 示例
-
以下示例演示了如何使用
executeProgram
任务从实例的本地目录运行可执行文件。示例 1:带有一个参数的安装程序可执行文件
此示例演示了一个在静默模式下运行安装程序可执行文件的
executeProgram
任务。task: executeProgram inputs: - frequency: always path: C:\Users\Administrator\Desktop\setup.exe arguments: ['-quiet']
示例 2:带有两个参数的 VLC 可执行文件
此示例演示了一个运行具有两个参数的 VLC 可执行文件的
executeProgram
任务,该任务将这两个参数作为输入参数传递。task: executeProgram inputs: - frequency: always path: C:\vlc-3.0.11-win64.exe arguments: ['/L=1033','/S'] runAs: localSystem
executeScript
使用可选参数和指定的频率运行脚本。脚本行为取决于代理在哪种模式下运行脚本:内联或分离。
- 内联(默认)
-
EC2Launch v2 代理一次只能运行一个脚本(
detach: false
)。这是默认设置。注意
当您的内联脚本发出 reset 或 sysprep 命令时,它会立即运行并重置代理。当前任务完成,然后代理在不运行任何其他任务的情况下关闭。
例如,如果发出命令的任务之后会有
startSsm
任务(默认情况下在用户数据运行后包括在内),则该任务不会运行,Systems Manager 服务也不会启动。 - 已分离
-
EC2Launch v2 代理与其他任务同时运行脚本(
detach: true
)。注意
当分离的脚本发出 reset 或 sysprep 命令时,这些命令会等待代理完成后再运行。executeScript 之后的任务仍将运行。
阶段:您可以在 PreReady
、PostReady
和 UserData
阶段运行 executeScript
任务。
频率:可配置,参见输入。
- 输入
-
您可将运行时系统参数配置如下:
- 频率(字符串)
-
(必填)确切指定以下默认值中的一项:
-
once
-
always
-
- 类型(字符串)
-
(必填)确切指定以下默认值中的一项:
-
batch
-
powershell
-
- 参数(字符串列表)
-
(可选)要传递给 Shell 的字符串参数的列表。
type: batch
不支持此参数。 - 内容(字符串)
-
(必填)脚本内容。
- 运行为(字符串)
-
(必填)确切指定以下默认值中的一项:
-
admin
-
localSystem
-
- 分离(布尔值)
-
(可选)EC2Launch v2 代理默认每次运行一个脚本(
detach: false
)。要与其他任务同时运行脚本,请将此值设置为true
(detach: true
)。注意
如果将
detach
设置为true
,则脚本退出代码(包括3010
)不产生作用。
- 输出
-
所有任务都会将日志文件条目写入
agent.log
文件。executeScript
任务运行的脚本的其他输出会单独存储在一个动态命名的文件夹中,如下所示:%LocalAppData%\Temp\
EC2Launch#########
\outputfilename.ext
输出文件的确切路径包含在
agent.log
文件中,例如:Program file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\UserScript.ps1 Output file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Output.tmp Error file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Err.tmp
executeScript
任务的输出文件UserScript.
ext
-
包含
executeScript
任务运行的脚本。文件扩展名取决于您在executeScript
任务的type
参数中指定的脚本类型,如下所示:-
如果类型为
batch
,则文件扩展名为.bat
。 -
如果类型为
powershell
,则文件扩展名为.ps1
。
-
Output.tmp
-
包含
executeScript
任务运行的脚本的运行时系统输出。 Err.tmp
-
包含
executeScript
任务运行的脚本的运行时系统错误消息。
- 示例
-
以下示例演示了如何使用
executeScript
任务运行内联脚本。示例 1:Hello world 输出文本文件
此示例演示了一个运行 PowerShell 脚本,以在
C:
驱动器上创建一个“Hello world”文本文件的executeScript
任务。task: executeScript inputs: - frequency: always type: powershell runAs: admin content: |- New-Item -Path 'C:\PowerShellTest.txt' -ItemType File Set-Content 'C:\PowerShellTest.txt' "Hello world"
示例 2:运行两个脚本
此示例说明了
executeScript
任务可以运行多个脚本,并且脚本类型不必一致。第一个脚本 (
type: powershell
) 会将当前在实例上运行的进程的摘要写入C:
驱动器上的一个文本文件。第二个脚本 (
batch
) 会将系统信息写入Output.tmp
文件。task: executeScript inputs: - frequency: always type: powershell content: | Get-Process | Out-File -FilePath C:\Process.txt runAs: localSystem - frequency: always type: batch content: | systeminfo
示例 3:重启后的幂等系统配置
此示例显示了一个运行一个幂等脚本来执行以下系统配置,并在每个步骤之间重新启动的
executeScript
任务:-
将计算机重命名。
-
将计算机加入到域中。
-
启用 Telnet。
该脚本会确保每个操作仅运行一次,从而防止循环重启并确保脚本的幂等性。
task: executeScript inputs: - frequency: always type: powershell runAs: localSystem content: |- $name = $env:ComputerName if ($name -ne $desiredName) { Rename-Computer -NewName $desiredName exit 3010 } $domain = Get-ADDomain if ($domain -ne $desiredDomain) { Add-Computer -DomainName $desiredDomain exit 3010 } $telnet = Get-WindowsFeature -Name Telnet-Client if (-not $telnet.Installed) { Install-WindowsFeature -Name "Telnet-Client" exit 3010 }
-
extendRootPartition
扩展根卷以使用磁盘上的所有可用空间。
Frequency – 一次
AllowedStages – [Boot]
Inputs – 无
示例
task: extendRootPartition
initializeVolume
初始化附加到实例的空卷,以便对它们进行激活和分区。如果启动代理检测到卷不是空卷,则会跳过初始化。如果卷的前 4KiB 为空,或者卷没有 Windows 可识别的驱动器布局
无论驱动器是否已初始化,此任务运行时始终应用 letter
输入参数。
initializeVolume
任务执行以下操作。
-
将磁盘属性
offline
和readonly
设置为 false。 -
创建分区。如果在
partition
输入参数中未指定分区类型,则应用以下默认值:-
如果磁盘大小小于 2TB,则将分区类型设置为
MBR
。 -
如果磁盘大小为 2TB 或更大,则将分区类型设置为
GPT
。
-
-
将卷格式设置为 NTFS。
-
按如下方式设置卷标:
-
使用
name
输入参数的值(如已指定)。 -
如果卷是临时卷,并且未指定名称,请将卷标设置为
Temporary Storage Z
。
-
-
如果卷是临时卷(SSD 或 HDD,而不是 Amazon EBS),请在卷的根目录下创建一个包含以下内容的
Important.txt
文件:This is an 'Instance Store' disk and is provided at no additional charge. *This disk offers increased performance since it is local to the host *The number of Instance Store disks available to an instance vary by instance type *DATA ON THIS DRIVE WILL BE LOST IN CASES OF IMPAIRMENT OR STOPPING THE INSTANCE. PLEASE ENSURE THAT ANY IMPORTANT DATA IS BACKED UP FREQUENTLY For more information, please refer to: Amazon EC2 实例存储.
-
将驱动器号设置为
letter
输入参数中指定的值。
阶段:您可以在 PostReady
和 UserData
阶段运行 initializeVolume
任务。
频率:始终。
- 输入
-
您可将运行时系统参数配置如下:
- 设备(映射列表)
-
(如有条件)启动代理初始化的每个设备的配置。当
initialize
输入参数设置为devices
时,则为必需。-
设备(字符串,必需)- 在创建实例期间标识设备。例如,
xvdb
、xvdf
或\dev\nvme0n1
。 -
字母(字符串,可选)- 一个字符。要分配的驱动器号。
-
名称(字符串,可选)- 要分配的卷名称。
-
分区(字符串,可选)- 为要创建的分区类型指定以下值之一,或者让启动代理根据卷大小进行默认设置:
-
MBR
-
GPT
-
-
- 初始化(字符串)
-
(必填)确切指定以下默认值中的一项:
-
all
-
devices
-
- 示例
-
以下示例显示了
initializeVolume
任务的示例输入配置。示例 1:在一个实例上初始化两个卷
此示例显示了一个在实例上初始化两个辅助卷的
initializeVolume
任务。示例中名为DataVolume2
的设备是临时的。task: initializeVolume inputs: initialize: devices devices: - device: xvdb name: DataVolume1 letter: D partition: mbr - device: /dev/nvme0n1 name: DataVolume2 letter: E partition: gpt
示例 2:初始化附加到实例的 EBS 卷
此示例显示了一个对附加到实例的所有空 EBS 卷进行初始化的 initializeVolume
任务。
task: initializeVolume inputs: initialize: all
optimizeEna
根据当前实例类型优化 ENA 设置;可能会重新引导实例。
Frequency – 始终
AllowedStages – [PostReady, UserData]
Inputs – 无
示例
task: optimizeEna
setAdminAccount
为在本地计算机上创建的管理员账户设置默认属性。
Frequency – 一次
AllowedStages – [PreReady]
输入 –
name
:(字符串)管理员账户的名称
password
:(映射)
type
:(字符串)用于设置密码的策略,可为 static
、random
或 doNothing
data
:(字符串)存储数据,如果 type
字段为 static
示例
task: setAdminAccount inputs: name: Administrator password: type: random
setDnsSuffix
将 DNS 后缀添加到搜索后缀列表中。只有尚不存在的后缀才会添加到列表中。有关启动代理如何设置 DNS 后缀的更多信息,请参阅 配置 DNS 后缀。
Frequency – 始终
AllowedStages – [PreReady]
输入 –
suffixes
:(字符串列表)一个或多个有效 DNS 后缀的列表;有效替换变量是 $REGION
和 $AZ
示例
task: setDnsSuffix inputs: suffixes: - $REGION.ec2-utilities.amazonaws.com
setHostName
将计算机的主机名设置为自定义字符串,如果未指定 hostName
,则该值为私有 IPv4 地址。
Frequency – 始终
AllowedStages – [PostReady, UserData]
输入 –
hostName
:(字符串)可选主机名,必须采用如下格式。
-
必须为 15 个字符或更少
-
必须仅包含字母数字字符(a-z、A-Z、0-9)和连字符 (-)。
-
不能完全由数字字符组成。
reboot
:(布尔值)表示在更改主机名时是否允许重新引导
示例
task: setHostName inputs: reboot: true
setWallpaper
在每个现有用户的启动文件夹中创建 setwallpaper.lnk
快捷方式文件,但 Default User
除外。当用户在实例启动后首次登录时,此快捷方式文件就会运行。使用显示实例属性的自定义壁纸设置实例。
快捷方式文件路径是:
$env:SystemDrive/Users/<user>/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/setwallpaper.lnk
注意
删除 setWallpaper
任务不会删除此快捷方式文件。有关更多信息,请参阅 setWallpaper 任务未启用,但壁纸会在重新启动时重置。
阶段:您可以在 PreReady
和 UserData
阶段配置墙纸。
频率:always
墙纸配置
您可以使用以下设置配置墙纸。
- 输入
-
您提供的输入参数以及可设置以配置墙纸的属性:
- 属性(字符串列表)
-
(可选)您可以向墙纸添加以下一项或多项属性:
-
architecture
-
availabilityZone
-
hostName
-
instanceId
-
instanceSize
-
memory
-
network
-
privateIpAddress
-
publicIpAddress
-
- InstanceTags
-
(可选)您可以仅使用以下选项之一进行此设置。
-
AllTags(字符串)– 将所有实例标签添加到墙纸。
instanceTags: AllTags
-
InstanceTags(字符串列表)– 指定要添加到墙纸的实例标签名称列表。例如:
instanceTags: - Tag 1 - Tag 2
-
- 路径(字符串)
-
(必需)用于墙纸图像的本地 .jpg 格式图像文件的文件名路径。
示例
以下示例显示墙纸配置输入(可设置墙纸背景图像文件路径)、名为 Tag 1
和 Tag 2
的实例标签,以及实例的主机名、实例 ID 及私有和公有 IP 地址等属性。
task: setWallpaper inputs: path: C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg attributes: - hostName - instanceId - privateIpAddress - publicIpAddress instanceTags: - Tag 1 - Tag 2
注意
必须启用元数据中的标签,才能在墙纸上显示标签。有关实例标签和元数据的更多信息,请参阅 使用实例元数据中的实例标签。
startSsm
在 Sysprep 之后启动 Systems Manager (SSM) 服务。
Frequency – 始终
AllowedStages – [PostReady, UserData]
Inputs – 无
示例
task: startSsm
sysprep
重置服务状态、更新 unattend.xml
、禁用 RDP 并运行 Sysprep。此任务仅在所有其他任务完成后才会运行。
Frequency – 一次
AllowedStages – [UserData]
输入 –
clean
:(布尔值)在运行 Sysprep 之前清理实例日志
shutdown
:(布尔值)在运行 Sysprep 后关闭实例
示例
task: sysprep inputs: clean: true shutdown: true
writeFile
将文件写入目标。
Frequency – 请参阅 Inputs
AllowedStages – [PostReady, UserData]
输入 –
frequency
:(字符串)once
或 always
之一
destination
:(字符串)写入内容的路径
content
:(字符串)要写入目标的文本
示例
task: writeFile inputs: - frequency: once destination: C:\Users\Administrator\Desktop\booted.txt content: Windows Has Booted
EC2Launch v2 退出代码并重新启动
您可以使用 EC2Launch v2 定义脚本如何处理退出代码。默认情况下,脚本中运行的最后一个命令的退出代码将报告为整个脚本的退出代码。例如,如果脚本包含三个命令,而第一个命令失败,但以下命令成功,则运行状态将报告为 success
,因为最后一个命令成功。
如果您希望脚本重启实例,则必须在脚本中指定 exit
3010
,即使重启是脚本中的最后一步,也必须在脚本中指定。exit 3010
指示 EC2Launch v2 重新启动实例并再次调用脚本,直到它返回不是 3010
的退出代码,或者直到达到最大重启计数为止。EC2Launch v2 允许每个任务最多重启 5 次。如果您尝试使用其他机制(例如)从脚本重启实例 Restart-Computer
,则脚本运行状态将不一致。例如,它可能会陷入重启循环或不执行重启。
如果您使用的是与旧代理兼容的 XML 用户数据格式,则用户数据的运行时间可能会超过您预期的运行时间。有关更多信息,请参阅排查部分中的服务多次运行用户数据。
EC2Launch v2 和 Sysprep
EC2Launch v2 服务会运行 Sysprep,借助该 Microsoft 工具您可以创建可重复使用的自定义 Windows AMI。在 EC2Launch v2 调用 Sysprep 时,会使用 %ProgramData%\Amazon\EC2Launch
中的设置文件来确定要执行的操作。您可以使用 EC2Launch 设置对话框间接编辑这些文件,也可以直接使用 YAML 编辑器或文本编辑器直接编辑。然而,有些高级设置并未包含在 EC2Launch 设置 对话框中,因此您必须直接编辑这些条目。
如果您在更新某实例的设置之后从中创建了一个 AMI,则新设置会应用到所有从新 AMI 启动的实例。有关创建 AMI 的信息,请参阅创建自定义 Windows AMI。