我创建了一个带有 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 吗?
答案 0 :(得分:0)
我发现了问题。 HttpApi 默认使用“PayloadFormatVersion: 2.0”。 input
的类型为 com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
,但这代表格式 1.0,我必须使用 com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent
才能使其工作。
这会默默地失败,因为实例只是从 json 输入构造的,并且两个类中的几个字段是相同的。