1. 云服务器>阿里云 >

AWS ECS生产环境部署,从开发测试到上线的完整流程

AWS ECS生产环境部署从开发测试到上线的完整流程

上一篇文章我们讲了用ECS Fargate跑一个简单的Flask应用。但生产环境要求更高:要有多副本保证高可用,要有日志收集方便排查问题,要有监控告警第一时间发现故障。这篇文章带你走一遍生产环境部署的完整流程。

一、生产环境的基本要求

开发环境只要跑起来就行,生产环境要满足:

高可用:至少两个副本,分布在不同的可用区

自动恢复:容器挂了能自动重启

日志集中:所有日志收集到一起,方便查

监控告警CPU高了、内存满了能及时知道

零停机更新:更新应用时用户无感知

二、第一步:准备生产环境基础设施

2.1 创建VPC和子网

生产环境应该用独立的VPC,至少两个可用区:

公有子网A:用于负载均衡器

公有子网B:用于负载均衡器

私有子网A:用于ECS任务

私有子网B:用于ECS任务

负载均衡器放在公有子网,ECS任务放在私有子网,更安全。

2.2 创建安全组

创建三个安全组:

负载均衡器安全组

入站:允许80和443来自0.0.0.0/0

出站:允许所有

ECS任务安全组

入站:只允许来自负载均衡器安全组的流量(应用端口)

出站:允许所有

数据库安全组(如果有):

入站:只允许来自ECS任务安全组的流量(数据库端口)

出站:允许所有

2.3 创建负载均衡器

创建Application Load Balancer:

面向互联网

选择两个公有子网

安全组选负载均衡器安全组

创建目标组,健康检查路径设为应用的健康检查端点(比如/health)

三、第二步:配置任务定义

3.1 基础配置

json

复制下载

{  "family": "my-app-prod",  "requiresCompatibilities": ["FARGATE"],  "networkMode": "awsvpc",  "cpu": "512",  "memory": "1024",  "executionRoleArn": "arn:aws:iam::xxx:role/ecsTaskExecutionRole",  "taskRoleArn": "arn:aws:iam::xxx:role/ecsTaskRole",  "containerDefinitions": [    {      "name": "app",      "image": "xxx.dkr.ecr.us-east-1.amazonaws.com/my-app:latest",      "portMappings": [{"containerPort": 8080}],      "environment": [        {"name": "DB_HOST", "value": "xxx.rds.amazonaws.com"},        {"name": "DB_NAME", "value": "myapp"},        {"name": "ENVIRONMENT", "value": "production"}      ],      "logConfiguration": {        "logDriver": "awslogs",        "options": {          "awslogs-group": "/ecs/my-app",          "awslogs-region": "us-east-1",          "awslogs-stream-prefix": "app"        }      },      "healthCheck": {        "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],        "interval": 30,        "timeout": 5,        "retries": 3      }    }  ]}

关键配置说明:

cpu和memory:根据应用实际需求设置,不要太低也不要太高

environment:数据库地址、环境变量等,敏感信息应该用Secrets Manager存

logConfiguration:日志发送到CloudWatch Logs

healthCheckECS用它判断容器是否健康,不健康会自动重启

四、第三步:创建服务

4.1 创建ECS服务

ECS集群里创建服务:

启动类型:Fargate

任务定义:选生产版本

服务名称:my-app-prod-service

期望任务数:2(至少两个副本)

部署类型:滚动更新(默认)

4.2 配置网络

VPC:选你的生产VPC

子网:选两个私有子网(不同可用区)

安全组:选ECS任务安全组

4.3 配置负载均衡

负载均衡器类型:Application Load Balancer

负载均衡器名称:选你创建的

容器端口:8080

目标组:选你创建的

4.4 配置自动扩缩

最小任务数:2

最大任务数:10

扩缩策略:基于CPU使用率,目标值70%

这样当CPU超过70%时,ECS会自动增加任务数。

五、第四步:配置日志和监控

5.1 创建CloudWatch日志组

CloudWatch控制台创建日志组:/ecs/my-app。设置保留期,比如30天。

5.2 配置CloudWatch告警

创建几个关键告警:

CPU过高告警

指标:ECS服务CPU利用率

条件:大于80%持续5分钟

动作:发送邮件到运维团队

任务数异常

指标:RunningTaskCount

条件:小于2(低于最小副本数)或大于10(超过最大)

动作:发送告警

服务中断

指标:服务状态

条件:服务状态不是ACTIVE

动作:紧急告警

5.3 配置仪表板

CloudWatch创建仪表板,展示:

CPU利用率

内存利用率

运行任务数

请求数

错误率

方便一眼看到系统状态。

六、第五步:零停机更新

6.1 更新应用代码

修改代码后,构建新镜像,推送到ECR,打上新标签(比如v2)。

6.2 更新任务定义

创建新版本的任务定义,指向新镜像。

6.3 更新服务

ECS服务页面,点击“更新”,选择新版本的任务定义。ECS会执行滚动更新:

先启动一个新容器

等待健康检查通过

停止一个旧容器

重复直到全部更新完成

整个过程用户无感知。

七、第六步:处理常见问题

7.1 容器启动失败

查看CloudWatch Logs,看错误日志。常见原因:

环境变量配置错误,连不上数据库

端口写错

内存不够(任务定义里的内存太小)

健康检查配置错误

7.2 负载均衡器健康检查失败

检查:

健康检查路径是否正确(应用有没有/health端点)

安全组是否允许负载均衡器访问ECS任务

应用是否正常启动

7.3 任务被频繁重启

查看CloudWatch Logs,看应用有没有崩溃。可能是内存不足、代码bug、依赖服务不可用。

八、成本估算

以两个Fargate任务为例,每月成本约:

Fargate计算:0.5vCPU × 2 × 730小时 × 单价

内存:1GB × 2 × 730小时 × 单价

负载均衡器:约20美元/月

CloudWatch日志:存储费用很低

具体用AWS价格计算器算一下。比EC2模式贵一点,但省去了管理服务器的麻烦。

九、结语

从开发到生产,ECS的部署流程其实不复杂。关键是做好基础设施、日志、监控、告警这些基础工作。第一次配置可能花些时间,但以后每次上线就快了。生产环境稳定运行,你才能睡个好觉。

如果需要更深入咨询了解可以联系全球代理上TG:jinniuge  他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。不懂找他们就对了。

 


本文由不代表本站立场,转载联系作者并注明出处。