aws api网关lambda代理集成响应错误

问题描述 投票:0回答:1

我正在尝试使用 AWS api 网关代理与 lambda 集成来进行外部 api 调用,我想将响应原样返回到 api 网关。

当我使用自定义事件执行我的 lambda 时,一切正常,但是当我尝试使用 api 网关对其进行测试时,我得到了一个错误。

事件示例:

{
  "requestType": "somedata",
  "requestID": "somedata",
  "createMagicLink": {
    "id": "somedata",
    "phone": "somedata",
    "urlID": "somedata",
    "callID": "somedata",
    "caller": "somedata",
    "toSendSMS": somedata
  }
}

lambda 例子:

import requests
import json


def lambda_handler(event, context):
    
    url = "https://someUrl"
    headers = {"Accept": "application/json","API-TOKEN": "someToken", "content-type":"application/json"}
    data = event

                
    response = requests.post(url, headers=headers, json=data)
    json_response = response.json()
    json_obj = json_response['response']

    return {
        "isBase64Encoded": 'false',
        "statusCode": 200,
        "body": json_obj
        }

lambda 响应,工作正常:

{
  "isBase64Encoded": "false",
  "statusCode": 200,
  "body": {
    "status": "0",
    "GUID": "******",
    "magicURL": "someUrl",
    "errorMessage": ""
  }
}

当我尝试通过 api 网关发布请求执行时,我收到内部服务器错误 502(我将 lambda 函数中的数据变量更改为 data = event['body'] 以从 api 网关捕获事件)

Sat Feb 25 14:40:58 UTC 2023 : Endpoint response body before transformations: {"errorMessage": "'response'", "errorType": "KeyError", "stackTrace": ["  File \"/var/task/index.py\", line 14, in lambda_handler\n    json_obj = json_response['response']\n"]}
Sat Feb 25 14:40:58 UTC 2023 : Lambda execution failed with status 200 due to customer function error: 'response'. Lambda request id: *
Sat Feb 25 14:40:58 UTC 2023 : Method completed with status: 502

我错过了什么?

aws-lambda aws-api-gateway
1个回答
0
投票

通过在 lambda 函数中添加

json.loads(event['body'])
json.dumps(json_obj)
解决

import requests
import json


def lambda_handler(event, context):
    
    url = "https://someUrl"
    headers = {"Accept": "application/json","API-TOKEN": "someToken", "content-type":"application/json"}
    data = json.loads(event['body'])

                
    response = requests.post(url, headers=headers, json=data)
    json_response = response.json()
    json_obj = json_response['response']

    return {
        "isBase64Encoded": 'false',
        "statusCode": 200,
        "body": json.dumps(json_obj)
        }

我希望它能帮助别人

© www.soinside.com 2019 - 2024. All rights reserved.