View a markdown version of this page

在工作流文档中使用动态变量 - EC2 Image Builder

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

在工作流文档中使用动态变量

您可以在工作流文档中使用动态变量来表示映像创建过程中在运行时会发生变化的值。动态变量的字符串插值允许您在结构化内容(如 JSON 字符串)中嵌入 JSONPath 表达式。当您需要将复杂有效载荷中的运行时值传递给诸如或之类的步骤操作时,这尤其有用。ExecuteStateMachine WaitForAction

要对动态变量使用字符串插值,请在字符串内容中使用双花括号将 JsonPath 表达式括"{{...}}"起来。只有用双花括号包裹的 JsonPath 表达式才会作为变量处理。任何未用双花括号包裹的 JsonPath 表达式都被视为文字字符串内容。

jsonPath 动态工作流变量语法

$.<document structure>.[<step name>.]<variable name>

动态变量值表示为 JSONPath 选择器,其结构节点可对目标变量进行唯一标识。根 ($) 之后的第一个节点是指工作流文档结构,例如 stepOutputs,如果是 Image Builder 系统变量,则为 imageBuilder。以下列表包含支持的 JSONPath 工作流文档结构节点。

文档结构节点
  • 参数 – 工作流参数

  • stepOutputs – 同一工作流文档中某个步骤的输出

  • workflowOutputs – 已运行的工作流文档的输出

  • imagebuilder – Image Builder 系统变量

parametersstepOutputs 文档结构节点包括步骤名称的可选节点。这样有助于确保所有步骤中变量名称的唯一性。

JSONPath 中的最后一个节点是目标变量的名称,例如 instanceId

每个步骤都可以使用这些 JSONPath 动态变量引用任何先前步骤操作的输出。这也称为链接或引用。要引用先前步骤操作的输出,可以使用以下动态变量。

$.stepOutputs.step-name.output-name
重要

当输入参数引用动态变量时,必须将链接指示器 (.$) 附加到参数名称的末尾。

示例 1:输入参数链接指示器

以下示例显示了一个输入参数,该参数使用字符串插值在运行时解析参数值中的动态变量。

- name: ApplyTestComponents action: ExecuteComponents onFailure: Abort inputs: instanceId.$: "$.stepOutputs.LaunchTestInstance.instanceId"

示例 2:动态变量中的字符串插值

以下示例演示了动态变量如何使用字符串插值来确定运行时的值。

- name: ValidateImageConfiguration action: ExecuteStateMachine inputs: stateMachineArn: arn:aws:states:us-east-1:111122223333:stateMachine:ImageValidation input: | { "imageId": "{{ $.stepOutputs.CreateImageFromInstance.imageId }}", "region": "us-east-1", "buildDate": "{{ $.imagebuilder.dateTime }}", "instanceType": "{{ $.stepOutputs.LaunchStep.instanceType }}" }

在此示例中,用双花括号包裹的 JsonPath 表达式将在运行时解析:

  • {{ $.stepOutputs.CreateImageFromInstance.imageId }}-解析为步骤中的实际图片 ID CreateImageFromInstance

  • {{ $.imagebuilder.dateTime }}-解析为当前的构建时间戳。使用 Image Builder 系统变量有关您可以使用的映像生成器系统变量的列表,请参见。

  • {{ $.stepOutputs.LaunchStep.instanceType }}-解析为中使用的实例类型 LaunchStep

像这样的文字字符串"region": "us-east-1"保持不变。

注意

字符串插值适用于工作流程文档中的任何字符串内容,包括使用 YAML pipe () 运算符的多行字符串。|大括号要求作为一种转义机制,可以明确区分 JsonPath 变量和文字文本内容。

使用 Image Builder 系统变量

Image Builder 提供以下系统变量,您可以在工作流程文档中使用这些变量。这些是映像生成器在运行时填充的只读值。例如,您使用imagebuilder文档结构节点引用系统变量$.imagebuilder.platform

变量名称

说明

Type

示例值

云 WatchLogGroup

输出 CloudWatch 日志的日志组的名称。

格式:/aws/imagebuilder/<recipe-name>

字符串

/aws/imagebuilder/sampleImageRecipe

云 WatchLogStream

输出 CloudWatch 日志的日志流的名称。

字符串

1.0.0/1

收集 ImageMetadata

指示 Image Builder 是否收集实例元数据的设置。

布尔值

true | false

收集 ImageScanFindings

设置的当前值,该设置允许 Image Builder 收集映像扫描调查发现。

布尔值

true | false

图片 BuildNumber

映像的构建版本号。

整数

1

imageId

基础映像的 AMI ID。

字符串

ami-1234567890abcdef1

imageName

映像名称。

字符串

sampleImage

imageType

映像输出类型。

字符串

AMI | Docker

图片 VersionNumber

映像版本号。

字符串

1.0.0

实例 ProfileName

Image Builder 用于启动构建和测试实例的实例配置文件角色的名称。

字符串

SampleImageBuilderInstanceProfileRole

platform

所构建映像的操作系统平台。

字符串

Linux | Windows | MacOS

s3Logs

一个 JSON 对象,包含 Image Builder 写入的 S3 日志的配置。

JSON 对象

{'s3Logs': {'s3 BucketName ':sample-bucket', 's3 ':KeyPrefix'}} ib-logs

securityGroups

适用于构建和测试实例的安全组 ID。

列表 [字符串]

[sg-1234567890abcdef1, sg-11112222333344445]

sourceImageARN

工作流用于构建和测试阶段的 Image Builder 映像资源的 Amazon 资源名称(ARN)。

字符串

arn: aws: imagebuilder::: image//us-east-1111122223333sampleImage1.0.0/1

subnetId

要在其中启动构建和测试实例的子网 ID。

字符串

subnet-1234567890abcdef1

终止 InstanceOnFailure

设置的当前值,可指示 Image Builder 在发生故障时终止实例或保留实例以进行故障排除。

布尔值

true | false

workflowPhase

为执行工作流而运行的当前阶段。

字符串

Build | Test

workingDirectory

工作目录的路径。

字符串

/tmp