通过 API 网关调用 AWS Lambda 时收到消息:“内部服务器错误”。该功能正在运行,但响应是此错误

Getting message: “Internal server error” while invoking AWS Lambda via API Gateway. The function is working but the response is this error

我正在访问以下在 lambda 中创建的函数:

import json
import boto3
from get_json_s3 import get_json

def lambda_handler(event, context):
    
    print(event)
    jobId = event['queryStringParameters']['jobID']
    
    try:
        print(jobId)
        response = get_json(None,f'{jobId}.json')
        print(response)
        
    except:
        return {
          'statusCode': 200,
          'body': json.dumps('jobID not found')  
        }
    print("success")
    
    return {
          'statusCode': 200,
          'body': json.dumps(response)  
        }

get_json定义如下:

import json
import boto3

s3 = boto3.client('s3')

def get_json(filegroup, filename):
    bucket = 'bucket name'
    if filegroup!=None:
        key = f'{filegroup}/{filename}'
    else:
        key = f'{filename}'
    
    response = s3.get_object(Bucket = bucket, Key = key)
    content = response['Body']
    jsonObject = json.loads(content.read())
    return jsonObject

我创建了一个 API 网关,使用 lambda 作为代理。我已经添加了对 lambda 函数的调用访问和 apigateway 访问,但我一直收到 502:内部服务器错误。

正如我从 Cloud watch 日志中看到的那样,lambda 正在执行它应该正确执行的功能。它也通过 API 网关正确触发。只有响应部分不起作用

以下是可能会帮助您诊断问题的常见问题。

  1. 它没有允许 API 网关调用您的 Lambda 函数的权限。
  2. 它被设置为您的 Lambda 函数的 AWS 服务代理,您的 Lambda 函数的响应没有return正确格式的响应。

我建议您在 API 网关端启用日志记录功能,或者您可以使用此 doc.

在 API 网关控制台上使用测试调用功能