本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 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 |
参数的数据类型。如果参数定义中未包含数据类型,则参数类型默认为运行时所需的字符串值。 |
字符串 |
否 |
参数的数据类型必须为以下类型之一:
|
示例
在工作流文档中指定参数。
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 工作流文档支持的步骤操作。 |
|
|
|
条件语句将控制决策点流程添加到工作流步骤的主体中。 |
字典 |
否 |
Image Builder 支持以下条件语句作为
|
|
|
描述 |
步骤描述。 |
字符串 |
否 |
不允许使用空字符串。如果包含,长度必须为 1-1024 个字符。 |
|
|
输入 |
包含步骤操作运行所需的参数。您可以将键值指定为静态值,也可以使用解析为正确数据类型的 JSONPath 变量。 |
字典 |
是 |
||
|
name |
步骤的名称。在工作流文档内,此名称必须具有唯一性。 |
字符串 |
是 |
长度必须介于 3-128 个字符之间。 可以包含字母数字字符和 |
|
|
onFailure |
配置步骤失败时要执行的操作,如下所示。 行为
|
字符串 |
否 |
|
|
|
重试 |
将映像生成器配置为在失败时自动再次运行该步骤。有关更多信息,请参阅 重试失败的工作流程步骤。 |
字典 |
否 |
不允许重试 |
这个
|
|
rollbackEnabled |
配置发生故障时是否回滚该步骤。您可以使用静态布尔值或解析为布尔值的动态 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