【问题标题】:AWS API Gateway - Lambda - Internal Server ErrorAWS API Gateway - Lambda - 内部服务器错误
【发布时间】:2019-12-21 06:48:39
【问题描述】:

我正在通过 lambda 将图像上传到 s3,一切正常,没有错误,但 API Gateway 的响应是 500 Internal Server Error。

我按照本教程配置了我的 api-gateway:Binary Support for API Integrations with Amazon API Gateway

我的 lambda 接收到 base64Image,解码并成功上传到 s3。

这是我的 lambda 代码:

def upload_image(event, context):
    s3 = boto3.client('s3')
    b64_image = event['base64Image']
    image = base64.b64decode(b64_image)

    try:
        with io.BytesIO(image) as buffer_image:
            buffer_image.seek(0)
            s3.upload_fileobj(buffer_image, 'MY-BUCKET', 'image')

        return {'status': True}

    except ClientError as e:
        return {'status': False, 'error': repr(e)}

这是我收到的: { “消息”:“内部服务器错误” },带有 500 状态码。

Obs:我没有使用 lambda 代理集成。

【问题讨论】:

  • 你是如何导入boto3的?您的项目环境中是否包含 boto3?
  • 是的,我的项目中包含了 boto3,并且我已经测试了我的 lambda 隔离,它运行良好。

标签: amazon-web-services amazon-s3 aws-lambda aws-api-gateway


【解决方案1】:

您需要在响应中返回一个标头,例如在 Python 中:

    return {
        "statusCode": 200,
        'headers': { 'Content-Type': 'application/json' },
        "body": json.dumps(body)
    }

【讨论】:

    【解决方案2】:

    该示例在映射响应部分以支持传递方面似乎存在不足。在这种情况下,将您的退货更改为:return {'status': True, 'statusCode': 200} 可能会起作用。

    一般来说,使用 ApiGateway-Lambda 构建响应时有两种路径。一个是 lambda-proxy(您的 lambda 函数定义响应),另一个是 ApiGateway 转换您的响应并基于映射生成适当的标头/状态的地方。

    示例中的路径适用于后者。

    我个人会改变: return {'status': True}return {'status': "Success"} 并创建一个正则表达式,分别查找单词“Success”和“Error”。

    我已经通过这种技术成功地使用了这个blog post(它还详细描述了两种方法之间的差异)。一旦你得到一个映射工作,你可以调整它,使其更适合你的实现。

    编辑:热门提示这些装饰器很棒,让 python 和 lambda 更清洁/更容易but mostly for the proxy setup

    【讨论】:

      猜你喜欢
      • 2023-02-16
      • 2019-10-26
      • 2019-12-10
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多