本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理状态和转换数据
了解有关使用变量在状态之间传递数据和使用转换数据的信息 JSONata。
每个状态都根据接收的输入做出决定或执行操作。在大多数情况下,该状态会将输出传递到其他状态。在 Workflow Studio 中,可以在 检查器面板 面板的输入和输出选项卡中配置状态如何筛选和操作其输入和输出数据。配置输入和输出时,使用信息链接访问上下文帮助。

有关 Step Functions 如何处理输入和输入的详细信息,请参阅 在 Step Functions 中处理输入和输出。
配置状态的输入
每个状态都以 JSON 形式接收来自前一个状态的输入。如果要筛选输入,可以使用 检查器面板 面板中输入选项卡下的 InputPath
筛选条件。InputPath
是一个以 $
开头的字符串,用于标识特定 JSON 节点。它们被称为引用路径,它们遵循 JsonPath 语法。
要筛选输入,请进行以下操作:
-
选择 “筛选输入” InputPath。
-
JsonPath
为 InputPath
筛选器输入有效的值。例如,$.data
。
InputPath
筛选条件将添加到您的工作流中。
例 示例 1:在工作流工作室中使用 InputPath 过滤器
假设状态的输入包含以下 JSON 数据。
{
"comment": "Example for InputPath",
"dataset1": {
"val1": 1,
"val2": 2,
"val3": 3
},
"dataset2": {
"val1": "a",
"val2": "b",
"val3": "c"
}
}
要应用InputPath
过滤器,请选择 “筛选输入” InputPath,然后输入相应的参考路径。如果您输入 $.dataset2.val1
,则以下 JSON 将作为输入传递给状态。
{"a"}
参考路径也可以选择值。如果您引用的数据是 { "a":
[1, 2, 3, 4] }
,并且您应用引用路径 $.a[0:2]
作为 InputPath
筛选条件,则结果如下。
[ 1, 2 ]
Parallel 工作流程状态、Map 状态工作流程。 和 Pass 工作流程状态 流状态在其输入选项卡下还有一个名为 Parameters
的输入筛选选项。此过滤器在过滤 InputPath 器之后生效,可用于构造由一个或多个键值对组成的自定义 JSON 对象。每对的值可以是静态值,可从输入中选择,也可通过路径从在 Step Functions 中从 Context 对象访问执行数据 中选择。
注意
要指定参数使用引用路径指向输入中的 JSON 节点,请使用 .$
作为参数名称的结尾。
例 示例 2:为 Parallel 状态创建自定义 JSON 输入
假设以下 JSON 数据是一个 Parallel 状态的输入。
{
"comment": "Example for Parameters",
"product": {
"details": {
"color": "blue",
"size": "small",
"material": "cotton"
},
"availability": "in stock",
"sku": "2317",
"cost": "$23"
}
}
要选择该输入的一部分并传递带有静态值的附加键值对,可以在 Parallel 状态的输入选项卡下的参数字段中指定以下内容。
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size.$": "$.product.details.size",
"exists.$": "$.product.availability",
"StaticValue": "foo"
}
}
结果将是以下 JSON 数据。
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
}
配置状态的输出
每个状态都会生成 JSON 输出,可以在将其传递到下一个状态之前对其进行筛选。有几个筛选条件可用,每个筛选条件对输出的影响都不一样。每种状态可用的输出筛选条件列在 Inspector 面板的输出选项卡下。对于 Task 工作流程状态 状态,您选择的任何输出筛选条件都将按以下顺序处理:
-
ResultSelector
:使用此筛选条件来操纵状态的结果。您可以使用部分结果构造一个新的 JSON 对象。 -
在 Step Functions ResultPath 中使用指定状态输出
:使用此筛选条件选择要传递到输出的状态输入和任务结果的组合。 -
使用过滤状态输出 OutputPath
:使用此筛选条件筛选 JSON 输出,用于选择将结果中的哪些信息传递到下一个状态。
使用 ResultSelector
ResultSelector
是用于以下状态的可选输出筛选条件:
-
Task 工作流程状态 状态,即状态浏览器的操作选项卡中列出的所有状态。
-
Map 状态工作流程。 状态,在状态浏览器的流选项卡中。
-
Parallel 工作流程状态 状态,在状态浏览器的流选项卡中。
ResultSelector
可用于构造由一个或多个键值对组成的自定义 JSON 对象。每对值可以是静态值,也可以通过路径从状态的结果中选择。
注意
要指定参数使用路径引用结果中的 JSON 节点,请使用 .$
作为参数名称的结尾。
例 使用 ResultSelector 过滤器的示例
在此示例中,您可以使用ResultSelector
操作亚马逊 EMR CreateCluster API 调用对亚马逊 EMR 状态的响应。CreateCluster
以下是 Amazon EMR CreateCluster
API 调用的结果。
{
"resourceType": "elasticmapreduce",
"resource": "createCluster.sync",
"output": {
"SdkHttpMetadata": {
"HttpHeaders": {
"Content-Length": "1112",
"Content-Type": "application/x-amz-JSON-1.1",
"Date": "Mon, 25 Nov 2019 19:41:29 GMT",
"x-amzn-RequestId": "1234-5678-9012"
},
"HttpStatusCode": 200
},
"SdkResponseMetadata": {
"RequestId": "1234-5678-9012"
},
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
要选择部分信息并传递带有静态值的附加键值对,请在状态的 “输出” 选项卡下的ResultSelector字段中指定以下内容。
{
"result": "found",
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
}
使用 ResultSelector
会产生以下结果。
{
"result": "found",
"ClusterId": "AKIAIOSFODNN7EXAMPLE",
"ResourceType": "elasticmapreduce"
}
使用 ResultPath
状态的输出可以是状态输入的副本、状态生成的结果或状态输入和结果的组合。使用 ResultPath
可控制传递到状态输出的上述两种内容的组合。有关更多 ResultPath
的用例,请参阅 在 Step Functions ResultPath 中使用指定状态输出。
ResultPath
是用于以下状态的可选输出筛选条件:
-
Task 工作流程状态 状态,即状态浏览器的操作选项卡中列出的所有状态。
-
Map 状态工作流程。 状态,在状态浏览器的流选项卡中。
-
Parallel 工作流程状态 状态,在状态浏览器的流选项卡中。
-
Pass 工作流程状态 状态,在状态浏览器的流选项卡中。
ResultPath
可用于将结果添加到原始状态输入中。指定的路径表示添加结果的位置。
例 使用 ResultPath 过滤器的示例
假设以下是一个 Task 状态的输入。
{
"details": "Default example",
"who": "AWS Step Functions"
}
该 Task 状态的结果为以下内容。
Hello, AWS Step Functions
您可以通过应用 ResultPath
并输入指示在何处添加结果的参考路径,来将此结果添加到该状态的输入中,例如 $.taskresult
:
借助此 ResultPath
,以下是作为状态输出传递的 JSON。
{
"details": "Default example",
"who": "AWS Step Functions",
"taskresult": "Hello, AWS Step Functions!"
}
使用 OutputPath
OutputPath
筛选条件可用于筛选掉不需要的信息,而仅传递您需要的这部分 JSON。OutputPath
是一个以 $
开头的字符串,用于标识 JSON 文本中的节点。
例 使用 OutputPath 过滤器的示例
假设一个 Lambda 调用 API 调用除了返回 Lambda 函数的结果之外,还返回元数据。
{
"ExecutedVersion": "$LATEST",
"Payload": {
"foo": "bar",
"colors": [
"red",
"blue",
"green"
],
"car": {
"year": 2008,
"make": "Toyota",
"model": "Matrix"
}
},
"SdkHttpMetadata": {
"AllHttpHeaders": {
"X-Amz-Executed-Version": ["$LATEST"]
...
您可以使用 OutputPath
筛选掉其他元数据。默认情况下,通过 Workflow Studio 创建的 Lambda Invoke 状态OutputPath筛选器的值为。$.Payload
此默认值会删除额外的元数据,并返回相当于直接运行 Lambda 函数的输出。
Lambda 调用任务结果示例和输出筛选条件的 $.Payload
值将以下 JSON 数据作为输出传递。
{
"foo": "bar",
"colors": [
"red",
"blue",
"green"
],
"car": {
"year": 2008,
"make": "Toyota",
"model": "Matrix"
}
}
注意
OutputPath
筛选条件是最后一个生效的输出筛选条件,因此,如果您使用诸如 ResultSelector
或 ResultPath
之类的其它输出筛选条件,则应相应地修改 OutputPath
筛选条件的 $.Payload
默认值。