簡體   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