Amazon web services AWS网关许多API路由到单个lambda集成每个端点映射到lambda(java)的不同功能
我想在AWS API网关中创建许多路由,并想将请求传递给AWS lambda函数。每个路由都应该将请求传递给Lambda函数中的不同方法。但现在我只看到,我们只能为lambda定义一个处理程序,这是调用时唯一调用的函数。有没有最好的方法可以通过示例代码实现这一点?您已经认识到了这一点:问题是您在Lambda函数定义本身中定义了Lambda函数的处理程序。您没有将处理程序定义为API网关设置的一部分。在API网关设置中,您只定义要使用的Lambda函数。因此,您不能简单地“重用”Lambda函数,而只是指向不同的处理程序函数。但是有办法解决这个问题 在Lambda函数中处理它 为了避免设置多个Lambda函数(请参见下面的其他方法),您可以在Lambda函数的代码中处理不同的情况。例如,您仍然将API网关端点映射到相同的Lambda函数:Amazon web services AWS网关许多API路由到单个lambda集成每个端点映射到lambda(java)的不同功能,amazon-web-services,aws-lambda,aws-api-gateway,Amazon Web Services,Aws Lambda,Aws Api Gateway,我想在AWS API网关中创建许多路由,并想将请求传递给AWS lambda函数。每个路由都应该将请求传递给Lambda函数中的不同方法。但现在我只看到,我们只能为lambda定义一个处理程序,这是调用时唯一调用的函数。有没有最好的方法可以通过示例代码实现这一点?您已经认识到了这一点:问题是您在Lambda函数定义本身中定义了Lambda函数的处理程序。您没有将处理程序定义为API网关设置的一部分。在API网关设置中,您只定义要使用的Lambda函数。因此,您不能简单地“重用”Lambda函数,
API Gateway
GET /endpoint -> My Lambda function
POST /endpoint -> My Lambda function
or: ANY /endpoint -> My Lambda function
然后,在Lambda函数中,可以检查HTTP请求的方法。基于HTTP方法,您可以在Java代码中调用不同的方法。我建议看看GitHub和类APIGatewayProxyRequestEvent
,因为它已经为HTTP事件提供了正确的类。(作为如何使用这些类的示例,请参见此存储库)此外,查看这些类也很有意义,因为它们已经提供了类似的集成
使用多个Lambda函数
作为替代方案,您还可以在不同的Lambda函数中重用Lambda函数的工件(即JAR文件)。这意味着,使用相同的工件定义两个Lambda函数,但提供不同的处理程序函数。您可以遵循以下方法:
RequestStream
或RequestStreamHandler
API Gateway
`/one` -> `JavaHandlerOne`
`/two` -> `JavaHandlerTwo`
你只需要根据自己的需要调整它
注意:在这种情况下不需要使用CloudFormation堆栈或SAM,但我强烈建议使用它来简化Lambda函数的管理,特别是当您计划重用代码工件时。您已经认识到了它:问题是您在Lambda函数定义本身中定义了Lambda函数的处理程序。您没有将处理程序定义为API网关设置的一部分。在API网关设置中,您只定义要使用的Lambda函数。因此,您不能简单地“重用”Lambda函数,而只是指向不同的处理程序函数。但是有办法解决这个问题 在Lambda函数中处理它 为了避免设置多个Lambda函数(请参见下面的其他方法),您可以在Lambda函数的代码中处理不同的情况。例如,您仍然将API网关端点映射到相同的Lambda函数:
API Gateway
GET /endpoint -> My Lambda function
POST /endpoint -> My Lambda function
or: ANY /endpoint -> My Lambda function
然后,在Lambda函数中,可以检查HTTP请求的方法。基于HTTP方法,您可以在Java代码中调用不同的方法。我建议看看GitHub和类APIGatewayProxyRequestEvent
,因为它已经为HTTP事件提供了正确的类。(作为如何使用这些类的示例,请参见此存储库)此外,查看这些类也很有意义,因为它们已经提供了类似的集成
使用多个Lambda函数
作为替代方案,您还可以在不同的Lambda函数中重用Lambda函数的工件(即JAR文件)。这意味着,使用相同的工件定义两个Lambda函数,但提供不同的处理程序函数。您可以遵循以下方法:
RequestStream
或RequestStreamHandler
API Gateway
`/one` -> `JavaHandlerOne`
`/two` -> `JavaHandlerTwo`
你只需要根据自己的需要调整它
注意:在这种情况下不需要使用CloudFormation堆栈或SAM,但我强烈建议使用它来简化Lambda函数的管理,特别是如果您计划重用代码工件