Joh*_*ews 4 python http amazon-web-services postman 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
问题二:在body中添加json参数会报错
当我尝试在 Postman 中添加 body > raw > JSON(application/JSON) 上面的键时,我收到错误消息:
ERROR: The request could not be satisfied
问题
我有两个问题:
假设您已将 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"
  }
}
在@Althar Khan 的帮助下弄清楚了。
显然AWS Lambda的API网关只接受某些属性:
...
return {
    "statusCode": 200,
    "headers": {
        "my_header": "my_value"
    },
    "body": JSON.stringify(responseBody),
    "isBase64Encoded": false
};
在此响应中,有四个字段:statusCode、headers、body 和 isBase64Encoded。
在此示例中,函数的响应采用 API 网关期望的格式。有关更多信息,请参阅用于代理集成的 Lambda 函数的输出格式。
| 归档时间: | 
 | 
| 查看次数: | 10165 次 | 
| 最近记录: |