AWS ECS服务垂直扩缩容及部署顺序配置技术咨询
问题解答
1. 内存需求降低时的缩容实现
可以实现缩容,基于你选定的CloudWatch + SNS + Lambda方案,具体步骤如下:
- 配置CloudWatch低阈值告警:针对ECS服务的
MemoryUtilization指标设置低阈值告警,例如当内存使用率持续5分钟低于30%时触发告警。 - 关联SNS与Lambda:将该告警的通知目标设为你的SNS主题,再让Lambda订阅这个主题。
- 编写Lambda逻辑:在Lambda函数中调用ECS的
UpdateServiceAPI,将服务的desiredCount参数调低(比如从3降到2)。 - 关键注意事项:
- 设置合理的阈值和持续时间,避免因指标波动导致频繁缩放(即“缩放抖动”)。
- 提前定义服务的最小运行实例数(比如至少1个),防止缩容到0导致服务完全不可用。
2. 先关闭旧服务再启动新服务的配置
可以实现这种部署顺序,核心是调整ECS的部署策略并确保应用支持优雅关闭:
- 实现应用优雅关闭:
- 在ECS任务定义中设置
stopTimeout参数(比如300秒),给应用足够的时间处理缓存回写。 - 改造应用,使其能监听ECS发送的
SIGTERM信号:收到信号后立即停止接收新请求,将内存中的缓存数据批量写入数据库,完成后再主动退出。
- 在ECS任务定义中设置
- 调整ECS部署配置:
- 进入ECS服务的部署配置,将
minimumHealthyPercent设为0,maximumPercent设为100。这样ECS在更新服务时,会先逐步停止旧实例,确认旧实例完全停止后,再启动新实例。 - 如果是通过Lambda自定义控制更新流程,可在Lambda中先调用
UpdateService将desiredCount降至目标缩减后的数值,通过DescribeServicesAPI检查旧实例全部停止后,再将desiredCount调回原数值并指定新的任务定义。
- 进入ECS服务的部署配置,将
- 注意:这种部署方式会导致服务存在短暂的不可用窗口,需确认你的业务场景允许这种 downtime。
内容的提问来源于stack exchange,提问作者Moravas
相关产品推荐
相关产品推荐

