【发布时间】:2021-07-24 06:53:53
【问题描述】:
我有一个基本的 lambda 函数,它接受 JSON,并转换为 XML 并将其上传到 s3 存储桶。我正在通过 lambda 控制台运行测试,并且 xml 也正在生成并上传到 s3。当我通过 API Gateway 运行测试时出现问题,并且出现错误:
"message": "Internal server error" and Status: 502. The error also points out where is the code issue:
{"errorMessage": "'header'", "errorType": "KeyError", "stackTrace": [" File \"/var/task/sample.py\", line 21, in printMessage\n b1.text = event['header']['echoToken']\n"]}
通过 lambda 控制台运行相同的代码。下面是代码 sn-p 与引发错误的行:
def printMessage(event, context):
print(event)
#event = json.loads(event['header'])
root = ET.Element("Reservation")
m1 = ET.Element("header")
root.append(m1)
b1 = ET.SubElement(m1, "echoToken")
b1.text = event['header']['echoToken'] #this line throws error
我在这里遇到了类似的问题: AWS Lambda-API gateway "message": "Internal server error" (502 Bad Gateway)。下面是事件对象的打印。
{'header': {'echoToken': '907f44fc-6b51-4237-8018-8a840fd87f04', 'timestamp': '2018-03-07 20:59:575Z'}, 'reservation': {'hotel': {'uuid': '3_c5f3c903-c43d-4967-88d1-79ae81d00fcb', 'code': 'TASK1', 'offset': '+06:00'}, 'reservationId': 12345, 'confirmationNumbers': [{'confirmationNumber': '12345', 'source': 'ENCORA', 'guest': 'Arturo Vargas'}, {'confirmationNumber': '67890', 'source': 'NEARSOFT', 'guest': 'Carlos Hernández'}], 'lastUpdateTimestamp': '2018-03-07 20:59:541Z', 'lastUpdateOperatorId': 'task.user'}}
根据链接中的解决方案,如果我尝试这样做: header = json.loads(event['header']) 我收到以下错误:
"errorMessage": "the JSON object must be str, bytes or bytearray, not dict",
这是我需要完成的任务,我尝试了一些事情,但通过 API Gateway 和 POSTMAN 测试时总是失败。所以,我的问题是:我不想更改 XML 转换的完整代码,有什么方法可以在 python 中加载完整的事件对象,以便它可以通过 lambda 控制台和 API 网关工作?
提前致谢!!
【问题讨论】:
-
那个事件对象看起来被篡改了,应该是
headers而不是header -
提供给我的 JSON 文件,将其作为标头。
标签: python-3.x aws-lambda aws-api-gateway