我正在学习有关使用 Lambda 函数设置 AWS API 网关以创建 restful API 的教程。我有以下代码:
import json
def lambda_handler(event, context):
# 1. Parse query string parameters
transactionId = event['queryStringParameters']['transactionid']
transactionType = event['queryStringParameters']['type']
transactionAmounts = event['queryStringParameters']['amount']
# 2. Construct the body of the response object
transactionResponse = {}
# returning values originally passed in then add separate field at the bottom
transactionResponse['transactionid'] = transactionId
transactionResponse['type'] = transactionType
transactionResponse['amount'] = transactionAmounts
transactionResponse['message'] = 'hello from lambda land'
# 3. Construct http response object
responseObject = {}
responseObject['StatusCode'] = 200
responseObject['headers'] = {}
responseObject['headers']['Content-Type'] = 'application/json'
responseObject['body'] = json.dumps(transactionResponse)
# 4. Return the response object
return responseObject
当我将 API 网关链接到此函数并尝试使用查询参数调用它时,出现错误:
{
"message":"Internal server error"
}
当我测试 lambda 函数时,它返回错误:
{
"errorMessage": "'transactionid'",
"errorType": "KeyError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 5, in lambda_handler\n transactionId = event['queryStringParameters']['transactionid']\n"
]
有没有人知道这里发生了什么/如何让它工作?
原文由 JWB 发布,翻译遵循 CC BY-SA 4.0 许可协议
我建议添加一些诊断,如下所示:
这样您就可以看到
event
和event['queryStringParameters']
中的内容,以确保它与您期望看到的相符。这些将记录在 CloudWatch Logs 中(如果您使用控制台测试事件,您可以在 AWS Lambda 控制台中看到它们)。在您的情况下,事实证明您的测试事件包括
transactionId
当您的代码预期看到transactionid
(不同的拼写)。因此出现 KeyError 异常。