如何在 Fargate 上配置 Amazon ECS 服务 Auto Scaling?
我想在 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。
解决方案
**注意:**访问服务 Auto Scaling 设置的 IAM 用户必须对支持动态扩展的服务具有相应的权限。如需了解详情,请参阅服务弹性伸缩所需的 IAM 权限。
为您的 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 警报。
- 可以使用 ECSServiceAverageCPUUtilization、ECSServiceAverageMemoryUtilization 和 ALBRequestCountPerTarget Amazon ECS 服务指标进行目标跟踪。
- 目标跟踪策略根据您定义的指标和目标值计算扩展调整(即所需的任务数)。您无需像使用分步扩展策略那样配置扩展操作。这是因为目标跟踪策略会根据需要增加或移除容量,以使指标保持或接近指定的目标值。
- 您必须选择扩展或缩减冷却期。
对于分步扩展策略:
- 可以为任何指标创建或使用现有 CloudWatch 警报,以进行分步扩展。
- 必须选择扩展操作或分步调整,例如 ScalingAdjustment、MetricIntervalUpperBound 和 MetricIntervalLowerBound。
- 可以将扩展调整类型指定为可扩展目标当前容量的百分比,也可以使用绝对数字来指定扩展容量。
- 可以创建扩展策略以处理扩展和缩减活动,从而增加或减少所需的任务数。
**注意:**有关详细信息,请参阅步骤 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 指标触发了缩减活动,但扩展活动已完成,则缩减活动会正常运行。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 3 年前