Amazon web services AWS网关许多API路由到单个lambda集成每个端点映射到lambda(java)的不同功能

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函数,

我想在AWS API网关中创建许多路由,并想将请求传递给AWS lambda函数。每个路由都应该将请求传递给Lambda函数中的不同方法。但现在我只看到,我们只能为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函数,但提供不同的处理程序函数。您可以遵循以下方法:

  • 创建一个包含两个Java处理程序函数的JAR文件,即实现依赖项的
    RequestStream
    RequestStreamHandler
  • 创建两个Lambda函数。两者都可以使用相同的JAR文件,您不需要创建两个JAR文件
  • 对于每个Lambda函数,使用完整的类引用(即包+类名)定义不同的处理程序函数
  • 创建指向第一个Lambda函数的API网关端点
  • 重复步骤4。对第二个Lambda函数执行相同的操作
  • 您可以查看(aws lambda java starter文件夹包含一个带有两个java lambda函数的示例)在使用CloudFormation+无服务器应用程序模型(SAM)时它是如何工作的。如果部署堆栈,您将看到AWS Lambda+API网关设置,如上所述:

    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函数,但提供不同的处理程序函数。您可以遵循以下方法:

  • 创建一个包含两个Java处理程序函数的JAR文件,即实现依赖项的
    RequestStream
    RequestStreamHandler
  • 创建两个Lambda函数。两者都可以使用相同的JAR文件,您不需要创建两个JAR文件
  • 对于每个Lambda函数,使用完整的类引用(即包+类名)定义不同的处理程序函数
  • 创建指向第一个Lambda函数的API网关端点
  • 重复步骤4。对第二个Lambda函数执行相同的操作
  • 您可以查看(aws lambda java starter文件夹包含一个带有两个java lambda函数的示例)在使用CloudFormation+无服务器应用程序模型(SAM)时它是如何工作的。如果部署堆栈,您将看到AWS Lambda+API网关设置,如上所述:

    API Gateway
    `/one` -> `JavaHandlerOne`
    `/two` -> `JavaHandlerTwo`
    
    你只需要根据自己的需要调整它

    注意:在这种情况下不需要使用CloudFormation堆栈或SAM,但我强烈建议使用它来简化Lambda函数的管理,特别是如果您计划重用代码工件