【问题标题】:ECS service desire count get resets by Auto ScalingECS 服务需求计数通过 Auto Scaling 重置
【发布时间】:2021-01-07 14:03:33
【问题描述】:

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

当 ECS 服务具有 Auto Scaling 时,问题就开始了,如下图所示,我有 min 1desired 1max 3,如果我使用上面的 AWS CLI 命令,服务会重置大约一分钟后变为 1,并且不会停止任何任务,因为 Auto Scaling 有一个desired 1

如果我手动编辑 ECS 服务并为服务和 Auto Scaling 设置 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

我一直在想,可能的一种方法是通过 AWS CLI 删除 Auto Scaling,然后将 ECS 服务 desired 更改为 0,所以一切都会停止,然后在第二天重新创建Auto Scaling 并将 ECS 服务 desired 更新为 1

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

任何人都可以为此提出解决方案吗?谢谢。

【问题讨论】:

    标签: amazon-web-services amazon-ecs aws-fargate


    【解决方案1】:

    如果您将 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
            }
        )
    

    如果容量为零,您可以告诉 App Autoscaling 将容量缩减至零。将 DynamicScalingOutSuspended 设置为 True 时,您将禁止由 TargetTracking 策略触发的新横向扩展事件。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的意见。我明白了你的第一点。关于第二点,如果我在服务中将desired-count 设置为0,它将被重置为1,我认为这是从ASG 中提取/检查值,然后如果我将其设置为@987654326 @ 在 ASG 中,它将再次重置为 1,因为我相信它正在从服务中提取价值,这有什么意义吗?我可以手动执行服务/ASG 操作并将两者都设置为0,但是我无法使用 AWS CLI 来执行此操作。
      • 自动伸缩组未从 ECS 服务设置中拉取。我认为您定义了一些自动缩放规则来更新值。您的“App Scale Up”和“App Scale Down”规则是什么?
      • 我有这个目标跟踪策略:{ "TargetValue": 75.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60 }跨度>
      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 2019-06-21
      • 2019-04-10
      • 2019-08-22
      • 2021-12-30
      • 2015-10-05
      • 2021-07-16
      • 2021-12-11
      相关资源
      最近更新 更多