实战案例:使用 AWS ECS + ALB + CloudWatch 实现容器服务自动伸缩

目标

  • 使用 ECS Fargate 部署容器化 Web 应用

  • 配置 Application Load Balancer(ALB) 实现流量分发

  • 使用 CloudWatch 指标 + Target Tracking 实现自动扩容

  • 达到:在高并发请求时自动增加容器任务,低负载时自动减少


架构图

          ┌────────────┐
  Users → │   ALB      │
          └────┬───────┘
               │
       ┌───────┴────────┐
       │     ECS Service(Fargate) │
       │  Task 1 | Task 2 | Task N   │
       └───────┬────────┘
               │
        ┌──────┴──────┐
        │ CloudWatch  │ ← 收集指标(CPU / 网络)
        └──────┬──────┘
               ↓
        Auto Scaling Policy

实践步骤

步骤一:准备容器应用

准备一个简单的容器应用(例如 Python Flask、Node.js 或 Nginx):

Dockerfile 示例(Flask)

FROM python:3.9
WORKDIR /app
COPY app.py .
RUN pip install flask
CMD ["python", "app.py"]

app.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def home():
    return "Hello from ECS Fargate!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80)

本地构建并推送镜像至 ECR:

aws ecr create-repository --repository-name ecs-demo
docker build -t ecs-demo .
docker tag ecs-demo:latest .dkr.ecr..amazonaws.com/ecs-demo
aws ecr get-login-password | docker login --username AWS --password-stdin ...
docker push /ecs-demo

步骤二:创建 ECS 集群和服务

  1. 登录 AWS 控制台 → ECS → 创建集群

    • 类型:“Networking only (Fargate)”

  2. 创建任务定义(Task Definition):

    • 使用 Fargate

    • 容器配置:

      • 镜像:ECR 地址

      • 端口:80

      • 最小 CPU / 内存:256 / 512

  3. 创建 ECS 服务:

    • 集群:上面新建的

    • 负载均衡:启用 ALB

    • 子网:选择两个子网

    • 安全组:允许入站 80 端口

    • 自动部署容器任务数量:初始设为 2


步骤三:配置 ALB 监听规则

  • 监听端口:80

  • 目标组:注册 ECS 任务的端口 80

  • 健康检查路径:/


步骤四:配置 CloudWatch 自动扩缩策略

  1. 进入 ECS → 服务 → “自动伸缩” 标签页

  2. 启用 Auto Scaling

  3. 添加策略:

    • 类型:目标追踪(Target Tracking)

    • 指标类型:ECS 服务平均 CPU 使用率

    • 目标值:50%

    • 最小任务数:2,最大任务数:5

如果你应用的 CPU 不易被打满,可用请求数量或 ALB Target 请求数自定义 CloudWatch 指标。


验证自动伸缩效果

使用如下脚本模拟高并发请求:

ab -n 10000 -c 100 http:///

然后进入 ECS 控制台查看服务任务数量是否从 2 自动扩展为更多任务(最多到 5),几分钟后 CPU 下降也会自动缩减。


 小结

通过本案例,我们完成了:

 使用 ECS Fargate 构建容器服务
 利用 ALB 实现弹性流量分发
配置 CloudWatch + Auto Scaling 实现基于 CPU 的自动伸缩

你可能感兴趣的:(aws,云计算)