【发布时间】:2021-01-10 01:29:18
【问题描述】:
我正在学习使用 Lambda 函数设置 AWS API Gateway 以创建一个 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"
]
有人知道这里发生了什么/如何让它工作吗?
【问题讨论】:
-
您提交了什么 URL 路径/查询以及 event['queryStringParameters'] 包含什么?
-
我提交了 my-api-gateway-url.com/test?transactionid=5&type=purchase&amount=50 并且根据我的理解 event['queryStringParameters'] 是一个字典,如果 API 网关传递一个查询字符串参数
-
您在使用 Lambda 代理集成吗? event['queryStringParameters'] 实际上包含什么?
-
是的,我该如何检查?它应该包含查询字符串参数,不是吗?
-
文档解释了如何配置 Lambda 代理集成。检查一下,然后实际打印出
event和event['queryStringParameters']的值(最好是经过美化的 JSON),这样您就可以看到实际呈现给 Lambda 函数的内容。
标签: python-3.x amazon-web-services aws-lambda aws-api-gateway