繁体   English   中英

AWS API 网关 - Lambda - 内部服务器错误

[英]AWS API Gateway - Lambda - Internal Server Error

我正在通过 lambda 将图像上传到 s3,一切正常,没有错误,但 API 网关的响应是 500 内部服务器错误。

我按照本教程配置了我的 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)}

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

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

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

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

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

一般来说,使用 ApiGateway-Lambda 构建响应时有两条路径。 一个是 lambda 代理(您的 lambda 函数在其中定义响应),另一个是 ApiGateway 转换您的响应并根据映射生成适当的标头/状态。

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

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

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

编辑:热门提示,这些装饰器很棒,使 python 和 lambda 更干净/更容易,但主要用于代理设置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM