

# 自动扩缩 Amazon ECS 服务
<a name="service-auto-scaling"></a>

*自动扩缩*是指自动增加或减少 Amazon ECS 服务中所需任务数的功能。Amazon ECS 利用 Application Auto Scaling 服务来提供此功能。有关更多信息，请参阅 [Application Auto Scaling 用户指南](https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html)。

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

Amazon ECS 服务自动扩缩支持以下类型的自动扩缩：
+ [使用目标指标来扩展 Amazon ECS 服务](service-autoscaling-targettracking.md) – 根据特定指标的目标值，增加或减少服务运行的任务数。这与恒温器保持家里温度的方式类似。您选择一个温度，恒温器将完成所有其他工作。
+ [使用基于 CloudWatch 警报的预定义增量扩展 Amazon ECS 服务](service-autoscaling-stepscaling.md) – 根据一组扩缩调整，增加或减少服务运行的任务数，这些调整称为分布调整，将根据警报严重程度发生变化。
+ [使用计划操作扩展 Amazon ECS 服务](service-autoscaling-schedulescaling.md) – 根据日期和时间增加或减少服务运行的任务数。
+ [使用历史模式通过预测式扩缩来扩展 Amazon ECS 服务](predictive-auto-scaling.md)：根据历史负载数据分析增加或减少服务运行的任务数，来检测流量中的每日或每周模式。

   

## 注意事项
<a name="auto-scaling-concepts"></a>

使用扩缩策略时，请注意以下事项：
+ Amazon ECS 每隔 1 分钟向 CloudWatch 发送一次指标数据。在集群和服务将指标发送到 CloudWatch 之前，指标不可用，并且您无法为不存在的指标创建 CloudWatch 警报。
+ 扩展策略支持冷却时间。这是等待上一个扩展活动生效的秒数。
  + 对于横向扩展事件，目的是持续（但不过度）横向扩展。服务自动扩缩使用步进扩展策略成功横向扩展后，它将开始计算冷却时间。除非启动更大的横向扩展或冷却时间结束，否则扩缩策略不会再次增加所需容量。尽管此横向扩展冷却时间有效，但启动横向扩展活动所添加的容量将计算为下一个横向扩展活动所需容量的一部分。
  + 对于横向缩减事件，目的是以保守方式进行横向缩减以保护应用程序的可用性，因此在冷却时间过期之前阻止横向缩减活动。但是，如果另一个警报在横向缩减冷却时间内启动了横向扩展活动，服务自动扩缩将立即对目标进行横向扩展。在这种情况下，横向缩减冷却时间停止而不完成。
+ 服务计划程序始终遵守预期数量，但只要您的服务拥有活动的扩缩策略和警报，服务自动扩缩就会更改您手动设置的预期数量。
+ 如果设置的服务的预期数量低于其最小容量值，并且警报启动了横向扩展活动，则服务自动扩缩会将预期数量增至最小容量值，然后基于与警报关联的扩展策略继续按需横向扩展。但是，横向缩减活动将不会调整预期数量，因为它已低于最小容量值。
+ 如果设置的服务的预期数量高于其最大容量值，并且警报启动了横向缩减活动，则服务自动扩缩会将预期数量横向扩展至最大容量值，然后基于与警报关联的扩展策略继续按需横向缩减。但是，横向扩展活动将不会调整预期数量，因为它已高于最大容量值。
+ 在扩展活动期间，服务中实际运行的任务计数是服务自动扩缩用作其起点的值（而不是预期数量）。这是应有的处理容量。这可防止无法满足的过度（失控）扩展，例如，没有足够的容器实例资源来放置其他任务。如果稍后提供容器实例容量，则正在等待的扩展活动将能够继续，随后其他扩展活动可在冷却时间后继续。
+ 如果您希望在没有要完成的工作时将任务计数扩展到零，请将最小容量设置为 0。对于目标跟踪扩展策略，当实际容量为 0 且度量指示存在工作负载需求时，服务自动扩缩会等待发送一个数据点，然后再扩展。在这种情况下，它将按可能的最小量扩展作为起点，然后根据实际运行的任务计数恢复扩展。
+ Application Auto Scaling 可在 Amazon ECS 部署正在进行时关闭横向缩减流程。但是，在部署过程中，除非暂停，否则将继续发生横向扩展进程。此行为不适用于使用外部部署控制器的 Amazon ECS 服务。有关更多信息，请参阅 [服务自动扩缩和部署](#service-auto-scaling-deployments)。
+ Amazon ECS 任务有数个 Application Auto Scaling 选项。目标跟踪是最易于使用的模式。有了它，您所需要做的就是为指标设置一个目标值，例如 CPU 平均利用率。然后，自动定标器会自动管理实现该值所需的任务数量。使用分步扩展，您可以更快地对需求变化做出反应，因为您可以定义扩展指标的特定阈值，以及在超过阈值时要添加或删除的任务数量。并且，更重要的是，您可以通过最大限度地减少突破阈值警报的时间来对需求变化做出快速反应。

有关服务自动扩缩最佳实践的更多信息，请参阅[优化 Amazon ECS 服务自动扩缩](capacity-autoscaling-best-practice.md)。

## 服务自动扩缩和部署
<a name="service-auto-scaling-deployments"></a>

Application Auto Scaling 可在 Amazon ECS 部署正在进行时关闭横向缩减流程。但是，在部署过程中，除非暂停，否则将继续发生横向扩展进程。此行为不适用于使用外部部署控制器的 Amazon ECS 服务。如果要在部署正在进行的过程中暂停横向扩展进程，请执行以下步骤。

1. 调用 [describe-scalable-targets](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scalable-targets.html) 命令，在 Application Auto Scaling 中指定与可扩展目标关联的服务的资源 ID（例如：`service/default/sample-webapp`)。记录输出。调用下一个命令时，您将用到它。

1. 调用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令，指定资源 ID、命名空间和可伸缩维度。指定 `true` 代表 `DynamicScalingInSuspended` 和 `DynamicScalingOutSuspended`。

1. 部署完成后，您可以调用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令恢复扩展。

有关更多信息，请参阅[暂停和恢复 Application Auto Scaling 的扩缩](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-suspend-resume-scaling.html)。