Amazon ECS 推出自动回滚功能
Amazon 最近为其 Amazon ECS 服务推出了原生支持自动回滚的功能。该功能利用 Amazon CloudWatch 指标警报来监控部署过程,并在必要时回滚正在进行的部署。此功能支持使用 CloudWatch Container Insights 为 Amazon ECS 收集的任何系统指标以及自定义指标。
功能概述
- 监控与回滚机制:在创建或更新 Amazon ECS 服务时,可以配置一个或多个 CloudWatch 指标警报,以确定部署是否成功。在滚动更新期间,一旦更新后的服务中有任务在运行,Amazon ECS 就会开始监控配置的 CloudWatch 警报。
- 部署状态:新的任务构成主要部署(Primary Deployment),而之前的任务称为活动部署(Active Deployment)。如果没有配置警报,当主要部署健康且达到所需数量,且活动部署数量为零时,滚动更新完成。如果配置了警报,部署会继续一段称为“烘焙时间”(Bake Time)的额外时间。
- 烘焙时间:烘焙时间根据 CloudWatch 警报属性自动计算。在烘焙时间结束时,如果没有触发任何警报且服务保持正常状态,则部署被视为成功。如果触发了一个或多个警报,则会启动自动回滚。
- 回滚过程:触发回滚后,会通过事件总线发送通知,当前部署状态设置为
FAILED,活动部署将重新提升为主要部署,并扩展到所需数量。失败的部署将被缩减并删除。
配置方法
创建警报:可以通过 AWS 控制台、AWS CloudFormation 或 CLI 创建警报。例如,使用
create-service命令创建一个带有部署警报的 Linux 服务:aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 2 \ --deployment-configuration "alarms={alarmNames=[alarm1Name,alarm2Name],enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-os LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"- 自定义指标:可以使用 CloudWatch Container Insights 收集的系统指标,也可以通过 Prometheus 客户端库或 OpenTelemetry SDK 使用自定义指标。
推荐指标
- 应用负载均衡器:建议使用
HTTPCode_ELB_5XX_Count和HTTPCode_ELB_4XX_Count指标来检查 HTTP 错误代码的峰值。 - 现有应用:可以使用
CPUUtilization和MemoryUtilization指标来监控 CPU 和内存的消耗。
支持与反馈
- 支持范围:Amazon CloudWatch 警报仅支持使用滚动更新部署控制器的 Amazon ECS 服务。
- 反馈渠道:该功能已全面可用,用户可以在 GitHub 上的 容器公共路线图 提交问题或反馈。
总结
Amazon ECS 的自动回滚功能通过 CloudWatch 指标警报提供了一种可靠的部署监控和回滚机制,确保在部署出现问题时能够及时回滚,保障服务的稳定性和可用性。用户可以通过多种方式配置警报,并利用系统或自定义指标进行监控。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。