如何将无服务器的SpringBoot微服务应用程序(RESTful)部署到AWS Lambda?

时间:2019-03-13 11:20:20

标签: amazon-web-services spring-boot java-8 aws-lambda microservices

我使用Java 8和Spring Boot2.0开发了一个简单的基于REST的微服务。它具有自己的REST端点,可以使用Postman进行调用,并且得到的响应非常好。现在,如果我想在AWS云上部署相同的应用程序,我会怀疑是否了解设计和架构。我希望我的应用程序表现为无服务器,因此我想使用其Lambda服务在AWS上进行部署。

请协助清除我的以下疑问:- 1)首先,我可以将我的整个应用程序代码上传到AWS Lambda以便使其无服务器吗?

2)如果是,那么当请求通过时,我是否需要使用AWS API Gateway(强制性)来调用我的Lambda函数?

3)如果是(第2点),那么原始微服务代码中存在的端点将失效,并被新的API Gateway端点覆盖?

我的全部疑问在于端点,哪个端点将用于调用Lambda函数?

请协助澄清我的疑问。如果有任何参考样品样本,那就太好了。

欢呼

1 个答案:

答案 0 :(得分:2)

Spring Boot和AWS Lambda自然不会一起使用IMO。

Lambda是纯代码,不会作为HTTP Server呈现,它只是由其他AWS服务之一(API网关,CloudWatch,S3,DynamoDB,Kinesis,SDK等)触发的。处理程序从调用服务接收JSON请求,并处理该请求。 Here is an example.

API网关完成了Spring Boot为您提供的大部分功能。 API网关始终在线等待HTTP请求进入,为此您只为传入的请求付费,而无需为空闲(空闲的IMO的定义)付费。

一旦收到请求,API Gateway就会用一些其他环境数据包装请求有效负载,并将其发送到Lambda处理程序,该处理程序将处理请求并将一些响应返回给客户端。

说,如果您不想重组服务,则有两个选择可供您选择:

  1. 包装到Docker映像中并使用ECSElasticBeanstalk使用AWS容器服务,这两个都不被认为是无服务器的。

  2. 我还没有尝试过,但是根据AWS:

  

您可以使用aws-serverless-java-container库在AWS Lambda中运行Spring Boot应用程序。您可以在Lambda处理程序中使用该库来加载您的Spring Boot应用程序并为其代理事件。

查看指向Convert your SpringBoot projectDeploy it to AWS Lambda的链接。

希望这会有所帮助。