在本地启动 API 时未设置 AWS SAM APIGatewayProxyRequestEvent HttpMethod
AWS SAM APIGatewayProxyRequestEvent HttpMethod not set when starting API locally
我创建了一个带有 AWS::SERVERLESS::FUNCTION
的应用程序,它附加了一个 HttpApi 事件。我认为为每个资源创建一个 lambda 是个好主意,例如Post,/customer 上的 Get 和 Put 都由一个 lambda 处理,它决定使用
采取哪个动作
switch (input.getHttpMethod()) {
case "GET": ...
case "POST: ...
}
现在我的问题来了:当使用 sam local start-api
启动应用程序时,我的 lambda 被正确调用,但 input.getHttpMethod()
和 input.getRequestContext().getHttpMethod()
都没有设置。
鉴于 SAM 支持多个 HttpApi 事件,当 运行 应用程序在本地时无法提供 http 方法几乎完全缓解了本地开发。我做错了什么,还是这真的不起作用?我正在使用 Java 顺便说一句,我不知道这个问题是否也存在于其他语言中。
以防万一:
我的“每个资源一个 lambda”方法是否错误,每个动作都应该有自己的 lambda 吗?
我发现了问题。 HttpApi 默认使用“PayloadFormatVersion: 2.0”。 input
是 com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
类型,但这代表格式 1.0,我必须使用 com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent
才能让它工作。
这无声地失败了,因为实例只是从 json 输入构建的,并且 类.
中的几个字段是相同的
我创建了一个带有 AWS::SERVERLESS::FUNCTION
的应用程序,它附加了一个 HttpApi 事件。我认为为每个资源创建一个 lambda 是个好主意,例如Post,/customer 上的 Get 和 Put 都由一个 lambda 处理,它决定使用
switch (input.getHttpMethod()) {
case "GET": ...
case "POST: ...
}
现在我的问题来了:当使用 sam local start-api
启动应用程序时,我的 lambda 被正确调用,但 input.getHttpMethod()
和 input.getRequestContext().getHttpMethod()
都没有设置。
鉴于 SAM 支持多个 HttpApi 事件,当 运行 应用程序在本地时无法提供 http 方法几乎完全缓解了本地开发。我做错了什么,还是这真的不起作用?我正在使用 Java 顺便说一句,我不知道这个问题是否也存在于其他语言中。
以防万一: 我的“每个资源一个 lambda”方法是否错误,每个动作都应该有自己的 lambda 吗?
我发现了问题。 HttpApi 默认使用“PayloadFormatVersion: 2.0”。 input
是 com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
类型,但这代表格式 1.0,我必须使用 com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent
才能让它工作。
这无声地失败了,因为实例只是从 json 输入构建的,并且 类.