SpringBoot Serverless REST API - API Gateway + Lambda,使用 AWS SAM 部署
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
1. 引言
在开始之前,我们先来探讨一下使用 AWS Lambda 和 Spring Boot 3 的优势。您可能已经习惯于将程序打包成 JAR 文件并将其分发到服务器。您甚至可能使用 Docker 将应用程序以容器化的形式部署到 Kubernetes 中。
在管理自己的服务器时,可扩展性、安全性和补丁管理都是重要的考虑因素。将应用程序部署到服务器后,必须考虑其将面临的流量。如果服务器满负荷运行,则可能需要进行扩展以应对流量。
如果您的服务器利用率只有 10%,您可以考虑缩减规模以节省资金。
AWS Lambda 是一种无服务器计算解决方案,无需服务器配置或管理即可运行代码。您只需为使用的计算时间付费。这意味着我的项目(流量不大)非常适合使用 AWS Lambda。这种用例非常适合流量波动较大或可以扩展到零的应用。
大多数人对于部署函数即服务 (FaaS) 的概念都很熟悉,但本文我们将部署一个完整的 Spring Boot REST API。根据 AWS 定价页面,AWS Lambda 的免费套餐每月包含一百万次免费请求和 40 万 GB 秒的计算时间。这意味着,对于我正在进行的大部分业余项目,我可以免费将其部署到 AWS Lambda。
2. 先决条件
-
请点击此处阅读快速入门指南:https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot3
感谢 Mark Sailes 对本教程的帮助。 -
Java 17
-
Spring Boot 3.1
-
AWS CLI
-
AWS SAM CLI
-
GIT
你克隆我的代码库是因为我已经为你准备好了一切。
git clone https://github.com/Assassin010/SpringBoot-Serverless-Api-G.git
git clone https://Assassin10@bitbucket.org/assassin10/springboot-serverless-api-b.git
git clone https://gitlab.com/Assassin010/springboot-serverless-api-l.git
3. 议程
在本文中,您将构建一个新的 Spring Boot 3 应用程序以及一个 CRUD REST API,并将其打包部署到 AWS Lambda。
-
start.spring.io
Spring Boot 3.1.0
Maven / Java
Web,WebFlux -
构建 CRUD REST API
post package
Post Record
PostNotFoundException
PostController -
博客文章加载器
JsonPlaceholderService -
在打包生产环境之前,请使用 HTTP 客户端在本地进行测试。
4. Maven 模型
Maven Archetype 是一个项目模板,可用于创建新项目。AWS Serverless Spring Boot 3 Archetype 是一个 Maven 项目,可用于创建一个包含 Spring Boot 3 AWS Serverless 容器的 Spring Boot 3 项目。它还会创建创建 AWS Lambda 部署包所需的 Maven 配置。如果您使用 IntelliJ IDEA,可以使用 Maven Archetype 生成新项目,也可以使用 Spring Initializr。aws-serverless-springboot3-archetype
如果已经安装了 Maven,您可以使用以下命令创建一个新项目:
mvn archetype:generate -DgroupId=my.service -DartifactId=my-service -Dversion=1.0-SNAPSHOT \
-DarchetypeGroupId=com.amazonaws.serverless.archetypes \
-DarchetypeArtifactId=aws-serverless-springboot3-archetype \
-DarchetypeVersion=2.0.0-M1
5. AWS 资源
要将应用程序部署到 AWS Lambda,您必须首先创建下面列出的 AWS 资源。
- AWS Lambda
- API 网关
您可以使用 AWS 控制台手动创建资源,也可以使用代码。本文将使用 AWS 控制台,但如果您想了解更多关于 SAM 和 CDK 的信息,我也提供了一些资源。
AWS SAM
SAM 代表无服务器应用程序模型 (Serverless Application Model )。它是一个用于在 AWS 上创建无服务器应用程序的开源框架。它简化了运行应用程序所需的 AWS 资源(基础设施即代码)的定义。它还包含一个命令行界面 (CLI),用于将应用程序打包并部署到 AWS。
SAM 使用模板文件定义您的应用程序template.yaml。运行应用程序所需的 AWS 资源也在模板文件中定义。您应该在部署应用程序之前仔细阅读并审核该模板文件。
mvn clean package sam deploy --guided
https://aws.amazon.com/serverless/sam/
AWS CDK
CDK 代表云开发工具包 (Cloud Development Kit)
。AWS CDK 是一个开源软件开发框架,允许您使用熟悉的编程语言定义云应用程序的资源。由于 AWS CDK 允许您使用标准编程语言定义基础设施,因此您可以像编写应用程序代码一样,为基础设施代码编写自动化单元测试。
手动步骤
运行此命令生成 zip 文件mvn clean package
如果您想使用 SAM CLI,我已经为您创建了一个名为 template.yaml 的模板。
您需要运行以下命令:
mvn clean package
sam build
sam deploy --guided
5. 参考文献
https://aws.amazon.com/lambda/
https://aws.amazon.com/api-gateway/
https://aws.amazon.com/serverless/sam/
https://aws.amazon.com/cloudformation/
https://aws.amazon.com/s3/
https://spring.io/projects/spring-boot
https://start.spring.io
祝您编程愉快!
结束 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如果你喜欢我的作品并想支持我……
最好的方式就是在 dev.to 上关注我,点击这里。
欢迎点赞或留言,让我知道这篇文章对你是否有帮助。
Gauthier Kwatatshey__在LinkedIn
上与我联系





























