用途
本技能用于在 Amazon ECS 上运行容器化应用,既可使用 Fargate 无服务器计算,也可使用 EC2 启动类型。适用场景包括:将 Docker 容器部署到 AWS 而不管理服务器(Fargate);运行带服务发现和负载均衡的微服务;为容器应用设置蓝绿或滚动部署;配置容器工作负载的自动扩缩容;从 docker-compose 或 Kubernetes 迁移到 ECS;排查任务失败、健康检查或网络问题。
前提条件
- 已安装并配置 AWS CLI v2
- 已安装 Docker,用于构建和推送镜像
- IAM 权限:ecs:、ecr:、elasticloadbalancing:、logs:、iam:PassRole
- 一个用于存放容器镜像的 ECR 仓库
- 一个含子网和 ALB 的 VPC(参见 aws-vpc)
主要能力与使用方式
集群设置
使用 aws ecs create-cluster 创建集群,可启用 Container Insights,并通过 --capacity-providers FARGATE FARGATE_SPOT 与 --default-capacity-provider-strategy 配置容量提供者策略(示例权重 FARGATE 为 1、FARGATE_SPOT 为 3,base 为 2)。可用 aws ecs list-clusters 列出集群,用 aws ecs describe-clusters --include STATISTICS ATTACHMENTS 查看详情。
推送镜像到 ECR
使用 aws ecr create-repository 创建仓库,可启用 scanOnPush 和 KMS 加密。用 aws ecr get-login-password 管道到 docker login 完成认证,再 docker build、tag、push 镜像。
任务定义
以 JSON 定义任务,包含 family、networkMode(awsvpc)、requiresCompatibilities(FARGATE)、cpu、memory、executionRoleArn、taskRoleArn 以及 containerDefinitions。容器定义中可配置端口映射、环境变量、从 Secrets Manager 或 SSM 读取的 secrets、健康检查命令(如 curl -f http://localhost:8080/health)、awslogs 日志配置和 ulimits。使用 aws ecs register-task-definition 注册,用 list-task-definitions 列出修订版,用 deregister-task-definition 注销旧版本。
创建带 ALB 的服务
先创建 CloudWatch 日志组并设置保留期,再使用 aws ecs create-service 创建服务,指定集群、服务名、任务定义、期望数量、启动类型 FARGATE、平台版本、部署配置(可开启 deploymentCircuitBreaker 与 rollback,设置 maximumPercent、minimumHealthyPercent)、网络配置(私有子网、安全组、assignPublicIp)、负载均衡目标组与服务发现,并可用 --enable-execute-command 与 --propagate-tags SERVICE。
部署
滚动更新通过 aws ecs update-service 更新任务定义或 --force-new-deployment 触发;用 aws ecs describe-services 查看部署进度,用 aws ecs wait services-stable 等待稳定;用 aws ecs execute-command 进入运行中的容器调试。
自动扩缩容
用 aws application-autoscaling register-scalable-target 注册可扩缩目标并设定最小/最大容量,再 put-scaling-policy 配置目标跟踪策略,可基于 ECSServiceAverageCPUUtilization(示例目标 70%)或 ALBRequestCountPerTarget(需 ResourceLabel)扩缩,并可设置 ScaleInCooldown 与 ScaleOutCooldown。
Terraform 示例
文档提供 aws_ecs_cluster(启用 containerInsights)、aws_ecs_task_definition(含端口映射、日志、健康检查)与 aws_ecs_service(含部署断路器、网络配置、负载均衡、enable_execute_command、propagate_tags)的 Terraform 资源示例。
查看日志
使用 aws logs tail --follow 跟踪日志,用 get-log-events 获取特定任务日志,用 filter-log-events 按 ERROR 过滤。
故障排查要点
文档列出常见问题与处理方向:任务卡在 PROVISIONING(检查子网与容量提供者);任务立即失败(查看 CloudWatch 日志并先在本地运行镜像);健康检查失败(增大 startPeriod 并验证健康端点);无法拉取 ECR 镜像(为执行角色附加 AmazonECSTaskExecutionRolePolicy);服务卡在 0 运行(允许 ALB 安全组访问容器端口);exec 命令失败(确保 enableExecuteCommand 为 true 并检查任务角色);Fargate 成本高(为可容忍工作负载使用 FARGATE_SPOT);容器 OOM(提高内存并检查泄漏);部署慢(降低 minimumHealthyPercent,如设为 50%)。
限制
本资料未提供具体的收费与价格信息、平台运行环境的额外限制说明,也未给出未在上述示例中出现的功能承诺;实际使用应以 AWS 官方文档与账号权限为准。
相关技能
docker-management(容器基础)、container-registries(ECR 与镜像管理)、aws-vpc(ECS 任务网络)、aws-iam(任务与执行角色)、terraform-aws(基础设施即代码部署)。