View a markdown version of this page

创建 YAML 工作流文档 - EC2 Image Builder

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

创建 YAML 工作流文档

YAML 格式定义文档为图像创建过程的构建、测试和分发阶段配置输入、输出和工作流程步骤。相同的文档格式适用于所有三种工作流程类型。您可以从包含标准化步骤的模板开始,也可以从头开始定义自己的工作流。无论您使用模板还是从头开始,都可以自定义工作流以满足您的需求。

YAML 工作流文档的结构

以下各节介绍了 YAML 工作流程文档的结构,Image Builder 使用该文档执行映像构建、测试和分发操作。

工作流文档标识

对工作流进行唯一标识。此部分可以包含以下属性。

字段

描述

类型

必填

name

工作流文档名称。

字符串

否

描述

文档描述。

字符串

否

schemaVersion

文档架构版本,当前为 1.0。

字符串

是

示例

--- name: sample-test-image description: Workflow for a sample image, with extra configuration options exposed through workflow parameters. schemaVersion: 1.0

工作流文档输入参数

工作流文档的这一部分定义了调用方可以指定的输入参数。如果您没有任何参数,则可以省略此部分。如果您确实指定了参数,则每个参数可以包含以下属性。

您最多可以在工作流程文档中定义 25 个参数。每个参数值最多可包含 1,024 个字符。参数必须使用四种支持的数据类型之一: string, integer, boolean,或 stringList。如果你没有指定 default 参数的值,必须在运行时提供参数值。

字段

描述

类型

必填

约束

name

参数的名称。

字符串

是

描述

参数描述。

字符串

否

默认

如果未提供值,则为该参数的默认值。如果参数定义中未包含默认值,则运行时需要该参数值。

匹配参数数据类型。

否

type

参数的数据类型。如果参数定义中未包含数据类型,则参数类型默认为运行时所需的字符串值。

字符串

否

参数的数据类型必须为以下类型之一:

  • string

  • integer

  • boolean

  • stringList

示例

在工作流文档中指定参数。

parameters: - name: waitForActionAtEnd type: boolean default: true description: "Wait for an external action at the end of the workflow"

在工作流文档中使用参数值。

$.parameters.waitForActionAtEnd

工作流文档步骤

为工作流指定最多 15 个步骤操作。步骤按照工作流文档中定义的顺序运行。如果失败,将按相反的顺序运行回滚,从失败的步骤开始,然后反向执行之前的步骤。

每个步骤都可以引用任何先前步骤操作的输出。这称为链接或引用。要引用先前步骤操作的输出,可以使用 JSONPath 选择器。例如:

$.stepOutputs.step-name.output-name

有关更多信息,请参阅 在工作流文档中使用动态变量。

注意

尽管步骤本身并没有输出属性,但步骤操作的任何输出都包含在该步骤的 stepOutput 中。

注意

如果你设置 waitSeconds 对于一个步骤,该值必须小于 timeoutSeconds。每个步骤操作还定义了最大值 timeoutSeconds 价值。如果你设置 timeoutSeconds 如果高于操作的最大值,则验证失败。有关每项操作的最大值,请参见 工作流程文档支持的步骤操作。

每个步骤都可以包含以下属性。

字段

描述

类型

必填

默认 值

约束

action

此步骤执行的工作流操作。

字符串

是

必须是 Image Builder 工作流文档支持的步骤操作。

if,后跟一组修改 if 运算符的条件语句。

条件语句将控制决策点流程添加到工作流步骤的主体中。

字典

否

Image Builder 支持以下条件语句作为 if 运算符的修饰符:

  • 分支条件和修饰符:if、and、or、not。分支条件在某一行上自行指定。

  • 比较运算符:booleanEquals、numberEquals、numberGreaterThan、numberGreaterThanEquals、numberLessThan、numberLessThanEquals、stringEquals。

描述

步骤描述。

字符串

否

不允许使用空字符串。如果包含,长度必须为 1-1024 个字符。

输入

包含步骤操作运行所需的参数。您可以将键值指定为静态值,也可以使用解析为正确数据类型的 JSONPath 变量。

字典

是

name

步骤的名称。在工作流文档内,此名称必须具有唯一性。

字符串

是

长度必须介于 3-128 个字符之间。

可以包含字母数字字符和 _。不能包含空格。

onFailure

配置步骤失败时要执行的操作,如下所示。

行为
  • Abort – 步骤失败,工作流失败,并且在失败的步骤之后不运行任何其余步骤。如果启用了回滚,则从失败的步骤开始回滚,一直持续到允许回滚的所有步骤都回滚为止。

  • Continue – 步骤失败,但在失败的步骤之后继续运行其余步骤。在这种情况下,不会进行回滚。

字符串

否

Abort

Abort | Continue

重试

将映像生成器配置为在失败时自动再次运行该步骤。有关更多信息,请参阅 重试失败的工作流程步骤。

字典

否

不允许重试

这个 retry 属性包含以下字段:

  • maxAttempts (必填)-该步骤可以运行的总次数,包括首次尝试。有效值:1—10。

  • backoffSeconds (可选)-图像生成器在开始每次重试之前等待的秒数。如果您未设置值,映像生成器将等待 30 秒。有效值:0—600。

rollbackEnabled

配置发生故障时是否回滚该步骤。您可以使用静态布尔值或解析为布尔值的动态 JSONPath 变量。

布尔值

否

true

true | false

| 或解析为 true 或 false 的 JSONPath 变量。

timeoutSeconds

在失败和重试(如果重试适用)之前步骤运行的最长时间(以秒为单位)。

整数

否

取决于为步骤操作定义的默认值(如果适用)。

不能超过步骤操作的最大超时时间

等待秒

步骤执行将暂停的时间,以秒为单位。

整数

否

0

不能超过步骤操作的 TimeoutSeconds

示例

以下示例使用 waitForActionAtEnd 参数,工作流文档必须在其中声明该参数 parameters 部分。

steps: - name: LaunchTestInstance action: LaunchInstance onFailure: Abort inputs: waitFor: "ssmAgent" - name: ApplyTestComponents action: ExecuteComponents onFailure: Abort inputs: instanceId.$: "$.stepOutputs.LaunchTestInstance.instanceId" - name: TerminateTestInstance action: TerminateInstance onFailure: Continue inputs: instanceId.$: "$.stepOutputs.LaunchTestInstance.instanceId" - name: WaitForActionAtEnd action: WaitForAction if: booleanEquals: true value: "$.parameters.waitForActionAtEnd"

重试失败的工作流程步骤

默认情况下,工作流程中的每个步骤都运行一次。要让映像生成器在步骤失败时自动再次运行该步骤,请添加 retry 归因于该步骤。这个 retry 属性包含以下字段。

  • maxAttempts (必填)-该步骤可以运行的总次数,包括首次尝试。例如,如果你设置 maxAttempts 到 3 并且每次尝试都会失败,该步骤会运行三次,然后映像生成器将其标记为失败。有效值:1—10。

  • backoffSeconds (可选)-图像生成器在开始每次重试之前等待的秒数。如果您未设置值,映像生成器将等待 30 秒。要立即重试,请将该值设置为 0。有效值:0—600。

重试的工作原理如下:

  • 这个 timeoutSeconds 该步骤的值分别适用于每次尝试。当重试尝试开始时,超时时钟会重新启动。

  • 如果该步骤在最后一次尝试后仍然失败, onFailure 该步骤的行为适用。

一些步骤操作有额外的重试行为:

  • 在它重试之前 LaunchInstance 步骤,映像生成器将终止启动失败尝试的实例。重试会启动一个新实例。

  • 当它重试时 ExecuteComponents 步骤,映像生成器将从一开始再次运行您的组件。它不会撤消已在实例上失败的尝试所做的更改。在为运行组件的步骤配置重试之前,请确保您的组件可以安全运行多次。

要查看一个步骤运行了多少次,请使用 GetWorkflowStepExecution 要么 ListWorkflowStepExecutions API 操作。该回应包括 attemptNumber 和 maxAttempts 该步骤的字段。

注意

这个 retry 工作流步骤的属性与 maxAttempts 字段,它重试中的单个步骤 AWSTOE 组件文档。有关更多信息,请参阅 使用 AWSTOE 自定义组件的组件文档框架。

示例

steps: - name: LaunchBuildInstance action: LaunchInstance onFailure: Abort retry: maxAttempts: 3 backoffSeconds: 60 inputs: waitFor: "ssmAgent"

工作流文档输出

定义工作流的输出。每个输出都是一个键值对,用于指定输出名称和值。您可以使用输出在运行时导出后续工作流可以使用的数据。此部分是可选的。

您可以在工作流程文档中定义最多 25 个输出。在管道中包含的所有工作流程中,每个输出名称都必须是唯一的。然后,以后的工作流程可以按名称引用输出 $.workflowOutputs.name。

注意

您在中引用了某个步骤的输出 相同的 工作流程与 $.stepOutputs.stepName.field,但你引用的是输出 早些时候 只有输出名称的工作流程 ($.workflowOutputs.name) 而且没有步骤名称。

您定义的每个输出都包含以下属性。

字段

描述

类型

必填

name

输出的名称。此名称在管道包含的工作流中必须具有唯一性。

字符串

是

值

输出的值。字符串的值可以是动态变量,例如步骤操作的输出文件。有关更多信息,请参阅 在工作流文档中使用动态变量。

字符串

是

示例

使用 createProdImage 步骤的步骤输出为工作流文档创建输出映像 ID。

outputs: - name: 'outputImageId' value: '$.stepOutputs.createProdImage.imageId'

请参阅下一个工作流中的工作流输出。

$.workflowOutputs.outputImageId