EC2Launch v2 设置 - Amazon Elastic Compute Cloud

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. DoNothing

        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。有关更多信息,请参阅 AWS Systems Manager 用户指南中的使用 Run Command 更新 SSM Agent

    5. 优化 ENA

      在选中时,将配置 ENA 设置以确保针对 AWS 优化了 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. 壁纸选项卡上,您可以允许在壁纸上显示选定实例详细信息。您还可以选择自定义图像。详细信息将在您每次登录时生成。清除该复选框可从壁纸中删除实例详细信息。

    
                            EC2 Launch Settings 应用程序
  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 = ec2launch get-agent-config --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 的帮助

重置

删除 .run-once 文件,使得指定为运行一次的任务将在下次执行时运行;可选择删除服务和 sysprep 日志。

示例

ec2launch reset -c

用量

ec2launch reset [flags]

Flags

-b, --block

阻止 reset 命令,直到服务停止。如果重置命令使用 --block 标志作为 executeScript 任务的一部分运行,detach 参数必须设置为 true(真)。有关更多信息以及示例,请参阅 executeScript 下的示例 4。

-c, --clean

reset前清除实例日志

-h, --help

reset 的帮助

run

运行 EC2Launch v2。

示例

ec2launch run

用量

ec2launch run [flags]

Flags

-h, --help

run 的帮助

status

获取 EC2Launch 服务的状态。可选择在服务完成之前阻止该过程。进程退出代码决定了服务状态:

  • 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

重置服务状态、更新 unattend.xml、禁用 RDP 并运行 Sysprep。

示例:

ec2launch sysprep

用量

ec2launch sysprep [flags]

Flags

-b,--block

阻止 sysprep 命令,直到服务停止。如果重置命令使用 --block 标志作为 executeScript 任务的一部分运行,detach 参数必须设置为 true(真)。有关更多信息以及示例,请参阅 executeScript 下的示例 4。

-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 的帮助

version

获取可执行版本。

示例

ec2launch version

用量

ec2launch version [flags]

Flags

-h, --help

version 的帮助

wallpaper

将新壁纸设置为提供的壁纸路径(.jpg 文件),并显示选定的实例详细信息。

示例

ec2launch wallpaper ^ --path="C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg" ^ --attributes=hostName,instanceId,privateIpAddress,publicIpAddress,instanceSize,availabilityZone,architecture,memory,network

用量

ec2launch wallpaper [flags]

Flags

--attributes strings

wallpaper 属性

-h, --help

wallpaper 的帮助

-p, --path string

wallpaper 文件路径

EC2Launch v2 任务配置

本节包括 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: ... ... ...

架构:用户数据

用户数据的结构如下所示。tasks 列表的解析和执行与 agent-config.yml 文件中的 tasks 列表的解析与执行方式相同。不能重复任务。有关任务属性,请参阅随后的任务说明。

JSON

{ "version": "1.0", "tasks": [ { "task": "string", "inputs": { ... }, }, ... ] }

YAML

version: 1.0 tasks: - task: string inputs: ... ...

activateWindows

针对一组 AWS KMS 服务器激活 Windows。

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

使用可选参数和指定的频率执行程序。

Frequency – 请参阅 Inputs

AllowedStages[PostReady, UserData]

输入

frequency:(字符串)oncealways 之一

path:(字符串)可执行文件的路径

arguments:(字符串列表)要传递给可执行文件的字符串参数列表

runAs:(字符串)必须设置为 localSystem

示例

以下示例说明如何运行已在实例上的可执行文件。

task: executeProgram inputs: - frequency: always path: C:\Users\Administrator\Desktop\setup.exe arguments: [‘—quiet']

示例 2

以下示例说明如何运行已在实例上的可执行文件。此配置将安装实例的 .exe 驱动器上存在的 VLC C: 文件。/L=1033/S 是随 VLC .exe 文件作为字符串列表传递的 VLC 参数。

task: executeProgram inputs: - frequency: always path: C:\vlc-3.0.11-win64.exe arguments: ['/L=1033','/S'] runAs: localSystem

executeScript

使用可选参数和指定的频率运行脚本。

Frequency – 请参阅 Inputs

AllowedStages[PostReady, UserData]

输入

frequency:(字符串)oncealways 之一

type:(字符串)batchpowershell 之一

arguments:(字符串列表)要传递给 shell 的字符串参数的列表。将 type 设置为 batch 时,不支持该参数。

content:(字符串)脚本的内容

runAs:(字符串)adminlocalSystem 之一

detach:(布尔值)原定设置值为 false。如果脚本应在分离模式下运行则设置为 true,EC2Launch 将与其他任务一起并发执行该脚本。如果将 detach 设置为 true,则脚本退出代码(包括 3010)不产生作用。

示例

task: executeScript inputs: - frequency: always type: powershell content: | Get-Process | Out-File -FilePath .\Process.txt runAs: localSystem - frequency: always type: batch content: | systeminfo

示例 2

以下示例说明如何在 EC2 实例上运行 PowerShell 脚本。此配置在 C: 驱动器中创建一个文本文件。

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"

示例 3

以下示例显示了一个多次重启实例的幂等脚本。

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 }

示例 4

您可以将 EC2Launch v2 CLI 命令作为脚本的一部分运行。resetsysprep 命令必须包含 --block 标志,因为它们依赖于代理先行完成。在使用 --block 标志时,此任务的 detach 参数必须设置为 true(真)。当您在非分离脚本中使用 --block 标志时,会出现死锁的结果。这些命令会检测因错误导致的潜在死锁和退出。以下示例显示了一个脚本,该脚本会在代理完成运行后重置代理状态。

task: executeScript inputs: - frequency: always type: powershell runAs: localSystem detach: true content: |- & 'C:\Program Files\Amazon\EC2Launch\ec2launch.exe' reset -c -b

extendRootPartition

扩展根卷以使用磁盘上的所有可用空间。

Frequency – 一次

AllowedStages[Boot]

Inputs – 无

示例

task: extendRootParitition

initializeVolume

初始化附加到实例的卷,以激活和分区这些卷。不初始化任何检测到不为空的卷。如果卷的前 4 KiB 为空,或者卷没有 Windows 可识别的驱动器布局,则该卷被视为空。无论驱动器是否已初始化,在此任务运行时都会始终应用卷 letter 字段。

Frequency – 始终

AllowedStages[PostReady, UserData]

输入

initialize:(字符串)要使用的初始化策略类型;alldevices 之一

devices:(映射列表)

device:创建实例时使用的设备标识符;示例包括 xvdbxvdf/dev/nvme0n1

name:(字符串)要分配的驱动器名称

letter:(字符串)要分配的驱动器盘符

partition:(字符串)要使用的分区类型;mbr 或 gpt 之一

示例 1

以下示例显示设置要初始化的选定卷的 InitializeVolume 任务的输入。

task: initializeVolume inputs: initialize: devices devices: - device: xvdb name: MyVolumeOne letter: D partition: mbr - device: /dev/nvme0n1 name: MyVolumeTwo letter: E partition: gpt

示例 2

以下示例说明如何初始化连接到实例的 EBS 卷。此配置将初始化连接到实例的所有空的 EBS 卷。如果卷不为空,则不会初始化。

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 后缀添加到搜索后缀列表中。只有尚不存在的后缀才会添加到列表中。

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

Frequency – 始终

AllowedStages[PreReady, UserData]

输入

path:(字符串)用作壁纸图像的本地 .jpg 文件的路径

attributes:(字符串列表)要添加到壁纸的属性列表;hostNameinstanceIdprivateIpAddresspublicIpAddressinstanceSizeavailabilityZonearchitecturememory、或 network

示例

task: setWallpaper inputs: path: C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg attributes: - hostName - instanceId - privateIpAddress - publicIpAddress

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

示例: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

示例:用户数据

有关用户数据的更多信息,请参阅 启动时在 Windows 实例上运行命令

以下示例显示了用户数据的设置。

version: 1.0 tasks: - task: executeScript inputs: - frequency: always type: powershell runAs: localSystem content: |- New-Item -Path 'C:\PowerShellTest.txt' -ItemType File

以下格式与此服务的早期版本兼容。它作为 UserData 阶段中的 executeScript 任务运行。为了模仿之前版本的行为,它将被设置为作为分离的进程运行。

<powershell> $file = $env:SystemRoot + "\Temp" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

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