发布于 2026-01-06 1 阅读
0

SpringBoot Serverless REST API - ApiGateway+Lambda,使用 AWS 部署。SAM DEV 的全球展示挑战赛由 Mux 呈现:展示你的项目!

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. 先决条件

你克隆我的代码库是因为我已经为你准备好了一切。

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

Enter fullscreen mode Exit fullscreen mode

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
上与我联系

中等的

文章来源:https://dev.to/aws-builders/springboot-serverless-rest-api-apigatewaylambda-deployed-using-aws-sam-2o9