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

EC2Launch v2 设置

本节包含有关如何配置 EC2Launch v2 的设置的信息。

使用 EC2Launch v2 设置对话框更改设置

以下过程介绍如何使用 EC2Launch v2 设置对话框来启用或禁用设置。

注意

如果您在 agent-config.yml 文件中适当配置了自定义任务,并尝试打开 Amazon EC2Launch settings(Amazon EC2Launch 设置)对话框,则会收到错误消息。有关示例架构,请参阅 示例:agent-config.yml

  1. 启动并连接到您的 Windows 实例。

  2. 从“开始”菜单,选择所有程序,然后导航到 EC2Launch 设置

    
							EC2 Launch Settings 应用程序。
  3. EC2Launch 设置 对话框的常规选项卡上,您可以启用或禁用以下设置。

    1. Set Computer Name(设置电脑名称)

      如果启用此设置(默认情况下禁用),则每次引导时会将当前主机名与所需主机名进行比较。如果主机名不匹配,则会重置主机名,然后系统可以选择重新启动以接受新的主机名。如果未指定自定义主机名,则该主机名会以十六进制格式的私有 IPv4 地址生成,例如:ip-AC1F4E6。若要防止修改现有主机名,请不要启用该设置。

    2. 扩展引导卷

      此设置可动态扩展 Disk 0/Volume 0 以包含所有未分区的空间。从具有自定义大小的根设备卷启动实例时,此设置非常有用。

    3. 设置管理员帐户

      启用后,您可以为在本地计算机上创建的管理员账户设置用户名和密码属性。如果未启用此功能,则在 Sysprep 之后,不会在系统上创建管理员账户。仅当 adminPasswordadminPasswordtype 时,在 Specify 中提供密码。

      密码类型定义如下:

      1. Random

        EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。

      2. Specify

        EC2Launch 使用您在 adminPassword 中指定的密码 如果密码不满足系统要求,EC2Launch 会生成随机密码。该密码以明文方式存储在 agent-config.yml 文件中,并且在 Sysprep 设置管理员密码时会被删除。EC2Launch 使用用户的密钥对密码进行加密。

      3. Do not set

        EC2Launch 使用您在 unattend.xml 文件中指定的密码。如果未在 unattend.xml 中指定密码,管理员账户会被禁用。

    4. 启动 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

    5. 优化 ENA

      在选中时,将配置 ENA 设置以确保针对 Amazon 优化了 ENA 接收端扩展和接收队列深度设置。有关更多信息,请参阅配置 RSS CPU 关联

    6. 启用 SSH

      此设置为更高版本的 Windows 启用 OpenSSH,以允许远程系统管理。

    7. 启用巨型帧

      选择此项可启用巨型帧。巨型帧可能会对您的网络通信造成意外的影响,因此在启用之前,请确保您了解巨型帧将如何影响系统。有关巨型帧的详细信息,请参阅巨型帧 (9001 MTU)

    8. 准备映像

      选择您希望在使用或不使用 Sysprep 的情况下关闭 EC2 实例。如果您希望将 Sysprep 与 EC2Launch v2 配合使用,请选择 Shutdown with Sysprep (使用 Sysprep 关闭)

  4. DNS 后缀选项卡上,您可以选择是否要添加 DNS 后缀列表,供在 EC2 中运行的服务器的 DNS 解析使用,而不提供完全限定的域名。DNS 后缀可以包含变量 $REGION$AZ。只有尚不存在的后缀才会添加到列表中。

    
							EC2 Launch Settings 应用程序。
  5. 墙纸选项卡上,您可以使用背景图像配置实例墙纸,并为要显示的墙纸指定实例详细信息。Amazon EC2 会在您每次登录时生成详细信息。

    您可以使用以下控件配置墙纸。

    • 在墙纸上显示实例详细信息 – 此复选框会启用或禁用在墙纸上显示实例详细信息。

    • 图像路径 (.jpg) – 指定用作墙纸背景的图像路径。

    • 选择要在墙纸上显示的属性 – 选中要在墙纸上显示的实例详细信息的复选框。清除之前选中的要从墙纸中删除的实例详细信息的复选框。

    • 在墙纸上显示实例标签 – 选择以下设置之一,以在墙纸上显示实例标签:

      • – 不在墙纸上显示任何实例标签。

      • 显示全部 – 在墙纸上显示所有实例标签。

      • 显示筛选部分 – 在墙纸上显示指定的实例标签。当您选择此设置时,您可以在实例标签筛选条件框中添加要在墙纸上显示的实例标签。

        注意

        必须启用元数据中的标签,才能在墙纸上显示标签。有关实例标签和元数据的更多信息,请参阅 使用实例元数据中的实例标签

    
							EC2 Launch Setting“墙纸”选项卡。
  6. 选项卡上,选择是否要初始化附加到实例的卷。启用时,可为任何附加卷设置驱动器盘符,并扩展它们以使用可用空间。如果选择全部,则初始化所有存储卷。如果选择设备,则只初始化列表中指定的设备。您必须为要初始化的每个设备进行输入。使用 EC2 控制台上列出的设备,例如,xvdb/dev/nvme0n1。下拉列表显示已附加到实例的存储卷。要输入未附加到实例的设备,请在文本字段中输入该设备。

    名称盘符分区是可选字段。如果没有为分区指定值,则使用 GPT 分区类型初始化大于 2 TB 的存储卷,使用 MBR 分区类型初始化小于 2 TB 的存储卷。如果配置了设备,并且非 NTFS 设备包含分区表,或者磁盘的前 4 KB 包含数据,则跳过磁盘并记录操作。

    
							EC2 Launch Settings 应用程序。

以下是根据在 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.jsonprevious-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 文件的输出格式:jsonyaml

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)。这是默认设置。

注意

当您的内联脚本发出 resetsysprep 命令时,它会立即运行并重置代理。当前任务完成,然后代理在不运行任何其他任务的情况下关闭。

例如,如果发出命令的任务之后会有 startSsm 任务(默认情况下在用户数据运行后包括在内),则该任务不会运行,Systems Manager 服务也不会启动。

已分离

EC2Launch v2 代理与其他任务同时运行脚本(detach: true)。

注意

当分离的脚本发出 resetsysprep 命令时,这些命令会等待代理完成后再运行。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.jsonprevious-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)。这是默认设置。

注意

当您的内联脚本发出 resetsysprep 命令时,它会立即运行并重置代理。当前任务完成,然后代理在不运行任何其他任务的情况下关闭。

例如,如果发出命令的任务之后会有 startSsm 任务(默认情况下在用户数据运行后包括在内),则该任务不会运行,Systems Manager 服务也不会启动。

已分离

EC2Launch v2 代理与其他任务同时运行脚本(detach: true)。

注意

当分离的脚本发出 resetsysprep 命令时,这些命令会等待代理完成后再运行。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-1tag-name-n]

(可选)要显示在墙纸上的实例标签名称的 JSON 数组(采用 Base64 编码)。您可以使用此标签或 --all-tags,但不能同时使用两者。

--attributes attribute-string-1attribute-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
  • 用户数据任务在代理配置文件中的 PostReady 阶段之前运行。

  • 在启动 Systems Manager Agent 之前运行用户数据(与 EC2Launch v1 和 EC2Config 的行为相同)。*

EC2Launch v2 版本 2.0.1245
1.0
  • 将弃用。

  • 用户数据任务在代理配置文件中的 PostReady 阶段之后运行。这不与 EC2Launch v1 向后兼容。

  • 受 Systems Manager Agent 启动和用户数据任务之间争用情况的影响。

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

使用可选参数并以指定的频率运行程序。

阶段:您可以在 PreReadyPostReadyUserData 阶段运行 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)。这是默认设置。

注意

当您的内联脚本发出 resetsysprep 命令时,它会立即运行并重置代理。当前任务完成,然后代理在不运行任何其他任务的情况下关闭。

例如,如果发出命令的任务之后会有 startSsm 任务(默认情况下在用户数据运行后包括在内),则该任务不会运行,Systems Manager 服务也不会启动。

已分离

EC2Launch v2 代理与其他任务同时运行脚本(detach: true)。

注意

当分离的脚本发出 resetsysprep 命令时,这些命令会等待代理完成后再运行。executeScript 之后的任务仍将运行。

阶段:您可以在 PreReadyPostReadyUserData 阶段运行 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 任务执行以下操作。

  • 将磁盘属性 offlinereadonly 设置为 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 输入参数中指定的值。

阶段:您可以在 PostReadyUserData 阶段运行 initializeVolume 任务。

频率:始终。

输入

您可将运行时系统参数配置如下:

设备(映射列表)

(如有条件)启动代理初始化的每个设备的配置。当 initialize 输入参数设置为 devices 时,则为必需。

  • 设备(字符串,必需)- 在创建实例期间标识设备。例如,xvdbxvdf\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:(字符串)用于设置密码的策略,可为 staticrandomdoNothing

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 任务未启用,但壁纸会在重新启动时重置

阶段:您可以在 PreReadyUserData 阶段配置墙纸。

频率:always

墙纸配置

您可以使用以下设置配置墙纸。

输入

您提供的输入参数以及可设置以配置墙纸的属性:

属性(字符串列表)

(可选)您可以向墙纸添加以下一项或多项属性:

  • architecture

  • availabilityZone

  • hostName

  • instanceId

  • instanceSize

  • memory

  • network

  • privateIpAddress

  • publicIpAddress

InstanceTags

(可选)您可以仅使用以下选项之一进行此设置。

  • AllTags(字符串)– 将所有实例标签添加到墙纸。

    instanceTags: AllTags
  • InstanceTags(字符串列表)– 指定要添加到墙纸的实例标签名称列表。例如:

    instanceTags: - Tag 1 - Tag 2
路径(字符串)

(必需)用于墙纸图像的本地 .jpg 格式图像文件的文件名路径。

示例

以下示例显示墙纸配置输入(可设置墙纸背景图像文件路径)、名为 Tag 1Tag 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:(字符串)oncealways 之一

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