AWS Fargate
专为容器运行设计的无服务器计算引擎,无需管理 EC2 实例即可在 ECS 或 EKS 上直接运行容器
概述
AWS Fargate 是与 Amazon ECS 和 Amazon EKS 协同工作的无服务器计算引擎。传统容器运维需要自行管理运行容器的 EC2 实例集群,而使用 Fargate 可将基础设施管理完全委托给 AWS。开发者只需指定容器镜像、CPU/内存需求和网络配置,Fargate 即自动分配适当的计算资源并执行。按任务粒度的按量计费制,基于 vCPU 和内存使用量按秒计费。无需 OS 补丁和扩缩容管理,可大幅降低运维负担。
与 EC2 启动类型的分工及 Fargate 的隔离模型
在 ECS 中运行容器时有 EC2 启动类型和 Fargate 启动类型两种选择。EC2 启动类型需自行构建和管理 EC2 实例集群,在其上部署容器,需要实例类型选择、容量规划、OS 补丁、扩缩容设置等运维工作。而 Fargate 则完全不需要这些工作。Fargate 根据任务定义中指定的 CPU 和内存需求,自动配置隔离的计算环境。每个任务在独立内核的 microVM 上运行,即使在多租户环境中也能确保安全性。Azure Container Instances (ACI) 同样可以无服务器方式运行容器,但 Fargate 同时支持 ECS 和 EKS,可以无服务器方式运行 Kubernetes 工作负载,这是与 ACI 的主要区别。
Fargate Spot 与任务级成本优化
Fargate 的费用由 vCPU 每小时单价和 GB 每小时单价组合按秒计费。使用 Fargate Spot 可享受最高 70% 的折扣,但 AWS 回收容量时任务可能被中断。因此 Fargate Spot 适用于批处理、数据转换、CI/CD 构建作业等可容忍中断的工作负载。实务中常见的做法是在 ECS 服务的容量提供程序策略中设置 Fargate 和 Fargate Spot 的比例,基线任务用普通 Fargate 稳定运行,峰值部分用 Fargate Spot 吸收。在任务定义中合理设置 CPU 和内存组合也是成本优化的关键,过度的资源分配直接导致成本增加。技术书籍 (Amazon) 可学习容器运维最佳实践。
网络设计与生产环境的混合架构
Fargate 任务必须使用 awsvpc 网络模式,每个任务分配一个 ENI (Elastic Network Interface)。这使得每个任务拥有私有 IP 地址并可直接应用安全组,实现对 VPC 内资源的精细访问控制。另一方面,ENI 数量受子网 IP 地址空间限制,大量任务运行时需注意子网 CIDR 设计。需要 GPU 的工作负载、依赖特定实例类型的处理、或追求极致成本效率的大规模集群,EC2 启动类型可能更合适。实务中,开发/预发布环境用 Fargate 降低运维负担,生产环境的大规模工作负载用 EC2 启动类型优化成本的混合架构也很常见。将微服务的各服务作为独立任务运行,通过服务发现 (Cloud Map) 相互名称解析,是 Fargate 的典型活用模式。