Step Function调用Lambda:如何传Body?Headers与Query参数是否正确?
问题解答
一、当前Headers和Query参数的定义问题
从语法和Step Function调用Lambda的规则来看,你写的Headers和QueryParameters结构本身没问题,但你的JSON代码存在语法错误:">>>BODY TO BE PASSED<<<"后面缺少逗号,且Parameters对象的闭合括号前格式不对,这会导致状态机无法部署,必须先修正。
另外要注意:由于你无法修改目标Lambda,必须确保Headers、QueryParameters这些键名完全匹配Lambda期望的输入参数名(比如如果Lambda要求的是小写的headers而不是Headers,就得改成对应小写),否则Lambda接收不到正确的参数。
二、如何传递Body参数
直接在Parameters里添加对应键值对即可,键名同样要和Lambda期望的一致(常见的是Body或body),根据需求选择两种传递方式:
1. 传递JSON对象形式的Body
如果Lambda期望接收结构化的JSON Body,直接嵌套对象即可:
{ "StartAt": "InvokeLambdaState", "States": { "InvokeLambdaState": { "Type": "Task", "Resource": ">>>AWS ARN<<<", "Parameters": { "Method": "POST", "Headers": { "header1": "value1" }, "QueryParameters": { "Param1": "value1" }, "Body": { "username": "test", "content": "hello world", "tags": ["demo", "post"] } }, "End": true } } }
2. 传递字符串形式的Body
如果Lambda期望接收JSON字符串格式的Body,就把值写成字符串(注意转义双引号):
{ "StartAt": "InvokeLambdaState", "States": { "InvokeLambdaState": { "Type": "Task", "Resource": ">>>AWS ARN<<<", "Parameters": { "Method": "POST", "Headers": { "header1": "value1" }, "QueryParameters": { "Param1": "value1" }, "Body": "{\"username\":\"test\",\"content\":\"hello world\",\"tags\":[\"demo\",\"post\"]}" }, "End": true } } }
三、额外提示
如果需要传递动态参数(比如从前面状态的输出中获取数据),可以用Step Function的路径引用语法,比如:
"Body.$": "$.previousState.bodyData"
这会把前一个状态输出里的bodyData字段值直接传给Lambda的Body参数。
内容的提问来源于stack exchange,提问作者efultz
相关产品推荐
相关产品推荐

