AWS SAM APIGatewayProxyRequestEvent HttpMethod 在本地启动 API 时未设置

时间:2021-04-13 13:38:23

标签: aws-lambda sam aws-http-api

我创建了一个带有 AWS::SERVERLESS::FUNCTION 的应用程序,该应用程序附加了一个 HttpApi 事件。我认为为每个资源创建一个 lambda 是个好主意,例如Post、Get 和 Put on /customer 都由单个 lambda 处理,它决定使用

switch (input.getHttpMethod()) {
    case "GET": ...
    case "POST: ...
}

现在来解决我的问题:当使用 sam local start-api 启动应用程序时,我的 lambda 被正确调用,但是 input.getHttpMethod()input.getRequestContext().getHttpMethod() 都没有设置。

鉴于 SAM 支持多个 HttpApi 事件,在本地运行应用程序时未能提供 http 方法实际上完全缓解了本地开发。我做错了什么,还是这真的不起作用?顺便说一句,我正在使用 Java,我不知道使用其他语言是否也存在此问题。

以防万一: 我的“每个资源一个 lambda”的方法是错误的,每个动作都应该有自己的 lambda 吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题。 HttpApi 默认使用“PayloadFormatVersion: 2.0”。 input 的类型为 com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent,但这代表格式 1.0,我必须使用 com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent 才能使其工作。 这会默默地失败,因为实例只是从 json 输入构造的,并且两个类中的几个字段是相同的。