本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
服务自动扩展
Automatic scaling 是指自动增加或减少 Amazon ECS 服务中所需任务数的功能。Amazon ECS 利用 Application Auto Scaling 服务来提供此功能。有关更多信息,请参阅 Application Auto Scaling 用户指南。
亚马逊 ECS 发布了 CloudWatch 衡量服务的平均 CPU 和内存使用率的指标。有关更多信息,请参阅服务利用率:你可以用这些和其他 CloudWatch 指标用于扩展服务(添加更多任务)以应对高峰时段的高需求,以及扩展服务(运行更少的任务)以在低利用率时期降低成本。
Amazon ECS Service Auto Scaling 支持以下类型的自动扩展:
服务自动扩展和部署
Application Auto Scaling 可在 Amazon ECS 部署正在进行时关闭横向缩减流程。但是,在部署过程中,除非暂停,否则将继续发生扩展进程。如果要在部署正在进行的过程中暂停向外扩展进程,请执行以下步骤。
-
致电describe-scalable-targets命令,在 Application Auto Scaling 中指定与可扩展目标关联的服务的资源 ID(示例:
service/default/sample-webapp
)。记录输出。调用下一个命令时,您将用到它。 -
致电register-scalable-target命令,指定资源 ID、命名空间和可扩展维度。指定
true
代表DynamicScalingInSuspended
和DynamicScalingOutSuspended
。 -
部署完成后,您可以调用register-scalable-target命令恢复缩放。
有关更多信息,请参阅暂停和恢复 Application Auto Scaling 的扩缩。
服务 Auto Scaling 所需的 IAM 权限
Amazon ECS 的组合使服务自动扩展成为可能, CloudWatch,以及应用程序自动缩放 API。服务是使用 Amazon ECS 创建和更新的,警报是使用创建的 CloudWatch,并且扩展策略是使用应用程序自动缩放创建的。
除了用于创建和更新服务的标准 IAM 权限外,您还必须授予用户、群或角色与 Service Auto Scaling 设置进行交互的权限,如以下示例策略所示。
{ "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 示例显示在 Amazon Web Services Management Console 中使用 Service Auto Scaling 所需的权限。
应用程序自动扩展服务还需要权限来描述您的 Amazon ECS 服务以及 CloudWatch 警报,以及代表您修改服务所需计数的权限。的sns:
权限适用于以下通知 CloudWatch 超过阈值时发送到亚马逊 SNS 主题。如果您为 Amazon ECS 服务使用弹性伸缩功能,它将创建一个名为 AWSServiceRoleForApplicationAutoScaling_ECSService
的服务相关角色。此服务相关角色授予 Application Auto Scaling 权限,以描述策略警报、监控服务的当前运行的任务数以及修改服务的所需计数。Application Auto Scaling 的原托管 Amazon ECS角色为 ecsAutoscaleRole
,但今后已不再需要。此服务相关角色是 Application Auto Scaling 的默认角色。有关更多信息,请参阅《Application Auto Scaling 用户指南》中的 Application Auto Scaling 服务相关角色。
如果您之前创建了 Amazon ECS 容器实例角色 CloudWatch可用于 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 ECS 任务有多个应用程序自动扩展选项。目标跟踪是最容易使用的模式。有了它,你所需要做的就是为指标设置一个目标值,例如 CPU 平均利用率。然后,自动缩放器会自动管理实现该值所需的任务数量。使用分步扩展,您可以更快地对需求变化做出反应,因为您可以定义扩展指标的特定阈值,以及超过阈值时要添加或删除的任务数量。而且,更重要的是,您可以通过最大限度地减少突破阈值警报的时间来对需求变化做出快速反应。
Amazon CLI 和开发工具包体验
Amazon ECS 的组合使服务自动扩展成为可能, CloudWatch,以及应用程序自动缩放 API。服务是使用 Amazon ECS 创建和更新的,警报是使用创建的 CloudWatch,并且扩展策略是使用应用程序自动缩放创建的。
有关这些特定 API 操作的更多信息,请参阅亚马逊弹性容器服务 API 参考,亚马逊 CloudWatch API 参考,还有应用程序自动缩放 API 参考。有关这些服务 Amazon CLI 命令的更多信息,请参阅 Amazon CLI 命令参考的 ecs、cloudwatch 和应用程序自动扩展的部分。
使用 Amazon CLI 为 Amazon ECS 服务配置扩展策略
-
使用以下命令将您的 Amazon ECS 服务注册为可扩展目标register-scalable-target命令。
-
使用创建扩展策略put-scaling-policy命令。
-
[Step scaling] 使用以下命令创建触发扩展策略的警报put-metric-alarm命令。
有关使用 Amazon CLI 配置扩展策略的更多信息,请参阅 Application Auto Scaling用户指南。