在AWS上部署Spring Boot应用的完整指南
摘要:本文将手把手教你如何将Spring Boot应用部署到AWS云平台,涵盖容器化、ECS Fargate部署和负载均衡配置,实现高可用、可扩展的云原生架构。
1. 为什么选择AWS + Spring Boot?
- Spring Boot优势:快速开发、内嵌服务器、微服务友好
- AWS优势:
- 自动扩缩容(ECS Auto Scaling)
- 托管容器服务(ECS/EKS)
- 低成本Serverless选项(Lambda)
- 全球基础设施(多可用区部署)
2. 架构概览
3. 逐步实现
步骤1:创建Spring Boot应用
@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!";
}
}
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
步骤2:容器化应用(Docker)
Dockerfile:
FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像:
mvn clean package
docker build -t springboot-aws-demo .
步骤3:推送镜像到Amazon ECR
- 创建ECR仓库
aws ecr create-repository --repository-name springboot-demo
- 推送镜像
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部署
- 创建任务定义(Task Definition)
- 任务角色:
ecsTaskExecutionRole
- 容器定义:
"image": "ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/springboot-demo:latest", "portMappings": [{ "containerPort": 8080 }]
- 任务角色:
- 创建ECS集群
aws ecs create-cluster --cluster-name springboot-cluster
- 创建Fargate服务
- 关联应用负载均衡器(ALB)
- 配置健康检查路径:
/actuator/health
步骤5:配置负载均衡与安全组
- ALB设置:
- 监听端口:80 → 转发到目标组(Target Group)
- 健康检查:HTTP:8080/actuator/health
- 安全组规则:
- 入站规则:允许80(ALB)、8080(仅ALB访问)
步骤6:测试与验证
- 获取ALB DNS名称:
aws elbv2 describe-load-balancers --names springboot-alb
- 访问端点:
curl http://springboot-alb-123456.us-east-1.elb.amazonaws.com/ # 输出:Hello from AWS ECS!
4. 高级优化
- 自动扩缩容
aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --min-capacity 1 --max-capacity 10
- 密钥管理
- 使用AWS Secrets Manager注入数据库密码
- 日志与监控
- 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的灵活性,又无需管理节点,是现代化应用部署的理想选择。