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