You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用boto3更新Amazon ECS desiredCount后running count未生效问题

问题根因

你配置的部署参数直接导致扩容流程卡死:

  • 当deploymentConfiguration中设置minimumHealthyPercent=100、maximumPercent=101时,ECS的滚动部署/扩容逻辑要求服务全程保持100%期望数量的健康任务,同时最多仅允许额外启动1%的任务用于新旧替换。
  • 按你设置的desiredCount=5计算:服务最大允许运行的任务数为5 * 101% = 5.05,向下取整为5;同时要求必须先有5个健康任务,才能触发任务替换/新增流程。但你当前服务仅运行1个健康任务,既达不到100%健康的基线要求,也没有多余的任务配额启动新实例,最终会一直停留在1个运行任务的状态。
排查验证步骤
  • 打开ECS控制台对应服务的Events标签页,能看到类似unable to place tasks because minimum healthy percent requirement is violated的报错,和上述逻辑完全匹配。
  • 核对集群内EC2容器实例的剩余资源:确认CPU、内存、服务需要占用的主机端口是否足够支撑5个任务并发运行,资源不足也会导致任务放置失败。
  • 检查执行boto3调用的EC2实例绑定的IAM角色权限,确认角色拥有ecs:UpdateService的完整操作权限,不存在权限边界导致参数未实际生效的问题。
  • 如果服务配置了ECS Service Auto Scaling,检查伸缩规则是否在手动调整后将期望任务数重置为1,部分冷却期内的伸缩策略会覆盖手动配置的参数。
修复方案

调整部署配置参数,给扩容留出足够的冗余配额,EC2启动类型的服务可参考如下配置:

update_service = client.update_service(
    service=service,
    cluster=response['clusterArns'][0],
    desiredCount=5,
    deploymentConfiguration={
        'maximumPercent': 200,
        'minimumHealthyPercent': 50
    },
    forceNewDeployment=True
)
  • 如果你需要服务在部署/扩容全程保持100%容量在线,可保留minimumHealthyPercent=100,但必须将maximumPercent调整为200,这样ECS可以先启动满5个新任务,等所有新任务健康检查通过后再终止旧任务,不会出现配额锁死的问题。
  • 提交配置更新后等待1-2分钟,观察服务运行任务数变化,如果Events页出现资源不足的任务放置报错,给ECS集群新增对应规格的EC2计算实例即可。

补充:如果更新后配置仍未生效,可先调用describe_services接口核对返回的服务配置参数,确认boto3调用确实已经将desiredCount和部署配置更新到你设置的值,排除传参错误(比如cluster、service名称传错导致更新到其他服务)的问题。

内容的提问来源于stack exchange,提问作者Zaid Abdalkarim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:15:45