服务自动扩展 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

服务自动扩展

Automatic scaling 是指自动增加或减少 Amazon ECS 服务中所需任务数的功能。Amazon ECS 利用 Application Auto Scaling 服务来提供此功能。有关更多信息,请参阅 Application Auto Scaling 用户指南

Amazon ECS 发布 CloudWatch 指标与服务的平均 CPU 和内存使用率。有关更多信息,请参阅服务利用率。您可以使用这些指标和其他 CloudWatch 指标扩展您的服务(添加更多任务)以应对高峰期的高需求,并缩减您的服务(运行更少的任务)以降低低利用率期间的成本。

Amazon ECS Service Auto Scaling 支持以下类型的自动扩展:

  • 目标跟踪扩展策略 – 根据特定指标的目标值,增加或减少服务运行的任务数。这与恒温器保持家里温度的方式类似。您选择一个温度,恒温器将完成所有其他工作。

  • 分步扩展策略 – 根据一组扩缩调整,增加或减少服务运行的任务数,这些调整称为分布调整,将根据警报严重程度发生变化。

  • 计划扩展 -根据日期和时间增加或减少服务运行的任务数。

服务自动扩展和部署

Application Auto Scaling 可在 Amazon ECS 部署正在进行时关闭横向缩减流程。但是,在部署过程中,除非暂停,否则将继续发生扩展进程。如果要在部署正在进行的过程中暂停向外扩展进程,请执行以下步骤。

  1. 调用 describe-scalable-targets 命令,在 Application Auto Scaling 中指定与可扩展目标关联的服务的资源 ID(例如:service/default/sample-webapp)。记录输出。调用下一个命令时,您将用到它。

  2. 调用 register-scalable-target 命令,指定资源 ID、命名空间和可伸缩维度。指定 true 代表 DynamicScalingInSuspendedDynamicScalingOutSuspended

  3. 部署完成后,您可以调用 register-scalable-target 命令恢复扩展。

有关更多信息,请参阅暂停和恢复 Application Auto Scaling 的扩缩

服务 Auto Scaling 所需的 IAM 权限

通过 Amazon ECS、CloudWatch 和 Application Auto Scaling API 的组合,服务自动扩展成为可能。使用 Amazon ECS 创建和更新服务,使用 CloudWatch 创建警报,使用 Application Auto Scaling 创建扩展策略。

除了用于创建和更新服务的标准 IAM 权限外,访问 Service Auto Scaling 设置的 IAM 用户还必须具有支持动态缩放的服务的相应权限。IAM 用户必须具有使用以下示例策略中的操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:*", "ecs:DescribeServices", "ecs:UpdateService", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:DisableAlarmActions", "cloudwatch:EnableAlarmActions", "iam:CreateServiceLinkedRole", "sns:CreateTopic", "sns:Subscribe", "sns:Get*", "sns:List*" ], "Resource": [ "*" ] } ] }

创建服务示例更新服务示例 IAM policy 示例显示 IAM 用户在 Amazon Web Services Management Console 中使用 Service Auto Scaling 所需的权限。

Application Auto Scaling 服务还需要描述 Amazon ECS 服务和 CloudWatch 警报的权限,以及代表您修改服务的预期数量的权限。sns: 权限用于在超过阈值时 CloudWatch 向 Amazon SNS 主题发送的通知。如果您为 Amazon ECS 服务使用弹性伸缩功能,它将创建一个名为 AWSServiceRoleForApplicationAutoScaling_ECSService 的服务相关角色。此服务相关角色授予 Application Auto Scaling 权限,以描述策略警报、监控服务的当前运行的任务数以及修改服务的所需计数。Application Auto Scaling 的原托管 Amazon ECS角色为 ecsAutoscaleRole,但今后已不再需要。此服务相关角色是 Application Auto Scaling 的默认角色。有关更多信息,请参阅《Application Auto Scaling 用户指南》中的 Application Auto Scaling 服务相关角色

如果您在 CloudWatch 指标可用于 Amazon ECS 之前已创建您的 Amazon ECS 容器实例,则可能需要添加 ecs:StartTelemetrySession 权限。有关更多信息,请参阅使用 CloudWatch 指标

注意事项

使用扩缩策略时,请注意以下事项:

  • Amazon ECS 每隔 1 分钟向 CloudWatch 发送一次指标数据。在集群和服务将指标发送到 CloudWatch 之前,指标不可用,并且您无法为不存在的指标创建 CloudWatch 警报。

  • 缩放策略支持冷却期。这是等待上一个扩展活动生效的秒数。

    • 对于扩展事件,目的是持续(但不过度)向外扩展。Service Auto Scaling 使用步进扩展策略成功向外扩展后,它将开始计算冷却时间。除非启动更大的横向扩展或冷却时间结束,否则扩缩策略不会再次增加所需容量。尽管此向外扩展冷却时间有效,但启动向外扩展活动所添加的容量将计算为下一个向外扩展活动所需容量的一部分。

    • 对于缩减事件,目的是以保守方式进行缩减以保护应用程序的可用性,因此在冷却时间过期之前阻止缩减活动。但是,如果另一个警报在横向缩减冷却时间内启动了横向扩展活动,Service Auto Scaling 将立即对目标进行横向扩展。在这种情况下,缩减冷却时间停止而不完成。

  • 服务计划程序始终遵守预期数量,但只要您的服务拥有活动的扩缩策略和警报,Service Auto Scaling 就会更改您手动设置的预期数量。

  • 如果设置的服务的预期数量低于其最小容量值,并且警报触发了扩展活动,则 Service Auto Scaling 会将预期数量增至最小容量值,然后基于与警报关联的扩展策略继续按需扩展。但是,缩减活动将不会调整预期数量,因为它已低于最小容量值。

  • 如果设置的服务的预期数量高于其最大容量值,并且警报触发了缩减活动,则 Service Auto Scaling 会将预期数量缩减至到最大容量值,然后基于与警报关联的扩展策略继续按需缩减。但是,扩展活动将不会调整预期数量,因为它已高于最大容量值。

  • 在扩展活动期间,服务中实际运行的任务计数是 Service Auto Scaling 用作其起点的值(而不是预期数量)。这是应有的处理容量。这可防止无法满足的过度(失控)扩展,例如,没有足够的容器实例资源来放置其他任务。如果稍后提供容器实例容量,则正在等待的扩展活动将能够继续,随后其他扩展活动可在冷却期后继续。

  • 如果您希望在没有要完成的工作时将任务计数扩展到零,请将最小容量设置为 0。对于目标跟踪扩展策略,当实际容量为 0 且度量指示存在工作负载需求时,Service Auto Scaling 会等待发送一个数据点,然后再扩展。在这种情况下,它将按可能的最小量扩展作为起点,然后根据实际运行的任务计数恢复扩展。

  • Application Auto Scaling 可在 Amazon ECS 部署正在进行时关闭横向缩减流程。但是,在部署过程中,除非暂停,否则将继续发生扩展进程。有关更多信息,请参阅服务自动扩展和部署

Amazon CLI 和开发工具包体验

通过 Amazon ECS、CloudWatch 和 Application Auto Scaling API 的组合,服务自动扩展成为可能。使用 Amazon ECS 创建和更新服务,使用 CloudWatch 创建警报,使用 Application Auto Scaling 创建扩展策略。

有关这些特定的 API 操作的更多信息,请参阅 Amazon Elastic Container Service API 参考Amazon CloudWatch API 参考以及 Application Auto Scaling API 参考。有关这些服务 Amazon CLI 命令的更多信息,请参阅 Amazon CLI 命令参考ecscloudwatch应用程序自动扩展的部分。

使用 Amazon CLI 为 Amazon ECS 服务配置扩展策略

  1. 使用 register-scalable-target 命令将 ECS 服务注册为可扩展目标。

  2. 使用 put-scaling-policy 命令创建扩展策略。

  3. [步进扩展] 使用 put-metric-alarm 命令创建触发扩展策略的警报。

有关使用 Amazon CLI 配置扩展策略的更多信息,请参阅 Application Auto Scaling用户指南