使用Postman测试AWS Lambda函数时返回空Event对象求助
问题:Lambda返回空Event对象(Postman请求时)
问题重现
用Node.js编写的Lambda函数,在API Gateway测试控制台能正常返回完整Event,但通过Postman请求时返回空对象{}。Lambda代码如下:
export const handler = async (event, context, callback) => { // Log the headers to CloudWatch console.log('Received events:', event); // Create a response object containing the headers const response = { statusCode: 200, body: JSON.stringify(event, null, 2), // Pretty-print the JSON }; // Return the response return response; };
Postman请求对应的curl命令:
curl --location 'https://site.amazonaws.com/beta/KlikyTestAPI' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: ••••••'
实际响应结果:
{ "statusCode": 200, "body": "{}" }
原因分析
核心问题是API Gateway的集成配置未正确将外部请求数据传递到Lambda的Event对象中:
- API Gateway测试控制台会自动填充模拟请求数据到Event,但实际外部请求(如Postman)需要正确的集成映射才能把请求头、参数等数据传递给Lambda。
- 若使用REST API且未开启「Lambda代理集成」、也未配置映射模板,Lambda会收到空Event;若使用HTTP API,默认非代理集成不会传递完整请求数据。
解决方法
方法1:开启Lambda代理集成(推荐)
无论REST API还是HTTP API,开启代理集成后,API Gateway会自动将完整请求数据(包括headers、query参数、requestContext等)封装到Lambda的Event对象中:
- 进入AWS API Gateway控制台,找到目标API和对应的资源方法(如
GET /KlikyTestAPI) - REST API:点击「集成请求」,勾选「使用Lambda代理集成」,保存后重新部署API
- HTTP API:在集成设置中选择「Lambda代理」类型,保存后重新部署
开启代理后,Lambda收到的Event结构示例:
{ "resource": "/KlikyTestAPI", "path": "/beta/KlikyTestAPI", "httpMethod": "GET", "headers": { "Content-Type": "application/json", "Authorization": "••••••" }, "requestContext": { // 请求上下文相关信息 } }
方法2:配置映射模板(仅REST API)
若不想使用代理集成,可手动配置映射模板传递请求数据:
- 进入目标方法的「集成请求」,展开「映射模板」
- 点击「添加映射模板」,输入
application/json,勾选「当没有定义模板时通过」 - 在模板内容中输入
$input.json('$')(将整个请求数据映射到Event),或自定义映射规则,例如:{ "headers": $input.json('$headers'), "queryParams": $input.json('$queryStringParameters') } - 保存配置后重新部署API
验证步骤
修改配置后,重新用Postman发起请求,同时查看Lambda的CloudWatch日志(Received events:对应的日志条目),确认Event对象已包含请求数据。
内容的提问来源于stack exchange,提问作者dinesh balan
相关产品推荐
相关产品推荐

