如何在 Fargate 上配置 Amazon ECS 服务自动扩缩?

2 分钟阅读
0

我想在 AWS Fargate 上配置 Amazon Elastic Container Service(Amazon ECS)服务自动扩缩。

简短描述

要增加或减少任务计数,请将 Fargate 上的 Amazon ECS 与 Amazon CloudWatch 告警和 AWS 应用程序自动扩缩集成。然后,您可以使用 CloudWatch 指标来配置 CloudWatch 告警。

当您的 CloudWatch 告警启动自动扩缩时,应用程序自动扩缩使用配置的扩缩策略来确定新的计数值。然后,应用程序自动扩缩使用新的计数值向 Amazon ECS 调用 UpdateService API。Amazon ECS 服务计划程序启动或关闭任务以满足新的计数值。在新的计数值和运行的计数值相同之前,您的扩缩活动将保持在 InProgress 状态。

解决方法

**注意:**访问服务自动扩缩设置的 AWS Identity and Access Management(IAM)用户必须拥有支持动态扩缩的服务的相应权限。有关更多信息,请参阅 Amazon ECS 服务自动扩缩所需的 IAM 权限

Amazon ECS 控制台

要在 Fargate 上配置 Amazon ECS 服务自动扩缩,请使用 Amazon ECS 控制台配置服务自动扩缩。然后,将扩缩策略添加到该服务。

配置服务自动扩缩

在 Amazon ECS 控制台中创建更新服务时,在服务自动扩缩下完成以下操作:

  1. 选择使用服务自动扩缩选项。
  2. 最小任务数中,输入您希望服务自动扩缩使用的最小任务数。
  3. 最大任务数中,输入您希望服务自动扩缩使用的最大任务数。
    **注意:**最小和最大任务数是您服务的硬性限制。

向服务添加扩缩策略

根据您的要求,选择目标跟踪策略或步进扩缩策略:

  • 目标跟踪政策: 完成目标跟踪扩缩策略要使用 Amazon ECS 控制台为 Amazon ECS 服务配置目标扩缩策略下的步骤。
  • 步进扩缩策略: 完成步进扩缩策略要使用 Amazon ECS 控制台为 Amazon ECS 服务配置步进扩缩策略下的步骤。

AWS CLI

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,确保您使用的是最新版本的 AWS CLI

要在 Fargate 上配置 Amazon ECS 服务自动扩缩,请使用 AWS CLI 配置服务自动扩缩。然后,创建目标跟踪或步进扩缩策略,根据您设置的值进行扩缩。

配置服务自动扩缩

要将您的 Fargate 服务注册为应用程序自动扩缩的可扩缩目标,请运行以下命令:

aws application-autoscaling register-scalable-target \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<service-name> \
--min-capacity 1 --max-capacity 10 --region us-east-1

创建目标跟踪或步进扩缩策略

为可扩缩目标创建目标跟踪或步进扩缩策略。在以下示例中,您的 Fargate 服务是可扩缩目标。

目标跟踪策略:

aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<service-name> \
--policy-name Test-target-tracking-scaling-policy --policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{ "TargetValue": 75.0, "PredefinedMetricSpecification": {"PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleOutCooldown": 60,"ScaleInCooldown": 60}'

**注意:**创建目标跟踪策略时,应用程序自动扩缩会根据您选择的目标值创建 CloudWatch 告警以进行扩缩操作。

步进扩缩策略:

  1. 为您的横向扩展活动创建包含所需步骤调整的步进扩缩策略:

    aws application-autoscaling put-scaling-policy \
    --service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
    --resource-id service/<cluster>/<service-name> \
    --policy-name Test-Step-scaling-policy-ScaleOut --policy-type StepScaling \
    --step-scaling-policy-configuration '{"AdjustmentType": "ExactCapacity","StepAdjustments": [ { "MetricIntervalLowerBound": 20, "ScalingAdjustment": 10}, { "MetricIntervalLowerBound": 0, "MetricIntervalUpperBound": 20,"ScalingAdjustment": 5}],"Cooldown": 60, "MetricAggregationType": "Average"}'
  2. 将扩缩策略作为告警操作关联到 CloudWatch 告警:

    aws cloudwatch put-metric-alarm \
    --alarm-name Test-ScaleOut --metric-name MemoryUtilization \
    --namespace AWS/ECS --statistic Average --period 60 --threshold 60 \
    --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --datapoints-to-alarm 1 \
    --dimensions Name=ClusterName,Value=<cluster> Name=ServiceName,Value=<service-name> --unit Percent \
    --alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"
  3. 重复上述步骤,为横向缩减创建第二个步骤扩缩策略和 CloudWatch 告警。

**注意:**当 CloudWatch 横向扩展时,CloudWatch 启动的所有横向缩减活动都将被冻结,直到横向扩展活动完成。当 Amazon ECS 未达到应用程序自动扩缩设置中配置好的计数值时,InProgress 横向扩展活动会超时。超时的常见原因包括映像问题或网络问题。在横向扩展处于冷却时间且某个横向扩展活动完成时,如果 CloudWatch 指标开始横向缩减,则会执行横向缩减活动。

相关信息

对 Amazon ECS 中的服务自动扩缩进行故障排除

自动扩展 Amazon ECS 服务

DescribeScalingActivities

application-autoscaling

AWS 官方
AWS 官方已更新 1 年前