本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Context 对象
上下文对象是在执行期间可用的内部JSON结构,包含有关状态机和执行的信息。这允许您的工作流访问有关其特定执行的信息。您可以从以下字段访问上下文对象:
-
InputPath
-
OutputPath
-
ItemsPath
(在 Map 状态下) -
Variable
(在 Choice 状态下) -
ResultSelector
Parameters
-
变量到变量的比较运算符
上下文对象格式
上下文对象包括有关状态机、状态、执行和任务的信息。此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
"
}
}
在执行期间,上下文对象将以访问它的 Parameters
字段的相关数据填充。如果 Parameters
字段超出任务状态,则 Task
字段的值为空。
如果还没有,则RedriveCount
上下文对象的值为 0 redriven处决。此外,仅当你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
状态相关的上下文对象数据,请参阅Map 状态的上下文对象数据。
访问上下文对象
要访问上下文对象,首先通过将 .$
附加到末尾来指定参数名称,就像选择带路径的状态输入时一样。然后,要访问上下文对象数据(而不是输入),请在路径前加上 $$.
。这说明了 AWS Step Functions 使用该路径在上下文对象中选择一个节点。
以下示例说明如何访问上下文对象,例如执行 ID、名称、开始时间和 redrive 计数。
检索执行并将其传递ARN给下游服务
此示例任务状态使用路径来检索执行亚马逊资源名称 (ARN) 并将其传递给亚马逊简单队列服务 (AmazonSQS) 消息。
{
"Order Flight Ticket Queue": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage",
"Parameters": {
"QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/flight-purchase",
"MessageBody": {
"From": "YVR",
"To": "SEA",
"Execution.$": "$$.Execution.Id"
}
},
"Next": "NEXT_STATE"
}
}
有关在调用集成服务时使用任务令牌的更多信息,请参阅等待带有任务令牌的回调。
访问处于 Pass 状态的执行开始时间和名称
{ "Comment": "Accessing context object in a state machine", "StartAt": "Get execution context data", "States": { "Get execution context data": { "Type": "Pass", "Parameters": { "startTime.$": "$$.Execution.StartTime", "execName.$": "$$.Execution.Name" }, "ResultPath": "$.executionContext", "End": true } } }
访问 redrive 处决次数
以下任务状态定义示例显示了如何访问 redrive执行次数。
{ "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload": {
"Number.$": "$$.Execution.RedriveCount"
}, "FunctionName": "arn:aws:lambda:us-east-2
:123456789012
:function:functionName
" }, "End": true }
Map 状态的上下文对象数据
处理 Map 状态时,上下文对象中还有两个附加项:Index
和 Value
。对于每次 Map
状态迭代,Index
包含当前正在处理的数组项的索引号,同时 Value
包含正在处理的数组项。在 Map
状态内,上下文对象包括以下数据:
"Map": {
"Item": {
"Index": Number
,
"Value": "String
"
}
}
这些项仅在 Map
状态下可用,并且可以在 ItemSelector (地图)
字段中指定。
注意
您必须在主要 Map
状态的 ItemSelector
块中的上下文对象中定义参数,而不是在 ItemProcessor
部分中包含的状态中定义参数。
给定具有简单 Map
状态的状态机,我们可以按如下方式从上下文对象中注入信息。
{ "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"
}
}
]