You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS API Gateway问题:Lambda可读取嵌套事件变量,网关中无法读取

解决API Gateway调用Lambda返回异常的问题

问题核心

你遇到的问题是Lambda Proxy集成模式下,API Gateway传递给Lambda的事件格式和本地测试的自定义事件不匹配:

  • 本地测试用的是自定义结构{"params": {...}},代码直接读取event["params"]正常。
  • 开启Use Lambda Proxy integration后,API Gateway会把请求封装成标准Proxy事件,你的请求体实际存放在event["body"]字段(字符串格式),直接取event["params"]会触发KeyError。

两种解决方案

方案1:关闭Lambda Proxy集成,使用映射模板

适合想保留现有Lambda代码的场景:

  • 进入API Gateway的POST方法配置,取消勾选Use Lambda Proxy integration。
  • 切换到Integration Request标签,找到Mapping Templates:
    • 添加application/json的模板类型,勾选When there are no templates defined (recommended)。
    • 输入映射模板内容:$input.json('$'),这个模板会把请求的JSON原封不动传递给Lambda。
  • 部署API后,用原请求体调用即可,现有代码无需修改。

方案2:修改Lambda代码适配Proxy集成格式

适合需要利用Proxy集成特性(获取请求头、路径参数等)的场景:
修改代码解析Proxy事件的请求体,并返回符合要求的响应格式:

import json

def lambda_handler(event, context):
    # 解析Proxy事件中的请求体字符串
    request_body = json.loads(event["body"])
    # 读取color参数
    color_name = request_body["params"].get("color")
    
    # 这里写你的业务处理逻辑
    processed_result = f"处理完成:颜色为{color_name}"
    
    # 返回符合API Gateway Proxy要求的响应结构
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "body": json.dumps({"result": processed_result})
    }

注意:Proxy集成要求Lambda返回包含statusCode、headers、body的字典,body必须是字符串格式,所以需要用json.dumps()序列化返回内容。


测试验证

  • 方案1:直接发送原请求体{"params": {"color": "Red (Crimson)"}},API会返回Lambda处理后的结果。
  • 方案2:确保请求的Content-Type设为application/json,发送相同请求体,即可得到正确响应。

内容的提问来源于stack exchange,提问作者Drummermean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:05:23