

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 工作流程文档支持的步骤操作
<a name="wfdoc-step-actions"></a>

本节详细介绍了 Image Builder 支持的步骤操作。本节中使用的术语

AMI  
亚马逊机器映像

进行筛选  
Amazon 资源名称

下表显示了哪些工作流阶段支持每个步骤操作。复选标记 (X) 表示您可以在该阶段使用步骤操作。Image Builder `ExecuteComponents` 将一些操作限制在特定阶段：构建和测试阶段、测试阶段`DistributeImage``ModifyImageAttributes`、`ApplyImageConfigurations`、和`DistributeContainerImage`分发阶段。`CollectImageScanFindings`你可以在任何阶段使用所有其他动作。


| 分步操作 | 构建 | 测试 | 分配 | 注意 | 
| --- | --- | --- | --- | --- | 
| LaunchInstance | X | X | X | 启动亚马逊 EC2 实例。 | 
| BootstrapInstanceForContainer | X | X | X | 安装 Docker 和 AWS CLI 用于容器构建的。 | 
| ExecuteComponents | X | X |  | 在实例上运行组件。仅限于构建和测试阶段。 | 
| CollectImageMetadata | X | X | X | 仅限 AMI 构建。 | 
| RunSysPrep | X | X | X | Windows 构建。 | 
| SanitizeInstance | X | X | X | Linux AMI 构建；不适用于容器。 | 
| CreateImage | X | X | X | 从构建实例创建 AMI。 | 
| CreateImageFromIso | X | X | X | 从 ISO 磁盘映像创建 AMI。 | 
| RegisterImage | X | X | X | 通过快照注册 AMI。 | 
| DistributeContainerImage |  |  | X | 分发容器镜像。仅限于分发阶段。 | 
| CollectImageScanFindings |  | X |  | 收集图像扫描结果。仅限于测试阶段。需要亚马逊检查员和图像扫描。 | 
| RunCommand | X | X | X | 运行 AWS Systems Manager （系统管理器）命令文档。 | 
| WaitForSSMAgent | X | X | X | 重新启动后等待系统管理器连接。 | 
| WaitForAction | X | X | X | 暂停执行外部操作。 | 
| ExecuteStateMachine | X | X | X | 运行 Step Functions 状态机。 | 
| TerminateInstance | X | X | X | 终止实例。例如，容器分发工作流程在推送映像后终止构建实例。 | 
| DistributeImage |  |  | X | 将 AMI 复制到区域和账户。仅限于分发阶段。 | 
| ModifyImageAttributes |  |  | X | 修改 AMI 启动权限。仅限于分发阶段。 | 
| ApplyImageConfigurations |  |  | X | 应用启动模板、许可证、导出、快速启动和系统管理器参数。仅限于分发阶段。 | 

**重要**  
单个工作流程分发 AMI 或容器映像，而不是同时分发。如果工作流包含`DistributeContainerImage`，则不能同时包含`DistributeImage``ModifyImageAttributes`、或`ApplyImageConfigurations`。这些 AMI 分发操作在 Amazon EC2 AMI 上`DistributeContainerImage`运行，而在亚马逊弹性容器注册表 (Amazon ECR) 中的容器映像上运行。

**Topics**
+ [ApplyImageConfigurations](#wfdoc-step-action-apply-image-configurations)
+ [BootstrapInstanceForContainer](#wfdoc-step-action-bootstrap-container)
+ [CollectImageMetadata](#wfdoc-step-action-collect-image-metadata)
+ [CollectImageScanFindings](#wfdoc-step-action-collect-findings)
+ [CreateImage](#wfdoc-step-action-create-img-from-inst)
+ [CreateImageFromIso](#wfdoc-step-action-create-image-from-iso)
+ [DistributeContainerImage](#wfdoc-step-action-distribute-container)
+ [DistributeImage](#wfdoc-step-action-distribute-image)
+ [ExecuteComponents](#wfdoc-step-action-exec-components)
+ [ExecuteStateMachine](#wfdoc-step-action-exec-state-machine)
+ [LaunchInstance](#wfdoc-step-action-launch-instance)
+ [ModifyImageAttributes](#wfdoc-step-action-modify-image-attributes)
+ [RegisterImage](#wfdoc-step-action-register-image)
+ [RunCommand](#wfdoc-step-action-run-command)
+ [RunSysPrep](#wfdoc-step-action-run-sysprep)
+ [SanitizeInstance](#wfdoc-step-action-sanitize-instance)
+ [TerminateInstance](#wfdoc-step-action-terminate-instance)
+ [WaitForAction](#wfdoc-step-action-waitfor)
+ [WaitForSSMAgent](#wfdoc-step-action-wait-for-ssm-agent)

## ApplyImageConfigurations
<a name="wfdoc-step-action-apply-image-configurations"></a>

使用此步骤操作将各种配置和集成应用到分布式 AMI，例如许可证配置、启动模板配置、S3 导出配置、EC2 快速启动配置和 Systems Manager 参数配置。配置仅适用于源账户中的分布式映像，可以跨账户应用的 SSM 参数配置除外。

**注意**  
`configurations`输入是可选的。如果您提供，Image Builder 将使用您的工作流程输入并忽略附加的分发配置。如果省略它，Image Builder 将退回到连接到管道或映像的分发配置。

**默认超时：**360 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。`distributedImages.$`输入为必填项。其余行描述`configurations`数组中每个项目中的字段。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| 分布式图片。$ | 要配置的分布式映像列表。参考同一工作流程中某个DistributeImage步骤的distributedImages输出。 | 字符串 | 是 |  | 以以下开头的 JsonPath 参考文档 $.stepOutputs. | 
| 配置 | 适用于分布式 AMI 的配置，如列表所示。每件物品都以一个 AWS 区域为目标。 | 数组 | 否 |  |  | 
| 配置:区域 | 要配置的分布式 AMI 的 AWS 区域。 | 字符串 | 是 |  | 中的每件商品均为必填项configurations。 | 
| 配置:许可证 ConfigurationArns | 映像的许可证配置 ARN。 | 数组 | 否 |  |  | 
| 配置:启动 TemplateConfigurations | 适用于分布式 AMI 的启动模板配置。 | 数组 | 否 |  |  | 
| 配置:启动 TemplateConfigurations:launchTemplateId | 应用于映像的启动模板 ID。 | 字符串 | 如果launchTemplateConfigurations已指定，则为 |  |  | 
| 配置:启动 TemplateConfigurations:accountId | 要应用于映像的启动模板账户 ID。 | 字符串 | 否 |  |  | 
| 配置:启动 TemplateConfigurations:setDefaultVersion | 映像的启动模板默认版本设置。 | 布尔值 | 否 |  |  | 
| 配置:s3 ExportConfiguration | 分布式 AMI 的 Amazon S3 导出配置。 | 数组 | 否 |  |  | 
| 配置:s3 ExportConfiguration:roleName | 映像的 Amazon S3 导出配置角色名称。 | 字符串 | 如果s3ExportConfiguration已指定，则为 |  |  | 
| 配置:s3 ExportConfiguration:diskImageFormat | 映像的 Amazon S3 导出配置磁盘映像格式。 | 字符串 | 如果s3ExportConfiguration已指定，则为 |  | 允许的值-VMDK\|RAW\|VHD | 
| 配置:s3 ExportConfiguration:s3Bucket | 映像的 Amazon S3 导出配置存储桶名称。 | 字符串 | 如果s3ExportConfiguration已指定，则为 |  |  | 
| 配置:s3 ExportConfiguration:s3Prefix | 映像的 Amazon S3 导出配置存储桶前缀。 | 字符串 | 否 |  |  | 
| 配置:快速 LaunchConfigurations | 镜像的亚马逊 EC2 快速启动配置。 | 数组 | 否 |  |  | 
| 配置:快速 LaunchConfigurations:enabled | 是否为映像启用 Amazon EC2 快速启动。 | 布尔值 | 如果fastLaunchConfigurations已指定，则为 |  |  | 
| 配置:快速 LaunchConfigurations:snapshotConfiguration | 用于预配置 Amazon EC2 快速启动快照的快照配置。 | Map | 否 |  |  | 
| 配置:快速 LaunchConfigurations:snapshotConfiguration:targetResourceCount | 该映像的 Amazon EC2 快速启动目标资源数。 | 整数 | 否 |  |  | 
| 配置:快速 LaunchConfigurations:maxParallelLaunches | 亚马逊 EC2 快速启动映像的最大并行启动次数。 | 整数 | 否 |  |  | 
| 配置:快速 LaunchConfigurations:launchTemplate | Amazon EC2 快速启动用于准备预置快照的启动模板。 | Map | 否 |  |  | 
| 配置:快速 LaunchConfigurations:launchTemplate:launchTemplateId | 镜像的亚马逊 EC2 快速启动启动模板 ID。 | 字符串 | 否 |  |  | 
| 配置:快速 LaunchConfigurations:launchTemplate:launchTemplateName | 镜像的亚马逊 EC2 快速启动启动模板名称。 | 字符串 | 否 |  |  | 
| 配置:快速 LaunchConfigurations:launchTemplate:launchTemplateVersion | 该映像的亚马逊 EC2 快速启动启动模板版本。 | 字符串 | 否 |  |  | 
| 配置:ssm ParameterConfigurations | 映像的系统管理器参数配置。 | Map | 否 |  |  | 
| 配置:ssm ParameterConfigurations:amiAccountId | 映像的系统管理器参数 AMI 账户 ID。 | 字符串 | 否 |  |  | 
| 配置:ssm ParameterConfigurations:parameterName | 映像的系统管理器参数名称。 | 字符串 | 如果ssmParameterConfigurations已指定，则为 |  |  | 
| 配置:ssm ParameterConfigurations:dataType | 映像的系统管理器参数数据类型。 | 字符串 | 否 |  | 允许的值-文本\|aws: ec2: image) | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 配置的图像 | 已配置映像的列表。 | 数组 | 
| 已配置 Images:accountId | 分布式映像的目标账户 ID。 | 字符串 | 
| 已配置 Images:name | AMI 的名称。 | 字符串 | 
| 已配置 Images:amiId | 分布式映像的 AMI ID。 | 字符串 | 
| 已配置 Images:dateStarted | 分发开始时的 UTC 时间。 | 字符串 | 
| 已配置 Images:dateStopped | 分发完成时的 UTC 时间。 | 字符串 | 
| 已配置 Images:step | 停止分发的步骤。 | 已完成\| \| AssociateLicensesRunning \| UpdateLaunchTemplateRunning \| PutSsmParametersRunning \| UpdateFastLaunchConfiguration ExportAmiQueued ExportAmiRunning | 
| 已配置 Images:region | 分布式图像的 AWS 区域。 | 字符串 | 
| 已配置 Images:status | 分发状态。 | 已完成\|失败\|取消\| TimedOut | 
| 已配置 Images:errorMessage  | 错误消息（如果有）。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{ApplyImageConfigurations}}
  action: ApplyImageConfigurations
  onFailure: Abort
  inputs:
    distributedImages.$: $.stepOutputs.{{DistributeImageStep}}.distributedImages
    configurations:
      - region: {{us-west-2}}
        licenseConfigurationArns:
          - arn:aws:license-manager:{{us-west-2}}:{{111122223333}}:license-configuration:{{lic-example}}
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{ApplyImageConfigurationsStep}}.configuredImages
```

## BootstrapInstanceForContainer
<a name="wfdoc-step-action-bootstrap-container"></a>

此步骤操作运行服务脚本来引导实例，以最低要求运行容器工作流。Image Builder 使用 Systems Manager API 中的 **sendCommand** 来运行此脚本。有关更多信息，请参阅 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html)。

**注意**  
引导脚本安装 AWS CLI 和 Docker 软件包，这两个包是映像生成器成功构建 Docker 容器的先决条件。如果未包含此步骤操作，映像构建可能会失败。

**默认超时：**60 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 要引导的实例 ID。 | 字符串 | 是 |  | 这必须是启动此工作流实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 跑 CommandId | 在实例上运行引导脚本的 Systems Manager sendCommand 的 ID。 | 字符串 | 
| status | 从 Systems Manager sendCommand 返回的状态。 | 字符串 | 
| output | 从 Systems Manager sendCommand 返回的输出。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{ContainerBootstrapStep}}
  action: BootstrapInstanceForContainer
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{ContainerBootstrapStep}}.status
```

## CollectImageMetadata
<a name="wfdoc-step-action-collect-image-metadata"></a>

此步骤操作仅对构建工作流有效。

EC2 Image Builder 在其启动的 EC2 实例上运行 [AWS Systems Manager （Systems Manager）代理](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)，以构建和测试映像。Image Builder 使用 [Systems Manager 清单](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-inventory.html)，以收集在构建阶段使用的实例的其他信息。该信息包括操作系统 (OS) 名称和版本，以及操作系统报告的软件包及其相应版本的列表。

**注意**  
此步骤操作仅适用于创建 AMI 的映像。

**默认超时：**30 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**Image Builder 会回滚在此步骤中创建的所有 Systems Manager 资源。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 应用元数据设置的构建实例。 | 字符串 | 是 |  | 这必须是启动此工作流构建实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| osVersion | 从构建实例收集的操作系统名称和版本。 | 字符串 | 
| associationId | 用于清单收集的 Systems Manager 关联 ID。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{CollectMetadataStep}}
  action: CollectImageMetadata
  onFailure: Abort
  inputs:
      instanceId: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作的输出。

```
$.stepOutputs.{{CollectMetadataStep}}.osVersion
```

## CollectImageScanFindings
<a name="wfdoc-step-action-collect-findings"></a>

如果您的账户启用了 Amazon Inspector，并且您的管道启用了映像扫描，则此步骤操作会收集 Amazon Inspector 为您的测试实例报告的映像扫描调查发现。此步骤操作不适用于构建工作流。

**默认超时：**120 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 在其上运行扫描的实例的 ID。 | 字符串 | 是 |  | 这必须是启动此工作流实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 跑 CommandId | 运行脚本以收集调查发现的 Systems Manager sendCommand 的 ID。 | 字符串 | 
| status | 从 Systems Manager sendCommand 返回的状态。 | 字符串 | 
| output | 从 Systems Manager sendCommand 返回的输出。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{CollectFindingsStep}}
  action: CollectImageScanFindings
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{CollectFindingsStep}}.status
```

## CreateImage
<a name="wfdoc-step-action-create-img-from-inst"></a>

此步骤操作使用 Amazon EC2 `CreateImage` API 从正在运行的实例创建映像。在创建过程中，步骤操作会根据需要进行等待，以验证资源是否已达到正确的状态，然后再继续后续操作。

**默认超时：**720 分钟

**最大超时时间：**3 天（259,200 秒）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 要从中创建新映像的实例。 | 字符串 | 是 |  | 此步骤开始时，提供实例 ID 的实例必须处于 running 状态。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| imageId | 所创建映像的 AMI ID。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{CreateImageFromInstance}}
  action: CreateImage
  onFailure: Abort
  inputs:
      instanceId.$: "i-1234567890abcdef0"
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{CreateImageFromInstance}}.imageId
```

## CreateImageFromIso
<a name="wfdoc-step-action-create-image-from-iso"></a>

使用此步骤操作从构建实例上的 ISO 磁盘映像创建亚马逊系统映像 (AMI)。当您的源是 ISO 文件而不是基本 AMI 时，请在构建工作流程中使用它。映像生成器将 ISO 转换为 AMI，并等待资源达到所需状态后才能继续。

**注意**  
此操作与导入 ISO 磁盘映像的要求相同。有关更多信息，请参阅 [使用 Image Builder 导入经过验证的 Windows ISO 磁盘映像](import-iso-disk.md)。

**默认超时：**720 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 保存 ISO 磁盘映像的构建实例的 ID。 | 字符串 | 是 |  | 这必须是启动此工作流构建实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| amiName | 该步骤创建的 AMI 的名称。 | 字符串 | 
| 快照ID | 支持 AMI 的快照的 ID。 | 字符串 | 
| 架构 | AMI 的架构（x86\_64或arm64）。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{CreateImageFromIsoStep}}
  action: CreateImageFromIso
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{CreateImageFromIsoStep}}.amiName
```

## DistributeContainerImage
<a name="wfdoc-step-action-distribute-container"></a>

使用此步骤操作将构建阶段创建的容器映像分发到为该映像定义的目标区域中的 Amazon ECR 存储库。在容器 (`DOCKER`) 图像的分发工作流程中使用此操作。它可以用作容器映像的对应物。`DistributeImage`

此步骤操作在构建实例上运行 Systems Manager 命令以推送容器镜像。该实例必须 AWS CLI 安装了 Docker 和。有关更多信息，请参阅 [BootstrapInstanceForContainer](#wfdoc-step-action-bootstrap-container)。

**重要**  
包含、或的工作流程`DistributeContainerImage`不能同时包括`DistributeImage``ModifyImageAttributes`、或`ApplyImageConfigurations`。单个工作流程要么分发容器映像，要么分发 AMI，不能同时分发两者。

**默认超时：**120 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 保存容器镜像的构建实例的 ID。 | 字符串 | 是 |  | 这必须是启动此工作流构建实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| status | 从 Systems Manager sendCommand 返回的状态。 | 字符串 | 
| 成功的地区 | 成功分发的地区。 | 数组 | 
| 失败的区域 | 分发失败的区域。 | 数组 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{DistributeContainer}}
  action: DistributeContainerImage
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{DistributeContainer}}.status
```

## DistributeImage
<a name="wfdoc-step-action-distribute-image"></a>

此步骤操作将 AMI 分发到您指定的目标区域和账户。它使用您的`CreateImage`或`CreateImagePipeline`请求中的分发配置，或工作流程中替代默认配置的自定义分发设置。

**注意**  
`distributions`输入是可选的。如果您提供，Image Builder 将使用您的工作流程输入并忽略附加的分发配置。如果省略它，Image Builder 将退回到连接到管道或映像的分发配置。

**默认超时：**360 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| 分配 | AMI 的分发设置，以列表形式列出。每件物品都以一个 AWS 区域为目标。如果您省略此输入，Image Builder 将使用附加到管道或映像的分发配置。 | 数组 | 否 |  |  | 
| 分布:区域 | 分发 AMI 的目标 AWS 区域。 | 字符串 | 是 |  | 最小长度为 1。最大长度为 1024。 | 
| 发行版:名称 | 适用于分布式 AMI 的名称。 | 字符串 | 否 |  |  | 
| 发行版:描述 | 适用于分布式 AMI 的描述。 | 字符串 | 否 |  |  | 
| 分布:目标 AccountIds | 向其分发 AMI 的账户 ID。 | 数组 | 否 |  |  | 
| 发行版:amiTags | 应用于分布式 AMI 的标签。 | Map | 否 |  | 最多 50 个标签。 | 
| 发行版:kms KeyId | 用于加密分布式 AMI 的 KMS 密钥。 | 字符串 | 否 |  |  | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 分布式图像 | 分布式图像列表 | 数组 | 
| 分布式 Images:region | 分布式图像的 AWS 区域。 | 字符串 | 
| 分布式 Images:name | AMI 的名称。 | 字符串 | 
| 分布式 Images:amiId | 分布式映像的 AMI ID。 | 字符串 | 
| 分布式 Images:accountId | 分布式映像的目标账户 ID。 | 字符串 | 
| 分布式 Images:dateStarted | 分发开始时的 UTC 时间。 | 字符串 | 
| 分布式 Images:dateStopped | 分发完成时的 UTC 时间。 | 字符串 | 
| 分布式 Images:status | 分发状态。 | 已完成\|失败\|取消\| TimedOut | 
| 分布式 Images:step | 停止分发的步骤。 | 已完成\| CopyAmiRunning | 
| 分布式 Images:errorMessage  | 错误消息（如果有）。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{DistributeImage}}
  action: DistributeImage
  onFailure: Abort
  inputs:
    distributions:
      - region.$: "$.parameters.{{SourceRegion}}"
        description: "{{AMI distribution to source region}}"
        amiTags:
          DistributionTest: "{{SourceRegion}}"
          WorkflowStep: "{{DistributeToSourceRegion}}"
          BuildDate: "{{imagebuilder:buildDate:yyyyMMHHss}}"
          BuildVersion: "{{imagebuilder:buildVersion}}"
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{DistributeImageStep}}.distributedImages
```

## ExecuteComponents
<a name="wfdoc-step-action-exec-components"></a>

此步骤操作会运行配方中为当前正在构建的映像指定的组件。构建工作流在构建实例上运行构建组件。测试工作流仅在测试实例上运行测试组件。

Image Builder 使用 Systems Manager API 中的 **sendCommand** 来运行组件。有关更多信息，请参阅 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html)。

**默认超时：**720 分钟

**最大超时时间：**1 天（24 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 组件应在其上运行的实例的 ID。 | 字符串 | 是 |  | 这必须是启动此工作流实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 跑 CommandId | 在实例上运行组件的 Systems Manager sendCommand 的 ID。 | 字符串 | 
| status | 从 Systems Manager sendCommand 返回的状态。 | 字符串 | 
| output | 从 Systems Manager sendCommand 返回的输出。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{ExecComponentsStep}}
  action: ExecuteComponents
  onFailure: Abort
  inputs:
      instanceId: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作的输出。

```
$.stepOutputs.{{ExecComponentsStep}}.status
```

## ExecuteStateMachine
<a name="wfdoc-step-action-exec-state-machine"></a>

此步骤操作从映像生成器工作流程开始执行 AWS Step Functions 状态机。映像生成器使用步进函数 `StartExecution` API 来启动状态机并等待其完成。这对于将复杂的工作流程、合规性验证或认证流程集成到您的映像构建管道中非常有用。

有关更多信息，请参阅《*AWS Step Functions 开发者指南》中的 “步进函数” [ 中的 “](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)了解状态机” *。

**默认超时：**6 小时

**最大超时时间：**24 小时

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| 州 MachineArn | 要执行的步进函数状态机的 ARN。 | 字符串 | 是 |  | 必须是有效的状态机 ARN。 | 
| input | 提供给状态机的 JSON 输入数据。 | 字符串 | 否 | {} | 必须是有效的 JSON 字符串，最大长度：16 KiB。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 执行 Arn | 状态机执行的 ARN。 | 字符串 | 
| output | 状态机执行的输出。 | 字符串 | 

**需要 IAM 权限 **

您的自定义执行角色必须具有以下权限才能使用此步骤操作：

**允许操作**
+ `states:StartExecution`
+ `states:DescribeExecution`

**指定资源**
+ `arn:aws:states:{{us-west-2}}:{{111122223333}}:stateMachine:{{state-machine-name}}`
+ `arn:aws:states:{{us-west-2}}:{{111122223333}}:execution:{{state-machine-name}}:*`

**示例**

在工作流文档中指定步骤操作。

```
- name: {{ValidateImageCompliance}}
  action: ExecuteStateMachine
  timeoutSeconds: 3600
  onFailure: Abort
  inputs:
    stateMachineArn: arn:aws:states:{{us-west-2}}:{{111122223333}}:stateMachine:{{ImageComplianceValidation}}
    input: |
      {
        "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}",
        "region": "us-west-2",
        "complianceLevel": "high",
        "requiredScans": ["cve", "benchmark", "configuration"]
      }
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{ValidateImageCompliance}}.executionArn
```

## LaunchInstance
<a name="wfdoc-step-action-launch-instance"></a>

使用此步骤操作可在您的中启动实例 AWS 账户。该操作将等到实例满足指定的运行状况检查条件并且 Systems Manager 代理运行后再继续下一步。启动操作使用您的配方和基础架构配置资源中的设置。例如，要启动的实例类型来自基础设施配置。输出是启动的实例的实例 ID。

`waitFor` 输入会配置满足步骤完成要求的条件。`healthCheck`输入指定了在步骤继续之前必须通过的 EC2 实例运行状况验证级别。

**默认超时：**75 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**对于构建实例，回滚执行您在基础设施配置资源中配置的操作。默认情况下，如果映像创建失败，则会终止构建实例。但是，基础设施配置中有一个设置，用于保留构建实例以进行故障排除。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| 图片 IdOverride | 用于启动实例的图像 | 字符串 | 否 | 构建阶段：图像配方基础镜像<br />测试阶段：从构建阶段输出 AMI | 必须是有效的 AMI ID | 
| 实例 TypesOverride | Image Builder 会尝试列表中的每种实例类型，直到找到成功启动的实例类型 | 字符串列表 | 否 | 基础设施配置中指定的实例类型 | 必须是有效的实例类型 | 
| waitFor | 在完成工作流程步骤并继续下一步之前要等待的条件 | 字符串 | 是 | 无 | Image Builder 支持 ssmAgent。 | 
| 健康检查 | 工作流程步骤继续之前所需的 EC2 运行状况验证级别。指定RUNNING以最少的验证实现更快的构建，或者STATUS\_CHECK\_PASSED等待 EC2 状态检查通过。 | 字符串 | 否 | STATUS\_CHECK\_PASSED | 有效值：RUNNING \| STATUS\_CHECK\_PASSED。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| instanceId | 所启动实例的实例 ID。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{LaunchStep}}
  action: LaunchInstance
  onFailure: Abort
  inputs:
    healthCheck: "{{RUNNING}}"
    waitFor: ssmAgent
```

在工作流文档中使用步骤操作的输出。

```
$.stepOutputs.{{LaunchStep}}.instanceId
```

## ModifyImageAttributes
<a name="wfdoc-step-action-modify-image-attributes"></a>

使用此步骤操作修改分布式 AMI 的属性，例如启动权限和其他 AMI 属性。它在已分发到目标地区和账户的 AMI 上运行。

**注意**  
`attributes`输入是可选的。如果您提供，Image Builder 将使用您的工作流程输入并忽略附加的分发配置。如果省略它，Image Builder 将退回到连接到管道或映像的分发配置。

**默认超时：**120 分钟

**最大超时时间：**180 分钟（3 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| 分布式图片。$ | 要修改的分布式图像列表。参考同一工作流程中某个DistributeImage步骤的distributedImages输出。 | 字符串 | 是 |  | 以以下开头的 JsonPath 参考文档 $.stepOutputs. | 
| 属性 | 要修改的图像属性，以列表形式列出。每件物品都以一个 AWS 区域为目标。 | 数组 | 否 |  |  | 
| 属性:区域 | 要修改的分布式 AMI 的 AWS 区域。 | 字符串 | 是 |  | 中的每件商品均为必填项attributes。 | 
| 属性：启动权限 | 适用于分布式 AMI 的启动权限设置。 | Map | 否 |  |  | 
| 属性:启动 Permission:userIds | 要在 AMI 启动权限中添加或删除的账户 ID。 | 数组 | 否 |  |  | 
| 属性:启动 Permission:userGroups | 要在 AMI 启动权限中添加或删除的用户组。 | 数组 | 否 |  |  | 
| 属性:启动 Permission:organizationArns | 要在 AMI 启动权限中添加或删除的 AWS 组织 ARN。 | 数组 | 否 |  |  | 
| 属性:启动 Permission:organizationalUnitArns | 要在 AMI 启动权限中添加或删除的组织单位 (OU) ARN。 | 数组 | 否 |  |  | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 修改后的图片 | 修改后的图像列表 | 数组 | 
| 已修改 Images:accountId | 分布式映像的目标账户 ID。 | 字符串 | 
| 已修改 Images:name | AMI 的名称。 | 字符串 | 
| 已修改 Images:amiId | 分布式映像的 AMI ID。 | 字符串 | 
| 已修改 Images:dateStarted | 分发开始时的 UTC 时间。 | 字符串 | 
| 已修改 Images:dateStopped | 分发完成时的 UTC 时间。 | 字符串 | 
| 已修改 Images:step | 停止分发的步骤。 | 已完成\| ModifyAmiRunning | 
| 已修改 Images:region | 图像的 AWS 区域。 | 字符串 | 
| 已修改 Images:status | 分发状态。 | 已完成\|失败\|取消\| TimedOut | 
| 已修改 Images:errorMessage  | 错误消息（如果有）。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{ModifyImageAttributes}}
  action: ModifyImageAttributes
  onFailure: Abort
  inputs:
    distributedImages.$: $.stepOutputs.{{DistributeImageStep}}.distributedImages
    attributes:
      - region: {{us-west-2}}
        launchPermission:
          userIds:
            - "{{111122223333}}"
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{ModifyImageAttributesStep}}.modifiedImages
```

## RegisterImage
<a name="wfdoc-step-action-register-image"></a>

此步骤操作使用亚马逊 EC2 RegisterImage API 注册新的亚马逊系统映像 (AMI)。它允许您根据现有快照或一组快照创建 AMI，指定各种图像属性。

**默认超时：**540 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| 架构 | AMI 的架构。 | 字符串 | 否 |  | 有效值：i386、x86\_64、arm64、x86\_64\_mac、arm64\_mac | 
| 阻止 DeviceMapping | AMI 的块储存设备映射条目。 | 数组 | 否 |  |  | 
| 启动模式 | AMI 的启动模式。 | 字符串 | 否 |  | 有效值：legacy-bios、uefi、uefi-perferred | 
| 描述 | AMI 的描述。 | 字符串 | 否 |  |  | 
| enaSupport | 是否启用了 ENA 的增强联网。 | 布尔值 | 否 |  |  | 
| 图像位置 | AMI 清单的位置。 | 字符串 | 否 |  |  S3-backed AMI 必填项 | 
| IMDS 支持 | IMDSv2 支持级别。 | 字符串 | 否 |  | 有效值：v2.0 | 
| 包括 SnapshotTags | 是否包含块储存设备映射中定义的第一个快照中的标签。 | 布尔值 | 否 | FALSE | 当设置为 true 时，标签包含如下：+  `blockDeviceMapping`列表中`SnapshotId`第一个 EBS 卷中包含 a `SnapshotId` 的标签将与输出 AMI 标签合并。 <br />+  输出 AMI 标签优先于具有相同密钥的快照标签。 <br />+  AWS 保留的标签（密钥以开头的标签`aws:`）会自动排除。 <br />+  如果定义了多个 EBS 卷，`SnapshotId`则仅包括列表中第一个包含 EBS 卷`SnapshotId`的标签。  | 
| kerneLid | 要使用的内核的 ID。 | 字符串 | 否 |  |  | 
| ramdisKid | 要使用的 RAM 磁盘的 ID。 | 字符串 | 否 |  |  | 
| 根 DeviceName | 根设备的设备名称。 | 字符串 | 否 |  | 示例：/dev/sda1 | 
| sriov NetSupport | 使用英特尔 82599 VF 接口增强联网。 | 字符串 | 否 |  |  | 
| TPM 支持 | TPM 版本支持。 | 字符串 | 否 |  | 有效值：v2.0 | 
| UEFI 数据 | Base64-encoded UEFI 数据。 | 字符串 | 否 |  |  | 
| 虚拟化类型 | 虚拟化类型。 | 字符串 | 否 |  | 有效值：hvm、半虚拟化 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| imageId | 注册图像的 AMI ID。 | 字符串 | 

**需要 IAM 权限 **

您的自定义执行角色必须具有以下权限才能使用此步骤操作：

**允许操作**
+ `ec2:DescribeSnapshots`
+ `ec2:CreateTags`

**示例**

在工作流文档中指定步骤操作。

```
- name: RegisterNewImage
  action: RegisterImage
  onFailure: Abort
  inputs:
    architecture: "x86_64"
    bootMode: "uefi"
    blockDeviceMapping:
      - DeviceName: "/dev/sda1"
        Ebs:
          SnapshotId: "{{snap-1234567890abcdef0}}"
          VolumeSize: 100
          VolumeType: "gp3"
    rootDeviceName: "/dev/sda1"
    virtualizationType: "hvm"
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.RegisterNewImage.imageId
```

**示例：另一个步骤 SnapshotId 中的 a 以及生成的 AMI 中包含快照标签 **

```
- name: CreateSnapshot
  action: RunCommand
  onFailure: Abort
  inputs:
    instanceId: "{{i-1234567890abcdef0}}"
    documentName: "AWS-RunShellScript"
    parameters:
      commands:
        - "aws ec2 create-snapshot --volume-id {{vol-1234567890abcdef0}} --description 'Snapshot for AMI' --query 'SnapshotId' --output text"

- name: RegisterImageFromSnapshot
  action: RegisterImage
  onFailure: Abort
  inputs:
    architecture: "x86_64"
    bootMode: "uefi"
    blockDeviceMapping:
      - DeviceName: "/dev/sda1"
        Ebs:
          SnapshotId.$: "$.stepOutputs.CreateSnapshot.output[0]"
          VolumeSize: 100
          VolumeType: "gp3"
    includeSnapshotTags: true
    rootDeviceName: "/dev/sda1"
    virtualizationType: "hvm"
```

## RunCommand
<a name="wfdoc-step-action-run-command"></a>

此步骤操作为您的工作流运行命令文档。Image Builder 使用 Systems Manager API 中的 **sendCommand** 来为您运行命令文档。有关更多信息，请参阅 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)。

**默认超时：**720 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 要在其上运行命令文档的实例的 ID。 | 字符串 | 是 |  | 这必须是启动此工作流实例的工作流步骤的输出实例 ID。 | 
| documentName | 要运行的 Systems Manager 命令文档的名称。 | 字符串 | 是 |  |  | 
| 参数 | 命令文档所需的任何参数的键值对列表。 | dictionary<string, list<string>> | 有条件 |  |  | 
| documentVersion | 要运行的命令文档版本。 | 字符串 | 否 | $DEFAULT |  | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 跑 CommandId | 在实例上运行命令文档的 Systems Manager sendCommand 的 ID。 | 字符串 | 
| status | 从 Systems Manager sendCommand 返回的状态。 | 字符串 | 
| output | 从 Systems Manager sendCommand 返回的输出。 | 字符串列表 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{RunCommandDoc}}
  action: RunCommand
  onFailure: Abort
  inputs:
    documentName: {{SampleDocument}}
    parameters:
        osPlatform: 
          - "{{linux}}"
    instanceId.$: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{RunCommandDoc}}.status
```

## RunSysPrep
<a name="wfdoc-step-action-run-sysprep"></a>

此步骤操作使用 Systems Manager API 中的 **sendCommand** 为 Windows 实例运行 `AWSEC2-RunSysprep` 文档，然后为快照关闭构建实例。这些操作遵循强化和清理图像[AWS](https://aws.amazon.com/articles/public-ami-publishing-hardening-and-clean-up-requirements/)的最佳实践。

**默认超时：**60 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 要在其上运行 AWSEC2-RunSysprep 文档的实例的 ID。 | 字符串 | 是 |  | 这必须是启动此工作流实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 跑 CommandId | 在实例上运行 AWSEC2-RunSysprep 文档的 Systems Manager sendCommand 的 ID。 | 字符串 | 
| status | 从 Systems Manager sendCommand 返回的状态。 | 字符串 | 
| output | 从 Systems Manager sendCommand 返回的输出。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{RunSysprep}}
  action: RunSysPrep
  onFailure: Abort
  inputs:
      instanceId.$: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{RunSysprep}}.status
```

## SanitizeInstance
<a name="wfdoc-step-action-sanitize-instance"></a>

此操作步骤会运行适用于 Linux 实例的推荐清理脚本，然后为快照关闭构建实例。清理脚本可帮助确保最终映像遵循安全最佳实践，并删除不应延续到快照中的构建构件或设置。有关脚本的更多信息，请参阅[需要在构建后进行清理](security-best-practices.md#post-build-cleanup)。此步骤操作不适用于容器映像。

Image Builder 使用 Systems Manager API 中的 **sendCommand** 来运行此脚本。有关更多信息，请参阅 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html)。

**默认超时：**60 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 要清理的实例的 ID。 | 字符串 | 是 |  | 这必须是启动此工作流实例的工作流步骤的输出实例 ID。 | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| 跑 CommandId | 在实例上运行清理脚本的 Systems Manager sendCommand 的 ID。 | 字符串 | 
| status | 从 Systems Manager sendCommand 返回的状态。 | 字符串 | 
| output | 从 Systems Manager sendCommand 返回的输出。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{SanitizeStep}}
  action: SanitizeInstance
  onFailure: Abort
  inputs:
      instanceId: $.stepOutputs.{{LaunchStep}}.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{SanitizeStep}}.status
```

## TerminateInstance
<a name="wfdoc-step-action-terminate-instance"></a>

此步骤操作将终止您在`instanceId`输入中指定的实例。默认情况下，它无需等待即可启动终止并进入下一步。如果终止时遇到 EC2 服务错误，后台进程会处理清理问题。要等待完全终止后再继续，请将`waitForTermination`输入设置为`true`。

**默认超时：**30 分钟

**最大超时时间：**720 分钟（12 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 要终止的实例的 ID。 | 字符串 | 是 | 无 | 无 | 
| 等待 ForTermination | 指定该步骤是否等待实例达到终止状态后再继续。设置为时true，该步骤将等待完全终止（10 秒到几分钟）。 | 布尔值 | 否 | false | true \| false | 

**输出：**此步骤操作没有输出。

**示例**

在工作流文档中指定步骤操作。

```
- name: {{TerminateInstance}}
  action: TerminateInstance
  onFailure: Continue
  inputs:
      instanceId.$: {{i-1234567890abcdef0}}
      waitForTermination: {{false}}
```

## WaitForAction
<a name="wfdoc-step-action-waitfor"></a>

此步骤操作会暂停正在运行的工作流，并等待接收来自 Image Builder **SendWorkflowStepAction** API 操作的外部操作。此步骤使用详细信息类型将 EventBridge 事件发布到您的默认 EventBridge 事件总线`EC2 Image Builder Workflow Step Waiting`。如果您提供 SNS 主题 ARN，该步骤还可以发送 SNS 通知，或者如果您提供 Lambda 函数名称，则异步调用 Lambda 函数。

**暂停和恢复的工作原理**  
当`WaitForAction`步骤运行时，Image Builder 会将步骤状态设置为`WAITING`并发布 EventBridge 事件（细节类型`EC2 Image Builder Workflow Step Waiting`）。如果您提供`snsTopicArn`，它还会发送亚马逊 SNS 通知。如果你提供`lambdaFunctionName`，它会异步调用该函数。工作流程将保持暂停状态，直到发生以下情况之一：
+ 您致电**SendWorkflowStepAction**`RESUME`以继续或`STOP`结束工作流程。
+ 该步骤达到超时时间（默认 3 天，最长 7 天），工作流程失败。

您传递给**SendWorkflowStepAction**的将与该步骤一起存储，可供后续步骤作为该步骤的`reason`输出使用。`reason`

**默认超时：**3 天

**最大超时时间：**7 天（604,800 秒）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| sns TopicArn | 可选的 SNS 主题 ARN，用于在工作流步骤处于待处理状态时向其发送通知。 | 字符串 | 否 |  |  | 
| lambda FunctionName | 工作流程步骤处于待处理状态时异步调用的 Lambda 函数的可选名称或 ARN。 | 字符串 | 否 |  |  | 
| payload | JSON 字符串用作 SNS 的消息和 Lambda 的负载。如果提供，则使用默认值封装自定义负载 message/payload，分别用于 SNS 和 Lambda。如果未提供，则生成默认值 message/payload。 | 字符串 | 否 |  | 必须是有效的 JSON 字符串，最大 16 KiB | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| action | SendWorkflowStepAction API 操作返回的操作。 | 字符串（RESUME 或 STOP） | 
| reason | 返回操作的原因。 | 字符串 | 

**需要 IAM 权限 **

您的自定义执行角色必须具有以下权限才能使用此步骤操作：

**允许操作**
+ `lambda:InvokeFunction`

**指定资源**
+ `arn:aws:lambda:{{us-west-2}}:{{111122223333}}:function:{{function-name}}`
+ `arn:aws:lambda:{{us-west-2}}:{{111122223333}}:function:*`

**示例**

使用 SNS 通知在工作流文档中指定步骤操作。

```
- name: {{SendEventAndWait}}
  action: WaitForAction
  onFailure: Abort
  inputs:
    snsTopicArn: arn:aws:sns:{{us-west-2}}:{{111122223333}}:{{ExampleTopic}}
```

使用 Lambda 函数调用在工作流程文档中指定步骤操作。

```
- name: {{SendEventAndWaitWithLambda}}
  action: WaitForAction
  onFailure: Abort
  inputs:
    lambdaFunctionName: {{ExampleFunction}}
    payload: |
      {
        "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}",
        "region": "us-west-2"
      }
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{SendEventAndWait}}.reason
```

## WaitForSSMAgent
<a name="wfdoc-step-action-wait-for-ssm-agent"></a>

此步骤操作将等待 EC2 实例 AWS Systems Manager 在预期的无响应时间之后才能进行管理。它对于存在已知实例中断的工作流特别有价值，例如系统重启、操作系统升级或暂时断开实例与 SSM 连接的平台特定操作。映像生成器会监控实例，直到它恢复 SSM 连接或超时。

**默认超时：**60 分钟

**最大超时时间：**180 分钟（3 小时）

您可以使用覆盖默认值`timeoutSeconds`，但不得超过显示的最大值。高于最大值的值无法通过验证。

**回滚：**此步骤操作没有回滚。

**输入：**下表包含此步骤操作支持的输入。


| 输入名称 | 说明 | Type | 必填 | 默认 | 约束 | 
| --- | --- | --- | --- | --- | --- | 
| instanceId | 要监控 SSM 连接的实例的 ID。 | 字符串 | 是 |  | 必须是有效的 EC2 实例 ID | 

**输出：**下表包含此步骤操作的输出。


| 输出名称 | 说明 | Type | 
| --- | --- | --- | 
| status | SSM 代理的连接状态。 | 字符串 | 

**示例**

在工作流文档中指定步骤操作。

```
- name: {{WaitForInstanceAfterReboot}}
  action: WaitForSSMAgent
  onFailure: Abort
  timeoutSeconds: 900
  inputs:
    instanceId.$: $.stepOutputs.LaunchStep.instanceId
```

在工作流文档中使用步骤操作值的输出。

```
$.stepOutputs.{{WaitForInstanceAfterReboot}}.status
```