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

相关推荐
代码or搬砖3 小时前
RBAC(权限认证)小例子
java·数据库·spring boot
咸鱼加辣4 小时前
【java面试题】springboot的生命周期
java·开发语言·spring boot
TG:@yunlaoda360 云老大5 小时前
腾讯云国际站代理商的QAPM服务能提供哪些专属服务?
人工智能·云计算·腾讯云
VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue敬老院管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
csdn5659738506 小时前
阿里云 Milvus 轻松实现文搜图&图搜图
阿里云·云计算·milvus
北漂IT民工_程序员_ZG6 小时前
SpringBean生命周期,动态代理
java·spring boot·spring
老华带你飞7 小时前
建筑材料管理|基于springboot 建筑材料管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
ss2738 小时前
SpringBoot+vue养老院运营管理系统
vue.js·spring boot·后端
The star"'9 小时前
04-管理变量和事实
运维·云计算·ansible