ECS 服务需求计数通过 Auto Scaling 重置

far*_*332 6 amazon-web-services amazon-ecs aws-fargate

我想每天停止我的 ECS Fargate 测试环境,对我来说最好的选择就是修改 ECS 服务,将期望计数设置为零,如下所示aws ecs update-service --cluster COOL --service blablabla --desired-count 0,这样任何运行的任务都会在几分钟内耗尽,如果我有的话,它就可以正常工作不是自动缩放。

当 ECS 服务具有 Auto Scaling 时,问题就会开始,如下图所示,min 1如果desired 1max 3使用上面的 AWS CLI 命令,服务会在一分钟左右后重置为 1,并且不会执行任何任务由于 Auto Scaling 具有desired 1.

如果我手动编辑 ECS 服务并设置desired 0服务和 Auto Scaling(当然min 0也包括 Auto Scaling),我可以停止任何正在运行的任务。

我尝试使用下面的命令进行自动缩放,希望我可以更改desired但它不可用。

aws application-autoscaling register-scalable-target \
    --service-namespace ecs \
    --scalable-dimension ecs:service:DesiredCount \
    --resource-id service/COOL/blablabla \
    --min-capacity 1 \
    --max-capacity 3
Run Code Online (Sandbox Code Playgroud)

我一直在想,也许有一种方法可以做到这一点,就是通过 AWS CLI 删除 Auto Scaling,然后将 ECS 服务更改desired0,这样一切都会停止,然后第二天重新创建 Auto Scaling 并将 ECS 服务更新desired1

总而言之,我每天都想停止/启动我的 ECS Fargate 测试环境,到目前为止编辑 ECS 服务适合我,但 Auto Scaling 中断了此操作。

有人可以为此提出解决方案吗?谢谢。

在此输入图像描述

小智 7

如果您将 ECS 与应用程序自动扩展结合使用,则无需更改与服务相关的任务数以及与自动扩展选项相关的所需任务数。一旦触发自动扩展策略,这两个值都将被替换。相反,您必须调整策略本身(python SDK):

    response = app_autoscaling.register_scalable_target(
        ServiceNamespace='ecs',
        ResourceId=f"service/{ECS_CLUSTER_NAME}/{ECS_SERVICE_NAME}",
        ScalableDimension='ecs:service:DesiredCount',
        MinCapacity=0,
        MaxCapacity=0,
        SuspendedState={
            'DynamicScalingInSuspended': False,
            'DynamicScalingOutSuspended': True,
            'ScheduledScalingSuspended': True
        }
    )
Run Code Online (Sandbox Code Playgroud)

当容量为零时,您可以告诉应用程序自动缩放将容量缩小到零。将 DynamicScalingOutSuspished 设置为 True 后,您将禁止 TargetTracking 策略触发新的横向扩展事件。

要恢复更改,只需将零替换为所需容量并将暂停选项设置为 false(以允许进一步扩展)。


Mar*_*k B 1

我将其称为“按预期工作”。如果启用了自动缩放,则无法像这样手动设置任务计数。如果您想每天关闭服务,您有两种选择:

  • ECS服务不要使用自动伸缩,desired-count直接继续设置。
  • 不要desired-count直接更新,与自动缩放组冲突,而是更新自动缩放配置并让它处理将服务缩减到 0 个任务。