本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Step Functions 中从 Context 对象访问执行数据
管理状态和转换数据
了解有关使用变量在状态之间传递数据和使用转换数据的信息 JSONata。
Context 对象是执行期间可用的内部 JSON 结构,包含有关状态机和执行的信息。上下文为您的工作流程提供了有关其具体执行的信息。您的工作流程可以使用在 JSONata 表达式中引用 Context 对象$states.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 对象包括有关状态机、状态、执行和任务的信息。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 对象会填充相关数据。
有时,会向上下文中添加新字段。如果您直接处理 JSON 上下文,我们建议您编写能够优雅地处理新的未知字段的代码。例如,如果使用 Jackson 库解组 JSON,我们建议您在false中设置FAIL_ON_UNKNOWN_PROPERTIES为ObjectMapper以防止。UnrecognizedPropertyException
RedriveTime上下文对象只有在执行时才redriven可用。如果您已redriven a Map Run,则 RedriveTime 上下文对象仅适用于标准类型的子工作流。对于使用快速类型的子工作流的redriven Map Run,RedriveTime 不可用。
来自正在运行的执行的内容包括以下格式的细节:
{
"Execution": {
"Id": "arn:aws:states:region:123456789012:execution:stateMachineName:executionName",
"Input": {
"key": "value"
},
"Name": "executionName",
"RoleArn": "arn:aws:iam::123456789012:role...",
"StartTime": "2025-08-27T10:04:42Z"
},
"State": {
"EnteredTime": "2025-08-27T10:04:42.001Z",
"Name": "Test",
"RetryCount": 3
},
"StateMachine": {
"Id": "arn:aws:states:region:123456789012:stateMachine:stateMachineName",
"Name": "stateMachineName"
},
"Task": {
"Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W"
}
}
以小数秒为单位的时间戳格式
Step Functions 遵循 ISO86 01 规范,该规范规定输出可以根据需要为零、三、六或九位数字。当时间戳的小数秒为零时,Step Functions 会删除尾随的零,而不是填充输出。
如果您创建的代码使用 Step Functions 时间戳,则您的代码必须能够处理可变的小数秒。
地图状态的上下文对象数据
管理状态和转换数据
了解有关使用变量在状态之间传递数据和使用转换数据的信息 JSONata。
处理Map状态时,上下文还将包含IndexValue、和Source。
对于每个Map状态迭代,Index包含当前正在处理的数组项的索引号,Value包含正在处理的数组项,Source并将是CSVJSON、JSONL、或PARQUET。 InputType
在Map状态中,Context 对象包含以下数据:
"Map": {
"Item": {
"Index" : Number,
"Key" : "String", // Only valid for JSON objects
"Value" : "String",
"Source": "String"
}
}
这些项仅在 Map 状态下可用,并且可以在 ItemSelector (地图) 字段中指定。
注意
您必须在主Map状态ItemSelector块中定义来自 Context 对象的参数,而不是在该ItemProcessor部分中包含的状态内定义参数。
给定一个使用状态的JSONPathMap状态机,你可以按如下方式从 Context 对象中注入信息。
{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value", "ContextSource.$": "$$.Map.Item.Source" }, "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } } }
对于 JSONata,可以从$states.context变量访问其他 Map 状态上下文信息:
{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex": "{% $states.context.Map.Item.Index %}", "ContextValue": "{% $states.context.Map.Item.Value %}", "ContextSource": "{% $states.context.Map.Item.Source %}" }, "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"
},
"ContextSource" : "STATE_DATA"
},
{
"ContextIndex": 1,
"ContextValue": {
"who": "meg"
},
"ContextSource" : "STATE_DATA"
},
{
"ContextIndex": 2,
"ContextValue": {
"who": "joe"
},
"ContextSource" : "STATE_DATA"
}
]
请注意,$states.context.Map.Item.Source这将是以下之一:
-
对于状态输入,该值将为:
STATE_DATA -
对于
Amazon S3 LIST_OBJECTS_V2wTransformation=NONEith,该值将显示存储桶的 S3 URI。例如:S3://bucket-name。 -
对于所有其他输入类型,该值将是 Amazon S3 URI。例如:
S3://bucket-name/object-key。