最小任务数,ECS

时间:2018-10-23 22:29:40

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

我想知道是否可以通过任何方式更新此字段“ 最小任务数”(无论语言如何,如果在lambda中可用)

为什么?因为我链接到该服务的平衡器出现问题。

从NodeJS SDK中,我可以更改所需的任务字段,这很好,但是 Cloudwatch中的警报使创建的任务停止了

我看到的是我必须更新两者,以免它们停下来。

如何在ecs上的群集服务中编辑此字段?

4 个答案:

答案 0 :(得分:1)

检查ApplicationAutoScaling类。我对这个特定的SDK不熟悉,但是应用程序自动缩放是在boto3和awscli中定义最小和最大任务的地方。

答案 1 :(得分:1)

从此link获取参考,您必须使用application auto-scaling boto3 client分两步来完成:

  1. 使用register_scalable_target()(例如MinCapacity=3MaxCapacity=100)将ECS服务创建为应用程序自动扩展目标。该调用将返回可扩展的目标ARN。
  2. 每天晚上都以MinCapacity = 0再次致电register_scalable_target(),每个工作日早晨都以MinCapacity=3致电。

请参阅register_scalable_target()文档,其中明确指出:

注册可扩展目标后,可以使用此目标 用于更新其可伸缩性的最小值和最大值的操作 尺寸。

您的自动缩放策略将在Min / MaxCapacity边界内设置DesiredCapacity,在此范围内,MinCapacity在工作时间内将从0变为3,在下班后变为0。

答案 2 :(得分:0)

您可以使用部署配置来完成。我在下面提到了aws-cli和boto3示例。

aws-cli

aws ecs update-service --service my-http-service --deployment-configuration maximumPercent=10,minimumHealthyPercent=5 [1]

参考:https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html [1]

boto3

response = client.update_service(
    cluster='string',
    service='string',
    desiredCount=123,
    taskDefinition='string',
    deploymentConfiguration={
        'maximumPercent': 123,
        'minimumHealthyPercent': 123
    },
    networkConfiguration={
        'awsvpcConfiguration': {
            'subnets': [
                'string',
            ],
            'securityGroups': [
                'string',
            ],
            'assignPublicIp': 'ENABLED'|'DISABLED'
        }
    },
    platformVersion='string',
    forceNewDeployment=True|False,
    healthCheckGracePeriodSeconds=123
)

参考:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs.html#ECS.Client.update_service

答案 3 :(得分:0)

要更新可扩展目标,请指定要更改的参数。包括标识可扩展目标的参数:资源ID,可扩展维度和名称空间。此更新请求不会更改您未指定的任何参数。

https://docs.aws.amazon.com/sdk-for-go/api/service/applicationautoscaling/#ApplicationAutoScaling.RegisterScalableTarget

此golang示例显示了如何更新ECS服务的最小任务数(最小容量):

import (
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/applicationautoscaling"
)

sess, _ := session.NewSession()
aas := applicationautoscaling.New(sess)

res, err := aas.RegisterScalableTarget(
    &applicationautoscaling.RegisterScalableTargetInput{
        MinCapacity: aws.Int64(int64(5)),
        ServiceNamespace: aws.String("ecs"),
        ResourceId: aws.String("service/cluster_name/service_name"),
        ScalableDimension: aws.String("ecs:service:DesiredCount"),
    },
)