View a markdown version of this page

工作流程文档支持的步骤操作 - EC2 Image Builder

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

工作流程文档支持的步骤操作

本节详细介绍了 Image Builder 支持的步骤操作。

本节中使用的术语
AMI

亚马逊机器映像

进行筛选

Amazon 资源名称

下表显示了哪些工作流阶段支持每个步骤操作。复选标记 (X) 表示您可以在该阶段使用步骤操作。Image Builder ExecuteComponents 将一些操作限制在特定阶段:构建和测试阶段、测试阶段DistributeImageModifyImageAttributesApplyImageConfigurations、和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,则不能同时包含DistributeImageModifyImageAttributes、或ApplyImageConfigurations。这些 AMI 分发操作在 Amazon EC2 AMI 上DistributeContainerImage运行,而在亚马逊弹性容器注册表 (Amazon ECR) 中的容器映像上运行。

ApplyImageConfigurations

使用此步骤操作将各种配置和集成应用到分布式 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

此步骤操作运行服务脚本来引导实例,以最低要求运行容器工作流。Image Builder 使用 Systems Manager API 中的 sendCommand 来运行此脚本。有关更多信息,请参阅 AWS Systems Manager Run Command

注意

引导脚本安装 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

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

EC2 Image Builder 在其启动的 EC2 实例上运行 AWS Systems Manager (Systems Manager)代理,以构建和测试映像。Image Builder 使用 Systems Manager 清单,以收集在构建阶段使用的实例的其他信息。该信息包括操作系统 (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

如果您的账户启用了 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

此步骤操作使用 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

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

注意

此操作与导入 ISO 磁盘映像的要求相同。有关更多信息,请参阅 使用 Image Builder 导入经过验证的 Windows ISO 磁盘映像

默认超时:720 分钟

最大超时时间:720 分钟(12 小时)

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

回滚:此步骤操作没有回滚。

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

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

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

输出名称 说明 Type
amiName 该步骤创建的 AMI 的名称。 字符串
快照ID 支持 AMI 的快照的 ID。 字符串
架构 AMI 的架构(x86_64arm64)。 字符串

示例

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

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

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

$.stepOutputs.CreateImageFromIsoStep.amiName

DistributeContainerImage

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

此步骤操作在构建实例上运行 Systems Manager 命令以推送容器镜像。该实例必须 AWS CLI 安装了 Docker 和。有关更多信息,请参阅 BootstrapInstanceForContainer

重要

包含、或的工作流程DistributeContainerImage不能同时包括DistributeImageModifyImageAttributes、或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

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

注意

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

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

Image Builder 使用 Systems Manager API 中的 sendCommand 来运行组件。有关更多信息,请参阅 AWS Systems Manager Run Command

默认超时: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

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

有关更多信息,请参阅《AWS Step Functions 开发者指南》中的 “步进函数” 中的 “了解状态机”

默认超时: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

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

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

默认超时:75 分钟

最大超时时间:720 分钟(12 小时)

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

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

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

输入名称 说明 Type 必填 默认 约束
图片 IdOverride 用于启动实例的图像 字符串

构建阶段:图像配方基础镜像

测试阶段:从构建阶段输出 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

使用此步骤操作修改分布式 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

此步骤操作使用亚马逊 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 标签合并。

  • 输出 AMI 标签优先于具有相同密钥的快照标签。

  • AWS 保留的标签(密钥以开头的标签aws:)会自动排除。

  • 如果定义了多个 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

此步骤操作为您的工作流运行命令文档。Image Builder 使用 Systems Manager API 中的 sendCommand 来为您运行命令文档。有关更多信息,请参阅 AWS Systems Manager Run Command

默认超时: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

此步骤操作使用 Systems Manager API 中的 sendCommand 为 Windows 实例运行 AWSEC2-RunSysprep 文档,然后为快照关闭构建实例。这些操作遵循强化和清理图像AWS的最佳实践。

默认超时: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

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

Image Builder 使用 Systems Manager API 中的 sendCommand 来运行此脚本。有关更多信息,请参阅 AWS Systems Manager Run Command

默认超时: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

此步骤操作将终止您在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

此步骤操作会暂停正在运行的工作流,并等待接收来自 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,它会异步调用该函数。工作流程将保持暂停状态,直到发生以下情况之一:

  • 您致电SendWorkflowStepActionRESUME以继续或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 操作返回的操作。 字符串(RESUMESTOP
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

此步骤操作将等待 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