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