我正在尝试使用 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
我错过了什么?
通过在 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)
}
我希望它能帮助别人