AWS API Gateway - Lambda - 内部服务器错误
Posted
技术标签:
【中文标题】AWS API Gateway - Lambda - 内部服务器错误【英文标题】:AWS API Gateway - Lambda - Internal Server Error 【发布时间】: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 隔离,它运行良好。 【参考方案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
【讨论】:
以上是关于AWS API Gateway - Lambda - 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
AWS API Gateway - Lambda - 内部服务器错误
是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?
通过 API-Gateway 将动态路径传递给 AWS-Lambda
如何将特定 AWS API Gateway 阶段连接到特定 AWS lambda 别名