python - 向 AWS Lambda 发送带有正文的请求
问题描述
我上传了一个 AWS Lambda 函数,其中 lambda_handler 如下所示:
import json
def lambda_handler(event, context):
print(event)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!'),
'event': event
}
问题一:退货event
当我使用 Lambda 管理控制台对其进行测试时,我可以创建一个带有参数的测试事件,这些参数也返回完全相同的格式并且一切正常:
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
但是,当我使用 Postman 时,我会得到完全不同的东西,这会返回给我:
{
"message": "Internal server error"
}
我怀疑它是因为event
看起来更像:
{'resource': '/hello', 'path': '/hello', 'httpMethod': 'GET', 'headers': {'Accept': '*/*', ... etc
问题2:在body中添加json参数会产生错误
当我尝试在 Postman 中添加 body > raw > JSON(application/JSON) 上面的键时,我得到了错误:
ERROR: The request could not be satisfied
问题
我有两个问题:
- 如何在正文中传递参数并能够使用事件或上下文在 AWS lambda 中捕获它?
- 如何正确返回活动?
解决方案
假设您已将 Lambda 设置为 AWS API Gateway 中的代理集成。如果你想附加查询字符串参数并且没有正文,那么你的方法类型应该是 GET。
您将在 Lambda 中收到的请求事件/GET your-path/?myKey1=value1&myKey2=value2
应类似于:
{
"resource": "",
"path": "/your-path",
"httpMethod": "GET",
"headers": {
},
"queryStringParameters": {
"myKey1": "value1",
"myKey2": "value2"
},
"pathParameters": {
},
"body": "{}"
}
queryStringParameters
您可以在属性中访问查询字符串参数。
如果您使用 Postman 发送请求并附加正文,那么您的 Lambda 集成类型应该是 POST/PUT。您在 Postman 请求正文中添加的数据将在event["body"]
.
最后一件事,如果您直接在控制台中测试 Lambda,那么将在您放入正文时收到事件。您需要根据集成方法类型来格式化您的事件。如果是 POST/PUT,则:
{
"body": {
"someValue": {..}
}
}
如果是 GET 则:
{
"queryStringParameters": {
"myKey1": "value1",
"myKey2": "value2"
}
}
推荐阅读
- pandas - 将自定义函数应用于滚动数据框
- c# - this.Location = Screen.AllScreens[1].WorkingArea.Location;
- java - editText 中的 datPicker 格式错误
- javascript - 如何在没有 JavaScript 文本 ID 的内容文档正文下编写写入/编辑文本?
- python-3.x - 使用动态搜索和自动完成将旧值返回到组合框
- mongodb - monodb 可以用 $in 做到这一点,多个输入和固定条件,输出像分组结果
- reactjs - 第二次分派动作时不会触发 Saga
- python - `setattr` 在 CPython 中因 `AttributeError` 失败?
- java - 如何从 Java 中的 Scanner 清除输入的字符串?
- python - Visual Studio 没有更改为正确的 python 版本