[英]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.