跳至内容

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

2 分钟阅读
0

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

解决方案

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

当 Amazon CloudWatch 警报启动自动扩缩时,应用程序自动扩缩会使用您的扩缩策略来确定新的预期数量。然后,应用程序自动扩缩会使用新的 desiredCount 参数值启动对 Amazon ECS 的 UpdateService API 调用。Amazon ECS 服务计划程序会启动或停止任务以匹配新的预期数量。在新的预期数量与运行数量一致之前,您的扩缩活动将保持在 InProgress 状态。

您可以使用 Amazon ECS 控制台或 AWS CLI 在 Fargate 上配置 Amazon ECS 自动扩缩。配置服务自动扩缩设置的 AWS Identity and Access Management (IAM) 用户必须拥有支持动态扩缩的服务的权限。有关详细信息,请参阅 Amazon ECS 服务自动扩缩所需的 IAM 权限

使用 Amazon ECS 控制台

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 选择 Service auto scaling(服务自动扩缩),然后选择 Use service auto scaling(使用服务自动扩缩)选项。
  3. 为服务自动扩缩输入以下值:
    对于 Minimum number of tasks(最小任务数),输入任务的最低数量。
    对于 Maximum number of tasks(最大任务数),输入任务的最高数量。
    **注意:**预期数量不低于最小值或高于最大值。
  4. 创建目标跟踪扩缩策略,或创建步进扩缩策略以添加到 Amazon ECS。

使用 AWS CLI

运行以下 register-scalable-target 命令,以将 Fargate 注册为应用程序自动扩缩的可扩缩目标:

aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--min-capacity 1 --max-capacity 10 --region REGION

**注意:**请将 CLUSTER_NAME 替换为您的集群,将 SERVICE_NAME 替换为您的服务,将 REGION 替换为您的 AWS 区域。

然后,运行 put-scaling-policy 命令,为作为可扩缩目标的 Fargate 创建目标跟踪扩缩策略或步进扩缩策略。在命令中,包含您创建的 JSON 文件。

目标跟踪扩缩策略的命令示例:

aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/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}'

**注意:**请将 CLUSTER_NAME 替换为您的集群,将 SERVICE_NAME 替换为您的服务,将 REGION 替换为您的区域。应用程序自动扩缩会根据您的目标值创建 CloudWatch 警报以触发扩缩。

步进扩缩策略的命令示例:

aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/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"}'

**注意:**请将 CLUSTER_NAME 替换为您的集群,将 SERVICE_NAME 替换为您的服务,将 REGION 替换为您的区域。

如果您创建了步进扩缩策略,请运行以下 put-metric-alarm 命令将您的扩缩策略添加到 CloudWatch 警报中。然后,重复上述步骤,为扩缩活动创建第二个步进扩缩策略和 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 Name=ServiceName,Value=SERVICE_NAME --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"

**注意:**请将 CLUSTER_NAME 替换为您的集群,将 SERVICE_NAME 替换为您的服务,将 REGION 替换为您的区域。

在横向扩展完成之前,应用程序自动扩缩会阻止横向扩展活动期间的所有横向缩减活动。如果未达到您配置的数量,Amazon ECS 会让 InProgress 横向扩展活动超时。超时原因包括映像问题或网络问题。在横向扩展处于冷却时间且横向扩展活动完成时,如果 CloudWatch 指标横向缩减,则应用程序自动扩缩会执行横向缩减活动。

相关信息

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

自动扩缩 Amazon ECS 服务

DescribeScalingActivities

application-autoscaling