如何在 Fargate 上配置 Amazon ECS 服务 Auto Scaling?

上次更新日期:2021 年 4 月 6 日

我想在 AWS Fargate 上配置 Amazon Elastic Container Service (Amazon ECS) 服务 Auto Scaling。

简短描述

通过将 Fargate 上的 Amazon ECS 与 Amazon CloudWatch 警报和应用程序 Auto Scaling 集成,可以增加或减少所需的任务数。然后,可以使用 CloudWatch 指标来配置 CloudWatch 警报。

当您的 CloudWatch 警报触发 Auto Scaling 策略时,应用程序 Auto Scaling 将根据配置的扩展策略决定新的所需任务数。然后,应用程序 Auto Scaling 会使用新的所需任务数对 Amazon ECS 进行 UpdateService API 调用。Amazon ECS 服务计划程序启动或关闭任务以满足新的所需任务数。在所需任务数和运行计数相同之前,您的扩展活动会一直处于 InProgress 状态。

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您使用的是最新版的 AWS CLI

解决方法

为您的 Fargate 服务配置服务 Auto Scaling

在 Amazon ECS 控制台中创建更新服务时,请从设置 Auto Scaling 页面中选择以下选项:

1.    选择配置服务 Auto Scaling 以调整服务的所需任务数

2.    对于最小任务数,请输入希望服务 Auto Scaling 使用的最小任务数。

3.    对于所需的任务数,请输入希望服务 Auto Scaling 使用的任务数。

注意:所需的任务数必须在最小和最大任务数的范围内。

4.    对于最大任务数,请输入希望 Service Auto Scaling 使用的最大任务数。

注意:最小和最大任务数是服务的硬限制。

5.    对于面向服务 Auto Scaling 的 IAM 角色,请选择 ecsAutoScaleRole

注意:如果此角色不存在,请选择创建新角色以让控制台为您创建角色。

6.    在自动任务扩展策略略部分中,选择 Auto Scaling 策略

7.    完成安装向导中的其余步骤以创建或更新服务。

选择扩展策略

根据您的要求和以下注意事项选择目标跟踪策略或分步扩展策略

对于目标跟踪策略:

  • 必须根据指定的指标定义目标值(阈值)。应用程序 Auto Scaling 创建和管理触发扩展策略的 CloudWatch 警报。
  • 可以使用 ECSServiceAverageCPUUtilizationECSServiceAverageMemoryUtilizationALBRequestCountPerTarget Amazon ECS 服务指标进行目标跟踪。
  • 目标跟踪策略根据您定义的指标和目标值计算扩展调整(即所需的任务数)。您无需像使用分步扩展策略那样配置扩展操作。这是因为目标跟踪策略会根据需要增加或移除容量,以使指标保持或接近指定的目标值。
  • 您必须选择扩展或缩减冷却期

对于分步扩展策略:

  • 可以为任何指标创建或使用现有 CloudWatch 警报,以进行分步扩展。
  • 必须选择扩展操作或分步调整,例如 ScalingAdjustmentMetricIntervalUpperBoundMetricIntervalLowerBound
  • 可以将扩展调整类型指定为可扩展目标当前容量的百分比,也可以使用绝对数字来指定扩展容量。
  • 可以创建扩展策略以处理扩展和缩减活动,从而增加或减少所需的任务数。

注意:有关详细信息,请参阅步骤 5:将服务配置为使用服务 Auto Scaling

使用 AWS CLI 配置服务 Auto Scaling

1.    使用应用程序 Auto Scaling 将 Fargate 服务注册为可扩展目标:

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

2.    为可扩展目标(即 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}'

注意:创建目标跟踪策略时,应用程序 Auto Scaling 会根据您选择的目标值(阈值)创建 CloudWatch 警报以进行缩减和扩展。

分步扩展策略:

1.    使用所需分步调整创建分步扩展策略:

aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-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.    将步骤 1 中的扩展策略作为警报操作关联到新的或现有的 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=your-cluster Name=ServiceName,Value=your-service-name --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"

3.    为缩减活动创建另一个分步扩展策略和 CloudWatch 警报。

注意:服务的扩展活动进行期间,由 CloudWatch 指标触发的任何缩减活动都将被阻止,直到扩展活动完成。当 Amazon ECS 未达到 Auto Scaling 设置的预期任务数时,InProgress 扩展活动会超时。超时可能有各种原因,例如图像或联网问题。如果在扩展冷却期间 CloudWatch 指标触发了缩减活动,但扩展活动已完成,则缩减活动会正常运行。