amazon-web-services - 如何将 Spring Boot 微服务应用程序(RESTful)作为无服务器部署到 AWS Lambda?

标签 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 网关端点覆盖?

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

请协助澄清我的疑问。如果有任何示例引用资料,那将是非常棒的。

干杯

最佳答案

在我看来,Spring Boot 和 AWS Lambda 并不自然地结合在一起。

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

API 网关可以完成 Spring Boot 为您提供的大部分功能。 API Gateway 始终在线等待 HTTP 请求进来,为此您只需为传入请求付费,您无需为闲置付费(无服务器 IMO 的定义)。

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

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

  1. 包装成 Docker 镜像并使用 AWS 容器服务,使用 ECSElasticBeanstalk ,这些都不被认为是无服务器的。

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

You can use the aws-serverless-java-container library to run a Spring Boot application in AWS Lambda. You can use the library within your Lambda handler to load your Spring Boot application and proxy events to it.

参见 Convert your SpringBoot project 的链接和 Deploy it to AWS Lambda .

希望这对您有所帮助。

关于amazon-web-services - 如何将 Spring Boot 微服务应用程序(RESTful)作为无服务器部署到 AWS Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55140683/

相关文章:

python - 无法使用 Django 从 S3 提供静态媒体

spring-boot - LastModifiedDate 应该使用什么转换器,因为它会抛出 UnsupportedTemporalTypeException 错误

java - 实体数据类型必须与 JPA 存储库中的参数相同吗?

Java 8 - 使用 Comparator 以不同顺序比较多个字段

java - 在流中存储新实例

javascript - 如何从 NodeJS 运行 CLI 命令?

amazon-web-services - Neo4j:服务不可用:Websocket 连接失败

amazon-web-services - 在生产中禁用 sls 插件(每个阶段有不同的插件?)

java - 实体未映射

java - 我在哪里可以获得 Java 8 语言规范?