在 Step Functions 中从 Context 对象访问执行数据 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Step Functions 中从 Context 对象访问执行数据

管理状态和转换数据

Step Functions 最近添加了变量JSONata,用于管理状态和转换数据。

了解如何使用变量传递数据使用转换数据JSONata

Context 对象是在执行期间可用的内部JSON结构,包含有关状态机和执行的信息。上下文为您的工作流程提供了有关其具体执行的信息。您的工作流程可以使用在JSONata表达式中引用 Context 对象$states.context

访问 Context 对象

要访问中的上下文对象 JSONata

要在JSONata状态下访问 Context 对象,请在JSONata表达式$states.context中使用。

{ "ExecutionID" : "{% $states.context.Execution.Id %}" }

要访问中的上下文对象 JSONPath

要访问中的 Context 对象JSONPath,首先.$要在键的末尾追加以指示该值是路径。然后,在值前加上$$.以选择上下文对象中的节点。

{ "ExecutionID.$": "$$.Execution.Id" }

JSONPath状态可以从以下JSONPath字段中引用上下文 ($$.):

  • InputPath

  • OutputPath

  • ItemsPath(在 Map 状态下)

  • Variable(在 Choice 状态下)

  • ResultSelector

  • Parameters

  • 变量到变量的比较运算符

上下文对象字段

Context 对象包括有关状态机、状态、执行和任务的信息。此JSON对象包括每种数据类型的节点,其格式如下。

{ "Execution": { "Id": "String", "Input": {}, "Name": "String", "RoleArn": "String", "StartTime": "Format: ISO 8601", "RedriveCount": Number, "RedriveTime": "Format: ISO 8601" }, "State": { "EnteredTime": "Format: ISO 8601", "Name": "String", "RetryCount": Number }, "StateMachine": { "Id": "String", "Name": "String" }, "Task": { "Token": "String" } }

在执行过程中,Context 对象会填充相关数据。 RedriveTime上下文对象只有在以下情况下才可用 redriven 处决。如果你有 redriven a Map Run,则RedriveTime上下文对象仅适用于标准类型的子工作流程。对于 redriven 使用 Express 类型的子工作流程运行地图RedriveTime不可用。

来自正在运行的执行的内容包括以下格式的具体信息。

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "stateMachineName" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }
注意

有关与Map状态相关的上下文对象数据,请参阅地图状态的上下文对象数据

地图状态的上下文对象数据

管理状态和转换数据

Step Functions 最近添加了变量JSONata,用于管理状态和转换数据。

了解如何使用变量传递数据使用转换数据JSONata

处理Map状态时,Context 对象中还有另外两个项目可用:IndexValue。对于每次 Map 状态迭代,Index 包含当前正在处理的数组项的索引号,同时 Value 包含正在处理的数组项。在Map状态中,Context 对象包含以下数据:

"Map": { "Item": { "Index": Number, "Value": "String" } }

这些项仅在 Map 状态下可用,并且可以在 ItemSelector (地图) 字段中指定。

注意

您必须在主Map状态ItemSelector块中定义来自 Context 对象的参数,而不是在该ItemProcessor部分中包含的状态内定义参数。

给定一个使用状态的JSONPathMap状态机,你可以按如下方式从 Context 对象中注入信息。

{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value" }, "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } } }

如果使用以下输入执行前一状态机,则将 IndexValue 插入到输出中。

[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]

执行的输出返回三次迭代中每次迭代的 IndexValue 项的值,如下所示:

[ { "ContextIndex": 0, "ContextValue": { "who": "bob" } }, { "ContextIndex": 1, "ContextValue": { "who": "meg" } }, { "ContextIndex": 2, "ContextValue": { "who": "joe" } } ]