Lambda通过Postman请求触发KeyError问题排查求助
Lambda控制台测试正常但Postman请求触发KeyError问题排查
问题现象
测试一个接收JSON输入的Lambda函数时,在Lambda控制台用指定JSON测试可正常运行,但通过Postman发送相同JSON请求,会触发KeyError: 'inputParameter'错误。
相关代码与测试信息
Lambda函数代码
def lambda_handler(event, context): # 从event对象提取输入参数 print(event) input_parameter = event['inputParameter'] # 从输入参数提取字段 field1 = input_parameter['field1'] field2 = input_parameter['field2'] field3 = input_parameter['field3'] # 处理字段生成结果 result = field1 + " " + field2 + " " + field3 # 返回结果 return result
测试用JSON(控制台与Postman发送内容一致)
{ "inputParameter": { "field1": "Name", "field2": "Date", "field3": "Title" } }
CloudWatch错误日志
[ERROR] KeyError: 'inputParameter' Traceback (most recent call last): File "/var/task/lambda_function.py", line 6, in lambda_handler input_parameter = event['inputParameter']
原因分析
核心差异是Lambda触发方式不同,event结构完全不一样:
- Lambda控制台测试时,输入的JSON会直接作为
event对象传入函数; - 通过Postman请求时,大概率是通过API Gateway触发Lambda,此时API Gateway会把请求的JSON包装在
event['body']字段里,且是字符串格式,并非直接的JSON对象。代码直接从event根节点取inputParameter,自然找不到对应键。
解决方案
方案1:适配API Gateway触发场景
修改Lambda代码,先解析event中的body字段:
import json def lambda_handler(event, context): print(event) # 解析body字段的JSON字符串为字典 event_body = json.loads(event['body']) input_parameter = event_body['inputParameter'] field1 = input_parameter['field1'] field2 = input_parameter['field2'] field3 = input_parameter['field3'] result = field1 + " " + field2 + " " + field3 # 返回符合API Gateway要求的响应格式 return { 'statusCode': 200, 'body': json.dumps(result) }
方案2:直接调用Lambda(绕过API Gateway)
如果不需要API Gateway,可通过Postman直接调用Lambda的Invoke接口:
- 请求方式设为POST,URL格式为
https://lambda.<你的区域>.amazonaws.com/2015-03-31/functions/<你的函数名>/invocations - 请求头添加
X-Amz-Invocation-Type: RequestResponse - 请求体直接传入测试用JSON,此时Lambda收到的
event结构和控制台测试一致,无需修改代码。
内容的提问来源于stack exchange,提问作者cs-tech
相关产品推荐
相关产品推荐

