AWS Step Functions动态调用Lambda触发参数验证错误求助
问题原因及解决方案
问题根源
你的状态机定义未使用Step Functions服务集成的动态参数引用语法,导致"$.function"、"$.qualifier"这些路径字符串被直接传递给Lambda服务,而非解析为输入中的对应字段值,触发了Lambda函数名和版本qualifier的格式验证错误。
修正后的状态机定义
需将Parameters中的参数名后缀加上.$,以此告知Step Functions解析JSONPath路径获取输入值:
{ "Comment": "Manage a lambda invoke. Inputs: timeout_seconds, function, qualifier, payload.", "StartAt": "Lambda function", "States": { "Lambda function": { "Type": "Task", "TimeoutSecondsPath": "$.timeout_seconds", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName.$": "$.function", "Qualifier.$": "$.qualifier", "Payload.$": "$.payload" }, "End": true } } }
关键修改说明
FunctionName.$: 改为该格式后,Step Functions会从输入的function字段提取值,作为Lambda函数名/ARN传递Qualifier.$: 动态获取输入中的qualifier值,支持空字符串或合法的版本/别名名称Payload.$: 确保输入中的payload内容被正确解析传递给Lambda(兼容JSON对象或字符串格式的payload)
输入使用注意事项
- 当使用函数名(如
lambda_a)而非ARN时,需确保Step Functions执行角色有权限调用该Lambda,且函数与状态机在同一AWS区域 - 若
qualifier为空字符串,输入中保持"qualifier": ""即可,符合Lambda的格式要求 - 若
payload是JSON对象,输入可直接写为"payload": {},无需包裹成字符串
内容的提问来源于stack exchange,提问作者Medical physicist
相关产品推荐
相关产品推荐

