无法从AWS Step Function向AWS Lambda传递含数组的参数
解决AWS Step Functions传递含数组参数到Lambda时数组为null的问题
问题核心原因
硬编码参数能正常工作,但通过执行输入传递含数组的JSON时数组变为null,本质是没有正确在Step Function定义中使用动态路径引用执行输入的数组字段,或是执行输入的JSON存在语法错误导致解析失败。
解决方案步骤
1. 修改Step Function的Parameters定义,使用动态路径引用
将硬编码的参数替换为带. $后缀的路径引用,让Step Functions从执行输入中动态读取值(包括数组)。
示例1:直接将整个执行输入作为Lambda的Payload传递
"Parameters": { "Payload.$": "$", "FunctionName": "AWS Lambda ARN" }
示例2:指定Payload中的具体字段(匹配执行输入的结构)
如果执行输入的结构为{"namespace": "XXX", "jobname": "XXX", "jobversion": "XXX", "jobenvironmentvariable": [...]},则Step Function定义应改为:
"Parameters": { "Payload": { "namespace.$": "$.namespace", "jobname.$": "$.jobname", "jobversion.$": "$.jobversion", "jobenvironmentvariable.$": "$.jobenvironmentvariable" }, "FunctionName": "AWS Lambda ARN" }
关键:所有需要动态读取的字段(包括数组)必须添加
. $后缀,否则会被当作字符串字面量传递,而非引用输入值。
2. 确保执行输入的JSON格式完全正确
执行输入的JSON不能有语法错误(比如缺逗号、冒号,引号不匹配),否则Step Functions会解析失败,导致对应字段变为null。正确的执行输入示例:
{ "namespace": "ABC", "jobname": "Job1", "jobversion": "1", "jobenvironmentvariable": [ {"name": "PROFILE", "value": "dev"}, {"name": "ID", "value": "12345"} ] }
3. 验证参数传递正确性
- 执行Step Function后,查看
Execution Details中的Input和Output,确认数组字段是否正确映射到Lambda调用参数。 - 在Lambda函数中添加日志打印
event参数,直接验证接收到的数组内容是否完整。
4. 适配EventBridge触发场景
如果用EventBridge触发Step Function,EventBridge的事件会包含detail层级,需调整路径引用:
"Payload": { "namespace.$": "$.detail.namespace", "jobname.$": "$.detail.jobname", "jobversion.$": "$.detail.jobversion", "jobenvironmentvariable.$": "$.detail.jobenvironmentvariable" }
不同的EventBridge规则只需修改detail中的参数内容,即可复用同一个Step Function调用Lambda的不同逻辑。
常见坑点提醒
- 遗漏
. $后缀:直接写"jobenvironmentvariable": "$.jobenvironmentvariable"会把字符串"$.jobenvironmentvariable"传给Lambda,而非输入中的数组。 - 路径不匹配:执行输入的字段名和Step Function中引用的路径必须完全一致,否则会返回null。
- JSON语法错误:执行输入中的逗号、冒号缺失是最容易忽略的问题,务必用JSON校验工具检查格式。
内容的提问来源于stack exchange,提问作者Ashikur R
相关产品推荐
相关产品推荐

