本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Context 对象
上下文对象是执行期间可用的内部 JSON 结构,包含有关您的状态机和执行的信息。这允许您的工作流程访问有关其特定执行的信息。您可以从以下字段访问上下文对象:
-
InputPath
-
OutputPath
-
ItemsPath
(在地图状态下) -
Variable
(在 “选择” 状态下) -
ResultSelector
-
变量到变量的比较运算符
上下文对象格式
上下文对象包括有关状态机、状态、执行和任务的信息。此 JSON 对象包括每种类型数据的节点,并采用以下格式。
{
"Execution": {
"Id": "String
",
"Input": {},
"Name": "String
",
"RoleArn": "String
",
"StartTime": "Format: ISO 8601
"
},
"State": {
"EnteredTime": "Format: ISO 8601
",
"Name": "String
",
"RetryCount": Number
},
"StateMachine": {
"Id": "String
",
"Name": "String
"
},
"Task": {
"Token": "String
"
}
}
在执行期间,上下文对象将以访问它的 Parameters
字段的相关数据填充。如果 Parameters
字段超出任务状态,则 Task
字段的值为空。
来自正在运行的执行的内容包括以下格式的具体信息。
{
"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
状态相关的上下文对象数据,请参阅映射状态的上下文对象数据。
访问上下文对象
要访问上下文对象,首先通过将 .$
附加到末尾来指定参数名称,就像选择带路径的状态输入时一样。然后,要访问上下文对象数据(而不是输入),请在路径前加上 $$.
。这会告诉 Amazon Step Functions 使用路径选择上下文对象中的节点。
以下示例演示如何访问上下文对象,例如执行 ID、名称名称和开始时间等上下文对象的上下文对象,例如执行 ID、名称和开始时间等上下文对象的上下文值值
例 检索执行的Amazon Simple Queue Service (Amazon SQS) 消息
此示例Task
状态使用路径来检索执行的Amazon Simple Queue Service (Amazon SQS) 消息中Amazon SQS 消息的Amazon SQS 消息中Amazon
{
"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 } } }
映射状态的上下文对象数据
处理 Map 状态时,上下文对象中还有两个附加项:Index
和 Value
。对于每个Map
状态迭代,Index
包含当前正在处理的数组项目的索引号,同时Value
包含正在处理的数组项目。在Map
状态内,上下文对象包含以下数据:
"Map": {
"Item": {
"Index": Number
,
"Value": "String
"
}
}
它们仅在某种Map
状态下可用,可以在ItemSelector
字段中指定。
您必须在主要 Map
状态的 ItemSelector
块中的上下文对象中定义参数,而不是在 ItemProcessor
部分中包含的状态中定义参数。
目前,Map
状态字段(例如ItemProcessor
和ItemSelector
)仅在所有商业区域中可用。
给定具有简单 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"
}
}
]