SuperAPI AI 工具集

ecs

部署与运维

查看项目

更新于 10-15 12:05

技能介绍

用途

AWS ECS(Amazon Elastic Container Service)是一项全托管的容器编排服务,用于运行 Docker 容器。它支持两种启动类型:AWS Fargate(无服务器,按任务付费)和 EC2(自管理实例,适用于 GPU、Windows 或特定需求场景)。该技能面向需要部署容器化应用、配置任务定义、搭建服务与扩缩容的开发者与运维人员。

核心概念

  • 集群(Cluster):任务或服务的逻辑分组,可同时包含 Fargate 任务和 EC2 实例。
  • 任务定义(Task Definition):应用的蓝图,定义容器、资源、网络和 IAM 角色。
  • 任务(Task):任务定义的运行实例,可独立运行或作为服务的一部分。
  • 服务(Service):维持期望的任务数量,处理部署、负载均衡和自动扩缩容。
  • 启动类型:Fargate(无服务器,按任务付费,适用于大多数工作负载)或 EC2(自管理实例,适用于 GPU、Windows 等特定需求)。

主要能力与常见模式

文档提供了完整的 AWS CLI 操作示例,包括:

  • 创建 Fargate 集群:支持配置容量提供者(FARGATE、FARGATE_SPOT)及默认容量提供者策略。
  • 注册任务定义:以 JSON 文件定义 family、networkMode、CPU/内存、执行角色与任务角色、容器定义(镜像、端口映射、环境变量、Secrets Manager 密钥、awslogs 日志配置、健康检查)。
  • 创建带负载均衡的服务:指定集群、服务名、任务定义、期望数量、启动类型、网络配置(子网、安全组、公网 IP)、负载均衡目标组、健康检查宽限期和部署断路器。
  • 运行独立任务:用于批处理等一次性任务。
  • 更新服务部署新镜像:注册新任务定义版本后更新服务并强制新部署。
  • Fargate Spot 与基于 SQS 的扩缩容:使用 FARGATE_SPOT 处理批处理/队列工作负载以降低成本(约 70%),并始终保留常规 FARGATE 作为回退;通过 Application Auto Scaling 注册可扩缩目标(可缩容到 0),配合 CloudWatch 告警实现基于队列深度的扩缩容;还介绍了 AWS 推荐的“每任务积压量”目标追踪策略(需 Container Insights,且无法从 0 扩缩容)。
  • 保护进行中的工作:worker 在处理时设置任务保护(ProtectionEnabled=true),完成后清除,避免缩容中断任务;任务角色需具备 ecs:GetTaskProtection 和 ecs:UpdateTaskProtection 权限,仅适用于服务任务。
  • Fargate Spot 中断处理:Spot 任务在终止前 2 分钟收到 SIGTERM,应用需捕获以实现优雅关闭;SQS 消费者应调用 ChangeMessageVisibility 让进行中的消息返回队列。
  • 自动扩缩容:注册可扩缩目标并配置目标追踪策略(如基于 ECSServiceAverageCPUUtilization,目标值 70.0,含扩缩容冷却时间);还介绍了使用 20 秒高分辨率指标加快扩缩容的方法(需启用高分辨率服务指标,不支持 CODE_DEPLOY/EXTERNAL 部署控制器,会产生额外 CloudWatch 费用)。

使用方式

文档以 AWS CLI 命令为主要操作方式,涵盖集群管理(create-cluster、describe-clusters、list-clusters、delete-cluster)、任务定义(register-task-definition、describe-task-definition、list-task-definitions、deregister-task-definition)、服务(create-service、update-service、describe-services、delete-service)和任务(run-task、stop-task、describe-tasks、list-tasks)。

最佳实践

  • 安全:使用任务角色访问 AWS API(而非访问密钥),使用执行角色访问 ECR/Secrets,将密钥存储在 Secrets Manager 或 Parameter Store,使用带 NAT 网关的私有子网,启用 CloudTrail 审计 API,通过 IAM 条件键(ecs:task-cpu / ecs:task-memory)限制任务规模。
  • 性能:合理配置 CPU/内存并监控调整,对容错工作负载使用 Fargate Spot(节省约 70%),启用 Container Insights 监控,使用服务发现进行内部通信。
  • 可靠性:跨多个可用区部署,正确配置健康检查,设置合适的注销延迟,使用部署断路器(可配置阈值、resetOnHealthyTask、早期成功标准等)。
  • 成本优化:批处理使用 Fargate Spot,合理配置任务资源,不需要时缩容到 0,使用容量提供者混合 Fargate/Spot。

适用场景

适用于在 AWS 上部署和运行容器化应用、配置任务定义与服务、实现自动扩缩容、使用 Fargate Spot 降低成本、以及排查 ECS 任务与服务问题的场景。

限制与注意事项

  • Fargate Spot 任务会在终止前 2 分钟收到 SIGTERM,需应用自行处理优雅关闭。
  • “每任务积压量”目标追踪策略需要 Container Insights,且在运行任务数为 0 时无法扩缩容。
  • 高分辨率指标不支持 CODE_DEPLOY/EXTERNAL 部署控制器,且产生额外 CloudWatch 费用。
  • 任务保护仅适用于服务任务。
  • EC2 启动类型需迁移到 Amazon Linux 2023 ECS 优化 AMI(AL2 ECS 优化 AMI 于 2026 年 6 月 30 日终止支持)。
  • Fargate 平台版本 1.3.0 已于 2026 年 6 月 15 日弃用,应使用 LATEST 或 1.4.0。
  • ECS Exec 需要服务启用 enableExecuteCommand 且容器镜像包含 SSM agent,任务角色需具备 ssmmessages 相关权限。
  • Action Logs 需按集群选择启用,按 CloudWatch vended logs 计费。

故障排查

文档涵盖任务启动失败(镜像未找到、密钥访问被拒、网络配置、资源超限)、容器反复重启(健康检查失败、应用崩溃、内存不足)、使用 ECS Exec 实时调试、服务部署卡住(新任务健康检查失败、容量不足、目标组健康检查失败)以及 Action Logs(记录 ECS 在部署期间的操作,保留失败元数据超过 1 小时的已停止任务保留期)。