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

通过Function URL调用AWS Lambda报InternalServerError的原因排查求助

问题原因及解决方案

出现KeyError: 'app_version'的核心原因是通过Function URL触发Lambda时,传入的event结构与控制台测试的结构完全不同,具体细节如下:

关键差异

  • 控制台测试时,你直接构造了以app_version为根键的event对象,Lambda可以直接通过event['app_version']取值。
  • 但通过Function URL触发时,Lambda收到的是标准化的API Gateway V2格式event,POST请求的内容会被包裹在event['body']字段中,且该字段值是JSON字符串,而非直接的字典结构。典型的event结构示例:
{
  "version": "2.0",
  "routeKey": "$default",
  "rawPath": "/",
  "headers": {
    "content-type": "application/json"
  },
  "body": "{\"app_version\":\"1.1.0\"}",
  "isBase64Encoded": false
}

额外可能的触发因素

  • 若在Insomnia中未设置请求头Content-Type: application/json,Lambda收到的body可能为空或无法被正确识别为JSON格式,进一步导致解析失败。

修复后的代码

修改Lambda函数,先解析event['body']中的JSON字符串,再提取app_version:

import json

def lambda_handler(event, context):
    current_version = "1.2.10"

    # 解析请求体并处理异常
    try:
        request_body = json.loads(event.get('body', '{}'))
        app_version = request_body['app_version']
    except (KeyError, json.JSONDecodeError):
        return {
            'statusCode': 400,
            'body': json.dumps({'error': '请求格式错误,缺少必要字段app_version'})
        }

    # 判断版本是否需要更新
    update_required = app_version != current_version
    
    return {
        'statusCode': 200,
        'body': json.dumps({'updateReq': update_required})
    }

验证步骤

  1. 在Insomnia中确保POST请求的Content-Type头设置为application/json。
  2. 重新发送请求,此时Lambda能正确解析请求体并返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:07:35