AWS上部署Spring Boot应用的完整指南

在AWS上部署Spring Boot应用的完整指南

摘要:本文将手把手教你如何将Spring Boot应用部署到AWS云平台,涵盖容器化、ECS Fargate部署和负载均衡配置,实现高可用、可扩展的云原生架构。


1. 为什么选择AWS + Spring Boot?

  • Spring Boot优势:快速开发、内嵌服务器、微服务友好
  • AWS优势
    • 自动扩缩容(ECS Auto Scaling)
    • 托管容器服务(ECS/EKS)
    • 低成本Serverless选项(Lambda)
    • 全球基础设施(多可用区部署)

2. 架构概览

Spring Boot App Docker Image Amazon ECR ECS Fargate Application Load Balancer Internet


3. 逐步实现

步骤1:创建Spring Boot应用
java 复制代码
@SpringBootApplication
@RestController
public class AwsDemoApp {
    public static void main(String[] args) {
        SpringApplication.run(AwsDemoApp.class, args);
    }

    @GetMapping("/")
    public String hello() {
        return "Hello from AWS ECS!";
    }
}

依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

步骤2:容器化应用(Docker)

Dockerfile

dockerfile 复制代码
FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

构建镜像:

bash 复制代码
mvn clean package
docker build -t springboot-aws-demo .

步骤3:推送镜像到Amazon ECR
  1. 创建ECR仓库

    bash 复制代码
    aws ecr create-repository --repository-name springboot-demo
  2. 推送镜像

    bash 复制代码
    aws ecr get-login-password | docker login --username AWS --password-stdin ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com
    docker tag springboot-aws-demo:latest ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/springboot-demo:latest
    docker push ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/springboot-demo:latest

步骤4:ECS Fargate部署
  1. 创建任务定义(Task Definition)

    • 任务角色:ecsTaskExecutionRole

    • 容器定义:

      json 复制代码
      "image": "ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/springboot-demo:latest",
      "portMappings": [{ "containerPort": 8080 }]
  2. 创建ECS集群

    bash 复制代码
    aws ecs create-cluster --cluster-name springboot-cluster
  3. 创建Fargate服务

    • 关联应用负载均衡器(ALB)
    • 配置健康检查路径:/actuator/health

步骤5:配置负载均衡与安全组
  • ALB设置
    • 监听端口:80 → 转发到目标组(Target Group)
    • 健康检查:HTTP:8080/actuator/health
  • 安全组规则
    • 入站规则:允许80(ALB)、8080(仅ALB访问)

步骤6:测试与验证
  1. 获取ALB DNS名称:

    bash 复制代码
    aws elbv2 describe-load-balancers --names springboot-alb
  2. 访问端点:

    bash 复制代码
    curl http://springboot-alb-123456.us-east-1.elb.amazonaws.com/
    # 输出:Hello from AWS ECS!

4. 高级优化

  1. 自动扩缩容

    bash 复制代码
    aws application-autoscaling register-scalable-target \
      --service-namespace ecs \
      --scalable-dimension ecs:service:DesiredCount \
      --min-capacity 1 --max-capacity 10
  2. 密钥管理

    • 使用AWS Secrets Manager注入数据库密码
  3. 日志与监控

    • CloudWatch容器日志
    • ECS Service Metrics(CPU/Memory)

5. 故障排查技巧

  • 容器启动失败:检查ECS任务日志(CloudWatch → Log Groups)
  • 健康检查异常:确认安全组允许ALB访问8080端口
  • 镜像拉取失败:验证ECR仓库权限策略

6. 成本优化建议

  • 使用Spot Fleet降低Fargate成本达70%
  • 设置CPU自动缩放(例如:CPU > 70%时增加实例)
  • 使用AWS Graviton处理器(ARM架构,性价比提升40%)

提示 :完整代码已上传 GitHub示例仓库


结语

通过AWS托管服务部署Spring Boot,开发者可专注于业务逻辑而非基础设施。结合ECS Fargate的Serverless容器模型,既能享受Kubernetes的灵活性,又无需管理节点,是现代化应用部署的理想选择。

相关推荐
RoboWizard22 分钟前
金士顿高速闪存盘 单双接口适配多元存储需求
大数据·运维·人工智能·智能手机·云计算
风景的人生35 分钟前
流式输出与springboot中的响应式编程
java·spring boot·ai编程
dkbnull1 小时前
Spring Boot依赖注入方式对比详解
spring boot·spring
__log2 小时前
幂等性设计:从“重复提交“到“稳如磐石“的系统防护
java·开发语言·spring boot
zhangjw342 小时前
第35篇:Spring Boot入门:自动配置+快速搭建,简化企业开发
java·spring boot·后端
Java内核笔记18 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端
REST_302719 小时前
告别Excel孤岛:一款任务链路可视化工具带来的真实改变
大数据·微服务·云计算·编辑器·excel·动态规划
海棠Flower未眠20 小时前
SpringBoot 消息死信队列(荣耀典藏版)
java·数据库·spring boot
腾渊信息科技公司20 小时前
Spring Boot + TDengine:工业视觉检测数据实时同步方案实战
spring boot·后端·tdengine
在水一缸20 小时前
苹果AI国行版过审背后的技术架构深度解析:端侧模型与私有云计算的融合实践
人工智能·架构·云计算·技术架构·苹果ai·端侧模型·私有云计算