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的灵活性,又无需管理节点,是现代化应用部署的理想选择。

相关推荐
青柠编程4 小时前
基于Spring Boot的竞赛管理系统架构设计
java·spring boot·后端
Mr.Aholic4 小时前
Java系列知识之 ~ Spring 与 Spring Boot 常用注解对比说明
java·spring boot·spring
某zhuan5 小时前
云计算实验1——CentOS中hadoop的安装
hadoop·centos·云计算
观望过往6 小时前
Spring Boot 集成 Redis 全方位详解
spring boot·redis
科技峰行者7 小时前
阿里云瓴羊发布企业级AI智能体服务平台AgentOne,成就AI时代的“超级公司”
人工智能·阿里云·ai·云计算·羚羊
zhuwei_clark7 小时前
Spring AI(七)Spring AI 的RAG实现集合火山向量模型+阿里云Tair(企业版)
人工智能·阿里云·云计算
神云瑟瑟7 小时前
spring boot拦截器获取requestBody的巨坑
java·spring boot·拦截器
Q_Q5110082858 小时前
python+django/flask在线问诊系统 医院就诊 医生推荐系统
spring boot·python·django·flask·node.js·php
xiaoye370810 小时前
Spring Boot 详细介绍
java·spring boot·后端