本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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 对象中还有另外两个项目可用:Index
和Value
。对于每次 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 } } }
如果使用以下输入执行前一状态机,则将 Index
和 Value
插入到输出中。
[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]
执行的输出返回三次迭代中每次迭代的 Index
和 Value
项的值,如下所示:
[
{
"ContextIndex": 0,
"ContextValue": {
"who": "bob"
}
},
{
"ContextIndex": 1,
"ContextValue": {
"who": "meg"
}
},
{
"ContextIndex": 2,
"ContextValue": {
"who": "joe"
}
}
]