我使用Java 8和Spring Boot2.0开发了一个简单的基于REST的微服务。它具有自己的REST端点,可以使用Postman进行调用,并且得到的响应非常好。现在,如果我想在AWS云上部署相同的应用程序,我会怀疑是否了解设计和架构。我希望我的应用程序表现为无服务器,因此我想使用其Lambda服务在AWS上进行部署。
请协助清除我的以下疑问:- 1)首先,我可以将我的整个应用程序代码上传到AWS Lambda以便使其无服务器吗?
2)如果是,那么当请求通过时,我是否需要使用AWS API Gateway(强制性)来调用我的Lambda函数?
3)如果是(第2点),那么原始微服务代码中存在的端点将失效,并被新的API Gateway端点覆盖?
我的全部疑问在于端点,哪个端点将用于调用Lambda函数?
请协助澄清我的疑问。如果有任何参考样品样本,那就太好了。
欢呼
答案 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处理程序,该处理程序将处理请求并将一些响应返回给客户端。
说,如果您不想重组服务,则有两个选择可供您选择:
包装到Docker映像中并使用ECS或ElasticBeanstalk使用AWS容器服务,这两个都不被认为是无服务器的。
我还没有尝试过,但是根据AWS:
您可以使用aws-serverless-java-container库在AWS Lambda中运行Spring Boot应用程序。您可以在Lambda处理程序中使用该库来加载您的Spring Boot应用程序并为其代理事件。
查看指向Convert your SpringBoot project和Deploy it to AWS Lambda的链接。
希望这会有所帮助。