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

Dom*_*nic 2 sam aws-lambda aws-http-api

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

switch (input.getHttpMethod()) {
    case "GET": ...
    case "POST: ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dom*_*nic 5

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