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

vin*_*827 2 amazon-web-services java-8 spring-boot microservices aws-lambda

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

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

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

3) 如果是(第 2 点),那么我原来的微服务代码中的端点将变得无效并被新的 API 网关端点覆盖?

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

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

干杯

Mat*_*t D 5

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

Lambda 是纯代码,它不会将自己呈现为 HTTP 服务器,它只是由其他 AWS 服务之一(API 网关、CloudWatch、S3、DynamoDB、Kinesis、SDK 等)触发。处理程序从调用服务接收 JSON 请求,并处理该请求。这是一个例子。

API Gateway 完成了 Spring Boot 为您提供的大部分工作。API Gateway 始终在线等待 HTTP 请求的传入,您只需为传入的请求付费,无需为空闲付费(无服务器 IMO 的定义)。

一旦请求进入,API Gateway 会使用一些额外的环境数据包装请求负载,并将其发送到您的 Lambda 处理程序,后者处理请求并向客户端返回一些响应。

话虽如此,如果您不想重组您的服务,有几个选项可供您选择:

  1. 包装成 Docker 镜像并使用 AWS Container Service,使用ECSElasticBeanstalk,这两种都不会被认为是无服务器的。

  2. 我没有试过这个,但根据 AWS:

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

请参阅转换您的 SpringBoot 项目并将其部署到 AWS Lambda 的链接

希望这可以帮助。