AWS Step Functions Parallel任务输出无法被Lambda读取的语法问题
排查结论
你的状态机配置存在3处直接导致传参失败的问题,按优先级修复即可:
- 最核心的问题是合并逻辑对应的
Create_Brand_Iteration_Array任务传参缺失:你使用arn:aws:states:::lambda:invoke这个SDK集成模式调用Lambda时,Parameters里只配置了函数ARN,没有指定Payload参数,Step Functions不会自动把上游Parallel的输出作为事件传给Lambda,这就是为什么你手动给Lambda传正确的输入能跑通,但在工作流里拿不到数据——Lambda根本没收到Parallel的输出。 - Parallel状态多余配置了
Parameters字段:你加的{"Input.$": "$"}会把所有传入分支的输入额外嵌套一层Input键,导致两个分支的Lambda如果预期直接读取上游Get_Token输出的字段,会读不到值,间接导致分支返回空数据。 - 所有使用
lambda:invoke集成的任务都没有配置OutputPath解包:这个集成模式的返回值会把Lambda的实际输出包在Payload字段下,外层还有SDK调用的元数据,如果不解包,下游拿到的结构会和你预期的完全不一致。
修复步骤
- 修改
Create_Brand_Iteration_Array任务配置,补全Payload传参,同时加上OutputPath解包Lambda返回值:
"Create_Brand_Iteration_Array": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda...", "Payload.$": "$" }, "OutputPath": "$.Payload", "Next": "Retrieve_Brand_Info" }
这里可以删掉原来的InputPath: "$",默认就是取全量输入,不需要额外配置。
- 删掉Parallel状态下多余的Parameters配置,保留InputPath即可:
"Get_Brand_List_and_Brand_Props": { "Type": "Parallel", "Next": "Create_Brand_Iteration_Array", "InputPath": "$.Payload", "Branches": [ // 原有两个分支的配置不需要改动 ] }
注意:如果你分支里的两个Lambda任务后续也改成lambda:invoke集成模式,必须和上面的合并任务一样,每个任务都要加Payload.$: "$"传参和OutputPath: "$.Payload"解包,不然分支输出会带冗余的SDK元数据。如果保持现在直接写Lambda ARN的优化集成模式,就不需要额外改配置,这个模式会自动传参、自动解包返回值。
- 校验分支输出:改完配置后可以在Step Functions的执行详情里看Parallel状态的输出,确认是长度为2的数组,第0位包含非空的
brand_list字段,第1位包含非空的brand_props字段,只要这两个值正常,合并Lambda就能按照你之前测试的逻辑生成正确的迭代数组,不会再返回空值。
内容的提问来源于stack exchange,提问作者cookie127
相关产品推荐
相关产品推荐

