如果你已经接触过 Docker,对容器化有了基本概念,那么接下来最值得了解的 AWS 服务之一就是 Amazon ECS。简单来说,如果说 Docker 是“打包工具”,那么 ECS 就是帮你“管理和运行这些打包好的应用”的调度平台。

今天这篇文章,就带你彻底搞懂 ECS 是什么、能解决什么问题,然后手把手完成一次容器化应用的部署。

什么是 Amazon ECS?

ECS 的全称是 Amazon Elastic Container Service(亚马逊弹性容器服务)。它是 AWS 提供的一项完全托管的容器编排服务,帮助你在云端轻松部署、管理和扩展容器化应用程序。

你可以把它理解成云端的“容器管家”——你只需要告诉它“我要跑什么镜像、需要多少资源、怎么访问”,ECS 就会帮你把容器安排得明明白白,而你不需要操心底层服务器的管理。

ECS 的核心优势

  1. 完全托管:无需安装、操作或扩展容器管理基础设施,AWS 替你搞定全部运维工作

  2. 深度 AWS 集成:与 IAM(权限控制)、CloudWatch(监控日志)、Elastic Load Balancing(负载均衡)等服务无缝协作

  3. 自动扩缩:根据流量自动增加或减少运行中的容器数量

  4. 两种启动模式:可以选择无服务器的 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 分钟。

准备工作

在开始之前,确保你准备好了两样东西:

  1. 一个容器镜像:可以是 Docker Hub 上的公共镜像,也可以是推送到 Amazon ECR(Elastic Container Registry)的私有镜像

  2. 一台能联网的电脑:通过 AWS 管理控制台操作,全程不需要命令行

如果你没有自己的镜像,可以用这个测试用的公共 Nginx 镜像:nginx:latest

第一步:进入 ECS 控制台

登录 AWS 管理控制台,在顶部搜索框输入 “ECS” 并点击进入。

第二步:创建集群

在 ECS 控制台页面,点击 “创建集群”

  1. 集群模板:选择 “仅限联网”(这是 Fargate 的选项)

  2. 集群名称:输入 my-first-cluster(名字可以随你喜欢)

  3. 其他设置:保持默认即可

点击 “创建”,几秒钟后集群就创建好了。

第三步:创建任务定义

任务定义就像是“应用的安装说明书”,告诉 ECS 你的容器长什么样。

  1. 在左侧菜单点击 “任务定义”“创建新任务定义”

  2. 启动类型兼容性:选择 Fargate

  3. 任务执行角色:选择“创建新角色”或使用默认角色(用于让 ECS 从 ECR 拉取镜像)

  4. 操作系统系列:选择 Linux

  5. CPU 和内存:选择 0.25 vCPU0.5 GB(免费套餐范围内,够测试用)

  6. 在“容器”部分,点击 “添加容器”

    • 容器名称:输入 web-app

    • 镜像 URI:输入 nginx:latest(或你自己的镜像地址)

    • 端口映射:容器端口输入 80(Nginx 默认端口)

  7. 点击 “添加”,然后点击 “创建”

第四步:创建服务

现在把任务定义“跑起来”,变成一个持续运行的服务。

  1. 进入你刚创建的集群 my-first-cluster

  2. 点击 “服务” 标签页 → “创建服务”

  3. 配置服务信息:

    • 启动类型:选择 Fargate

    • 任务定义:选择你刚创建的 web-app(版本选 latest

    • 服务名称:输入 web-service

    • 任务数量:输入 1(测试阶段一台就够了)

  4. 网络配置

    • VPC:选择默认 VPC

    • 子网:选择任意一个公有子网(确保能获取公网 IP)

    • 安全组:创建新的安全组,添加入站规则——类型:HTTP,端口:80,来源:0.0.0.0/0(允许所有人访问)

  5. 负载均衡选择 “无”(先不配置,保持简单)

点击 “创建”,等待服务状态变为“正在运行”(大约需要 1-2 分钟)。

第五步:访问你的应用

服务运行后,你需要找到它的公网 IP:

  1. 在服务详情页,切换到 “任务” 标签页

  2. 点击正在运行的任务 ID

  3. 在任务详情中,找到 “公网 IP” 字段

  4. 在浏览器中访问 http://<公网IP>,你应该能看到 Nginx 的欢迎页面

🎉 恭喜!你的第一个容器化应用已经成功跑在 ECS 上了!

进阶优化:为什么需要负载均衡?

在上面的示例中,每个任务都有自己的公网 IP。如果任务重启,IP 会变化;如果有多个任务,你需要自己记住每个 IP。这在生产环境中显然不太友好。

解决方案是给服务挂一个 Application Load Balancer(ALB)

  • 稳定的访问入口:永远使用同一个 DNS 域名访问

  • 自动流量分发:ALB 会自动把请求分发给多个任务

  • 健康检查:自动剔除不健康的容器,确保服务可用

如果你想把应用真正用起来,强烈建议在创建服务时启用负载均衡。

别忘了“打扫房间”

ECS 服务运行中的任务会持续产生费用(即使在免费套餐内也有时长限制)。测试完成后,记得按顺序清理:

  1. 删除服务:在集群的“服务”标签页,选中服务,点击“删除”

  2. 删除任务定义:在“任务定义”页面,取消注册(如果不再需要)

  3. 删除集群:确认集群已无任务后,点击“删除集群”

这样才能彻底释放资源,避免产生不必要的账单。


希望这篇教程能帮你迈出 AWS 容器化实践的第一步。ECS 让容器编排变得简单直接,掌握它,你就拥有了构建现代化微服务应用的核心能力!