Step Functions中Choice步骤读取Lambda返回值报错求助
解决Step Functions中Lambda返回值在Choice步骤的访问问题
问题根源
报错有两个核心原因:
- 路径层级错误:Lambda执行后的结果中,实际业务返回数据嵌套在
Payload字段下,而非根节点 - 键名拼写错误:Lambda返回的键是
number_of_higher_grade_promotions(末尾带s),但Choice步骤中写的是number_of_higher_grade_promotion(缺少s)
解决方案
你可以选择以下两种方式修复:
方案1:修改Lambda任务的OutputPath,直接输出Payload内容
在Lambda任务配置中,将OutputPath设置为$.Payload,后续步骤的输入就会是Lambda返回的字典本身,无需嵌套访问:
{ "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:eu-central-1:1234456789:function:my_lambda_function:$LATEST" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2 } ], "OutputPath": "$.Payload", "Next": "Is queue empty" }
同时修正Choice步骤中的键名拼写:
{ "Type": "Choice", "Choices": [ { "Variable": "$.number_of_higher_grade_promotions", "NumericEquals": 0, "Next": "Empty queue" } ], "Default": "lambda_function_2" }
方案2:保持原OutputPath,在Choice步骤中使用完整路径
如果不想修改Lambda任务的输出结构,直接在Choice步骤中使用完整的JSON路径,并修正键名:
{ "Type": "Choice", "Choices": [ { "Variable": "$.Payload.number_of_higher_grade_promotions", "NumericEquals": 0, "Next": "Empty queue" } ], "Default": "lambda_function_2" }
额外说明
Lambda代码中定义的DEPT_NAME在执行结果中变成了dept,这是因为你赋值的是dataset["dept"],如果后续需要访问部门名称,路径应为$.Payload.dept[0](因为它是数组格式)
内容的提问来源于stack exchange,提问作者Yuva
相关产品推荐
相关产品推荐

