1

我创建了一个带有 的应用程序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 吗?

4

1 回答 1

2

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

于 2021-04-29T09:33:37.387 回答