AWS Step Function参数未流转到下一步,API Gateway调用失败如何解决
问题根因
你遇到的报错核心来自两个配置错误:
- 前置Lambda步骤的输出配置错误,导致API网关步骤拿到的输入为
null - API网关步骤的动态路径写法不符合Step Function参数替换规则
1. Lambda步骤输出配置错误
你当前的Lambda任务配置了"OutputPath": "$.Payload",而你的Java Lambda返回值是null,这会导致该步骤的输出直接为null,作为输入传给后续的API网关步骤,这就是你日志里看到input: null的原因。
2. API路径动态参数写法错误
你直接把$.scenario写在Path的静态字符串里,Step Function不会自动解析该路径引用,你需要使用内置的States.Format函数拼接动态路径,同时给参数加.$后缀标记为动态解析。
解决方案
第一步:调整Lambda步骤的输出配置
如果你不需要Lambda的返回值,要保留Step Function初始传入的scenario参数,有两种修改方式可选:
方案A:忽略Lambda返回值,直接透传原始输入
把Lambda步骤中的"OutputPath": "$.Payload"删除,新增"ResultPath": null,配置如下:
"Run tasks": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "ResultPath": null, "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:aaaaaa-1:12345678910:function:aaaaaaa-aaa:$LATEST" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException" ], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 } ], "Next": "API Gateway start" }
ResultPath: null的作用是忽略当前步骤的返回结果,直接把该步骤的输入作为输出传给下一步,这样初始传入的scenario参数就会完整保留。
方案B:保留Lambda返回值,同时保留原始输入
把"OutputPath": "$.Payload"替换为"ResultPath": "$.LambdaOutput",这样Lambda的返回值会写入LambdaOutput字段,不会覆盖原始输入参数。
第二步:修正API网关步骤的配置
- 删除无效的
"Input.$": "$"配置 - 修正Path的动态参数写法,用
States.Format拼接路径
修改后的配置如下:
"API Gateway start": { "Type": "Task", "Resource": "arn:aws:states:::apigateway:invoke", "Parameters": { "ApiEndpoint": "aaaaaa.execute-api.aa-aaaa-1.amazonaws.com", "Method": "GET", "Headers": { "Header1": [ "HeaderValue1" ] }, "Stage": "start", "Path.$": "States.Format('/aaa/aaaa/aaaaa/aaaa/{}', $.scenario)", "QueryParameters": { "QueryParameter1": [ "QueryParameterValue1" ] }, "AuthType": "IAM_ROLE" }, "Next": "aaaaaa" }
内容的提问来源于stack exchange,提问作者PloniStacker
相关产品推荐
相关产品推荐

