如果你已经接触过 Docker,对容器化有了基本概念,那么接下来最值得了解的 AWS 服务之一就是 Amazon ECS。简单来说,如果说 Docker 是“打包工具”,那么 ECS 就是帮你“管理和运行这些打包好的应用”的调度平台。
今天这篇文章,就带你彻底搞懂 ECS 是什么、能解决什么问题,然后手把手完成一次容器化应用的部署。
什么是 Amazon ECS?
ECS 的全称是 Amazon Elastic Container Service(亚马逊弹性容器服务)。它是 AWS 提供的一项完全托管的容器编排服务,帮助你在云端轻松部署、管理和扩展容器化应用程序。
你可以把它理解成云端的“容器管家”——你只需要告诉它“我要跑什么镜像、需要多少资源、怎么访问”,ECS 就会帮你把容器安排得明明白白,而你不需要操心底层服务器的管理。
ECS 的核心优势
完全托管:无需安装、操作或扩展容器管理基础设施,AWS 替你搞定全部运维工作
深度 AWS 集成:与 IAM(权限控制)、CloudWatch(监控日志)、Elastic Load Balancing(负载均衡)等服务无缝协作
自动扩缩:根据流量自动增加或减少运行中的容器数量
两种启动模式:可以选择无服务器的 Fargate,也可以选择自己管理 EC2 实例来获得更多控制权
ECS 能用来做什么?
ECS 的应用场景非常广泛:
现代化应用部署:以标准化、合规的方式快速构建和部署微服务架构
自动扩展 Web 应用:跨多个可用区运行,自动应对流量波动
批处理任务:运行定时或按需的批量计算任务
AI/ML 模型训练:结合 Fargate,无需管理基础设施即可训练 NLP 或机器学习模型
ECS 的核心概念:三个“零件”
在动手之前,先搞清楚 ECS 的三个基本概念,这会让后续操作顺畅很多:
概念简单理解类比任务定义(Task Definition)应用的“蓝图”或“菜谱”——描述容器用什么镜像、需要多少 CPU 和内存、开放哪些端口像一份 Docker Compose 文件集群(Cluster)运行容器的“场地”——逻辑上分组的计算资源(EC2 实例或 Fargate 托管环境)像一个工场车间服务(Service)应用的“监工”——确保指定数量的任务持续运行,故障时自动恢复像 Kubernetes 中的 Deployment
两种启动类型:EC2 vs Fargate
ECS 提供了两种方式来运行你的容器,这是新手最容易困惑的地方,简单对比一下:
对比维度EC2 启动类型Fargate 启动类型你需要管理什么自己管理 EC2 实例、打补丁、扩缩容什么都不用管,AWS 全托管控制力高——可以选特定实例类型、GPU、专用硬件较低——只能配置 CPU 和内存灵活性高——可以 SSH 进实例调试较低——不能直接访问底层适用场景需要特殊硬件、精细成本控制、有运维能力的团队大多数常规应用,想省事、快速上线
💡 新手建议:先选 Fargate,少操心基础设施,专注于写代码和容器化。当你需要特殊配置(比如 GPU 加速)或想优化成本时,再考虑 EC2 启动类型。
图文教程:部署你的第一个 ECS 服务(Fargate)
下面我们从零开始,使用 Fargate 启动类型部署一个简单的 Web 应用。整个过程大约需要 10-15 分钟。
准备工作
在开始之前,确保你准备好了两样东西:
一个容器镜像:可以是 Docker Hub 上的公共镜像,也可以是推送到 Amazon ECR(Elastic Container Registry)的私有镜像
一台能联网的电脑:通过 AWS 管理控制台操作,全程不需要命令行
如果你没有自己的镜像,可以用这个测试用的公共 Nginx 镜像:
nginx:latest
第一步:进入 ECS 控制台
登录 AWS 管理控制台,在顶部搜索框输入 “ECS” 并点击进入。
第二步:创建集群
在 ECS 控制台页面,点击 “创建集群”。
集群模板:选择 “仅限联网”(这是 Fargate 的选项)
集群名称:输入
my-first-cluster(名字可以随你喜欢)其他设置:保持默认即可
点击 “创建”,几秒钟后集群就创建好了。
第三步:创建任务定义
任务定义就像是“应用的安装说明书”,告诉 ECS 你的容器长什么样。
在左侧菜单点击 “任务定义” → “创建新任务定义”
启动类型兼容性:选择 Fargate
任务执行角色:选择“创建新角色”或使用默认角色(用于让 ECS 从 ECR 拉取镜像)
操作系统系列:选择 Linux
CPU 和内存:选择 0.25 vCPU 和 0.5 GB(免费套餐范围内,够测试用)
在“容器”部分,点击 “添加容器”:
容器名称:输入
web-app镜像 URI:输入
nginx:latest(或你自己的镜像地址)端口映射:容器端口输入
80(Nginx 默认端口)
点击 “添加”,然后点击 “创建”
第四步:创建服务
现在把任务定义“跑起来”,变成一个持续运行的服务。
进入你刚创建的集群
my-first-cluster点击 “服务” 标签页 → “创建服务”
配置服务信息:
启动类型:选择 Fargate
任务定义:选择你刚创建的
web-app(版本选latest)服务名称:输入
web-service任务数量:输入
1(测试阶段一台就够了)
网络配置:
VPC:选择默认 VPC
子网:选择任意一个公有子网(确保能获取公网 IP)
安全组:创建新的安全组,添加入站规则——类型:HTTP,端口:80,来源:0.0.0.0/0(允许所有人访问)
负载均衡选择 “无”(先不配置,保持简单)
点击 “创建”,等待服务状态变为“正在运行”(大约需要 1-2 分钟)。
第五步:访问你的应用
服务运行后,你需要找到它的公网 IP:
在服务详情页,切换到 “任务” 标签页
点击正在运行的任务 ID
在任务详情中,找到 “公网 IP” 字段
在浏览器中访问
http://<公网IP>,你应该能看到 Nginx 的欢迎页面
🎉 恭喜!你的第一个容器化应用已经成功跑在 ECS 上了!
进阶优化:为什么需要负载均衡?
在上面的示例中,每个任务都有自己的公网 IP。如果任务重启,IP 会变化;如果有多个任务,你需要自己记住每个 IP。这在生产环境中显然不太友好。
解决方案是给服务挂一个 Application Load Balancer(ALB) :
稳定的访问入口:永远使用同一个 DNS 域名访问
自动流量分发:ALB 会自动把请求分发给多个任务
健康检查:自动剔除不健康的容器,确保服务可用
如果你想把应用真正用起来,强烈建议在创建服务时启用负载均衡。
别忘了“打扫房间”
ECS 服务运行中的任务会持续产生费用(即使在免费套餐内也有时长限制)。测试完成后,记得按顺序清理:
删除服务:在集群的“服务”标签页,选中服务,点击“删除”
删除任务定义:在“任务定义”页面,取消注册(如果不再需要)
删除集群:确认集群已无任务后,点击“删除集群”
这样才能彻底释放资源,避免产生不必要的账单。
希望这篇教程能帮你迈出 AWS 容器化实践的第一步。ECS 让容器编排变得简单直接,掌握它,你就拥有了构建现代化微服务应用的核心能力!