AWS ECS 部署基础
ECS 是 AWS 的容器编排服务。它不像 Kubernetes 那样把所有概念都暴露出来,而是把容器运行抽象成 Cluster、Service、Task Definition、Task 这几层。
如果只是把一个后端服务稳定地跑起来,并接入 ALB、日志和自动扩缩容,ECS Fargate 是比自建 Kubernetes 更轻的选择。
1. ECS 的核心对象
ECS 的基本结构可以这样理解:
1 | Cluster |
1.1 Cluster
Cluster 是资源池和逻辑分组。常见划分方式:
| 维度 | 示例 |
|---|---|
| 产品线 | ifonly-service-cluster、agent-service-cluster |
| 环境 | prod-cluster、staging-cluster |
| 团队 | team-a-cluster |
在 Fargate 模式下,Cluster 本身不是机器集群,不需要维护 EC2 节点。它更像一个承载 ECS 服务的逻辑容器。
1.2 Service
Service 负责保证指定数量的 Task 持续运行。比如设置 desired count 为 2,ECS 就会尽量保持两个 Task 存活。
Service 还可以绑定 Load Balancer,让新 Task 自动注册到 Target Group,旧 Task 下线时自动摘除。
1.3 Task Definition
Task Definition 是容器运行模板,描述镜像、CPU、内存、端口、环境变量、日志、IAM Role 等配置。
每次修改镜像版本或运行参数,通常都会生成一个新的 Task Definition revision。
1.4 Task
Task 是真正运行中的容器实例。Service 按 Task Definition 启动 Task,并持续维护它的数量和健康状态。
2. Task Network Mode
ECS 常见网络模式有 bridge 和 awsvpc。现代 Fargate 服务基本都使用 awsvpc。
2.1 bridge 模式
bridge 模式可以类比合租公寓:
1 | EC2 宿主机 IP: 10.0.1.100 |
容器没有独立 IP,需要通过宿主机端口转发。ALB 如果要访问容器,需要追踪 EC2 实例和动态端口,配置更复杂。
2.2 awsvpc 模式
awsvpc 模式可以类比独立门牌号:
1 | EC2 宿主机 IP: 10.0.1.100 |
每个 Task 都有自己的 ENI 和私有 IP。ALB 可以直接按 IP 和端口转发流量,安全组也能绑定到 Task 级别。
结论:新服务优先使用 awsvpc,尤其是 Fargate。
3. Target Type 怎么选
创建 Target Group 时,Target Type 常见有四种:
| Target Type | 含义 | 适用场景 |
|---|---|---|
| Instances | 按 EC2 实例 ID 和端口路由 | bridge 或 host 网络模式 |
| IP addresses | 按 IP 地址和端口路由 | awsvpc 模式 |
| Lambda function | 路由到 Lambda | Serverless 场景 |
| Application Load Balancer | 路由到另一个 ALB | 多层负载均衡 |
awsvpc 模式下,Task 有独立私有 IP,不挂在 EC2 实例端口上,所以 Target Group 必须选 IP addresses。
如果误选 Instances,ALB 只认识 EC2 实例,不知道 Task 的独立 IP,流量就无法正确送达容器。
4. Subnet 怎么判断
Subnet 是 VPC 里的一个网段,决定容器放在哪个网络区域。
1 | VPC 10.228.0.0/16 |
判断一个子网是否公有,核心看路由表:
0.0.0.0/0 -> igw-xxx:公有子网。0.0.0.0/0 -> nat-xxx:私有子网,可以出网但没有公网入口。- 没有默认路由:通常没有公网出网能力。
在 ECS 控制台可以进入 Service 的 Configuration and networking,查看它使用的 Subnet ID,再跳转到 VPC 控制台检查路由表。
5. ECS 如何自动注册 Target
ECS 自动注册 Target 的前提是 Service 配置了 loadBalancers,把 Service 和 Target Group 绑定起来。
如果 Target Group 里没有自动出现 Task,优先检查:
- ECS Service 的 Load balancing 区域是否为空。
- Target Group 类型是否与网络模式匹配。
- Container name、container port 是否与 Task Definition 一致。
- Health check path 是否能返回成功状态码。
只创建 Target Group 不够,必须在 ECS Service 创建或更新时绑定它。
6. HTTPS 证书配置
常见流程:
- 在 ACM 申请证书。
- 域名 DNS 验证通过。
- ALB 添加 HTTPS Listener,端口
443。 - Listener 选择 ACM 证书。
- Route 53 或其他 DNS 服务把域名指向 ALB。
生产环境建议 HTTP 80 只做跳转,业务流量统一走 HTTPS。
7. 一条完整创建流程
从零搭一个典型 ECS Web 服务,大致顺序:
- 创建 ECR 仓库。
- 构建镜像并推送到 ECR。
- 创建 Task Definition。
- 创建 Target Group,
awsvpc对应IP addresses。 - 创建 ALB 和 Listener。
- 创建 ECS Service,并绑定 Target Group。
- 配置 Route 53 和 ACM 证书。
真正排查问题时,先看 Service events,再看 Target Group health check,最后看容器日志。大部分 ECS 部署问题都能在这三处定位。