AWS Step Functions Map状态Task报RtInfo字段不支持错误排查
根因分析
报错和Map State逻辑、输入大小限制无关,核心问题是你使用arn:aws:states:::lambda:invoke标准Lambda集成时,参数结构不符合Step Functions的强制规范:
- 该集成模式的Parameters顶层仅允许传入官方定义的保留字段,包括
FunctionName、Qualifier、ClientContext、InvocationType、Payload - 你把自定义业务字段
RtInfo、ExecutionId、InitTime直接放在了Parameters顶层,这些字段不在保留字段列表内,Step Functions在启动任务前做参数校验时就会拦截,抛出「字段不被Step Functions支持」的错误。
你之前尝试把RtInfo包装为数组属于排错方向错误,没有定位到参数层级的核心问题。
修复方法
所有需要传递给目标Lambda函数的自定义业务参数,必须统一放在顶层的Payload字段下,调整后的状态定义如下:
"WriteRteToDB": { "Comment": "Write Rte to DB. Also records the risk calculations in the same table.", "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "End": true, "Parameters": { "FunctionName": "logger-lambda", "Payload": { "RtInfo.$": "$", "ExecutionId.$": "$$.Execution.Id", "InitTime.$": "$$.Execution.StartTime" } } }
注意事项:
- 不需要额外用
States.Array($)将Map迭代项包装为数组,除非你的Lambda业务逻辑明确要求RtInfo是数组类型,直接用$引用当前Map迭代的输入对象即可 - 调整后Step Functions会将
Payload下的全部内容作为事件入参传给logger-lambda,Lambda代码中可以直接从事件对象读取RtInfo、ExecutionId、InitTime字段,参数校验阶段不会再报错。
内容的提问来源于stack exchange,提问作者Vivek Puurkayastha
相关产品推荐
相关产品推荐

