使用Lambda内置HTTPS端点无法传递POST数据问题求助
Lambda函数URL调用时event为空的解决方法
1. 适配Lambda URL的event结构
Lambda函数URL的请求格式和API Gateway(v1)完全不同:
- API Gateway测试时传入的是
APIGatewayProxyRequest格式,body直接是解析后的JSON对象 - Lambda URL传入的是
APIGatewayV2ProxyRequest格式,body默认是base64编码的字符串,需要解码后才能读取
以Python函数为例,修改代码适配Lambda URL:
import base64 import json def lambda_handler(event, context): if not event.get('body'): return {'statusCode': 400, 'body': json.dumps({'error': '无请求体'})} # 处理base64编码的请求体 if event['isBase64Encoded']: decoded_body = base64.b64decode(event['body']).decode('utf-8') request_data = json.loads(decoded_body) else: request_data = json.loads(event['body']) email = request_data.get('email') return {'statusCode': 200, 'body': json.dumps({'已接收邮箱': email})}
2. 检查函数URL的代理集成配置
如果你的函数期望直接接收原始JSON请求体而非代理格式,可以在Lambda控制台的函数URL配置中,关闭Use Lambda proxy integration选项。关闭后,event会直接包含原始请求数据(不同运行时处理逻辑略有差异,比如Node.js中可直接解析为JSON)。
3. 验证curl请求的正确性
调整curl命令的Content-Type头为标准大写格式,并添加-v参数查看请求详情,确认请求体和头是否正确发送:
curl -v --location 'https://.........lambda-url.us-east-1.on.aws' \ --header 'Content-Type: application/json' \ --data '{ "email": "value1" }'
4. 查看CloudWatch执行日志
在Lambda控制台的「监控」标签下打开CloudWatch日志,查看函数执行时实际传入的event结构。通过日志可以明确event是空值还是结构不符合预期,这是最直接的排查方式。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

