Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

目标跟踪扩展策略

在使用目标跟踪扩展策略时,您可以选择一个指标并设置一个目标值。Amazon ECS 将创建和管理触发扩展策略的 CloudWatch 警报,并根据指标和目标值计算扩展调整。扩展策略根据需要增加或删除服务任务,将指标保持在指定的目标值或接近指定的目标值。除了将指标保持在目标值附近以外,目标跟踪扩展策略还会根据由于负载模式波动而造成的指标波动进行调节,并最大限度减少服务中运行的任务数发生快速波动的情况。

您可以为 Amazon ECS 服务创建多个目标跟踪扩展策略,但前提是它们分别使用不同的指标。服务根据提供最大任务容量的策略进行扩展。这样,您就可以涵盖多种方案,并确保始终具有足够的容量以处理您的应用程序工作负载。

为了确保应用程序可用性,服务会针对指标尽快按比例扩展,但缩减过程相对缓慢。

请勿编辑或删除 Amazon ECS 为目标跟踪扩展策略管理的 CloudWatch 警报。在删除目标跟踪扩展策略时,Amazon ECS 将自动删除警报。

注意事项

创建目标跟踪扩展策略时,请注意以下注意事项:

  • 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此,不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。

  • 当指定指标数据不足时,目标跟踪扩展策略不会执行扩展。它不会执行向内扩展,因为它不会将数据不足解读为使用率低。要在指标数据不足时向内扩展,请创建一个步进扩展策略,并设置警报在指标状态变为 INSUFFICIENT_DATA 时调用该扩展策略。

  • 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 Application Auto Scaling 在确定要添加或删除多少容量时将始终通过向上或向下舍入保守地进行操作,以免添加的容量不足或删除的容量过多。但是,对于具有小容量的可扩展目标,实际指标数据点可能与目标值差距很大。对于容量更高的可扩展目标,添加或删除容量将缩小目标值和实际指标数据点之间的差距。

  • 建议将基于指标扩展的频率设置为 1 分钟,这可更快地响应使用率变化。如果将随指标扩展的频率设置为 5 分钟,可能会导致响应时间变慢,并且可能导致系统依据陈旧的指标数据进行扩展。

  • 为了确保应用程序可用性,Application Auto Scaling 针对指标尽快按比例向外扩展,但会逐渐向内扩展。

  • 请勿编辑或删除 Application Auto Scaling 为目标跟踪扩展策略管理的 CloudWatch 警报。当您删除扩展策略时,Application Auto Scaling 将自动删除相应的警报。

教程:使用目标跟踪的服务自动扩展

以下过程帮助您创建一个 Amazon ECS 群集和一种通过目标跟踪使用 Application Auto Scaling 进行扩展 (和缩减) 的服务。

Amazon ECS 发布 CloudWatch 指标与服务的平均 CPU 和内存使用率。您可以使用这些服务利用率指标向上扩展您的服务以满足高峰期的大量需求,也可以向下扩展您的服务以在低利用率期间降低成本。有关更多信息,请参阅 服务利用率

在本教程中,您将使用 Amazon ECS 首次运行向导创建一个集群和一个服务(在 Elastic Load Balancing 负载均衡器后面运行)。然后,您使用 CloudWatch 警报在服务上配置 服务 Auto Scaling,该警报使用 CPUUtilization 指标向上或向下扩展您的服务,具体取决于当前应用程序负载。

当您的服务的 CPU 利用率上升至 75% 以上 (这意味着,已使用为服务预留的 CPU 的 75% 以上) 时,扩展警报将触发 服务 Auto Scaling 以向您的服务添加另一个任务来帮助处理增加的负载。相反,当您的服务的 CPU 利用率下降至 75% 以下时,向内扩展警报将促使服务预期数量减少,以便为其他资源和服务释放集群资源。

先决条件

本教程假定您有一个 AWS 账户和一个有权执行教程中介绍的所有操作的 IAM 管理员,以及一个位于当前区域的 Amazon EC2 密钥对。如果您没有这些资源(或不确定是否有),则可以执行 Amazon ECS 的设置中的步骤来创建这些资源。

如果您在 CloudWatch 指标可用于 Amazon ECS 之前已创建您的 Amazon ECS 容器实例,则可能需要添加此权限。有关检查您的 Amazon ECS 容器实例角色并为容器实例附加托管 IAM 策略的信息,请参阅在 IAM 控制台中检查 ecsInstanceRole

步骤 1:创建集群和服务

为群集和服务启用 CloudWatch 指标后,您可以使用 Amazon ECS 首次运行向导创建群集和服务。首次运行向导负责为本教程创建所需的 IAM 角色和策略 (一个用于容器实例的 Auto Scaling 组),它还创建在负载均衡器后面运行的服务。该向导还将使清理过程变得轻松得多,因为您可以通过一个步骤删除整个 AWS CloudFormation 堆栈。

对于本教程,您将创建一个名为 service-autoscaling 的集群和一个名为 sample-webapp 的服务。

创建集群和服务

  1. 打开 https://console.amazonaws.cn/ecs/home#/firstRun 上的 Amazon ECS 控制台首次运行向导。

  2. 从导航栏中,选择美国东部 (弗吉尼亚北部) 区域。

  3. Step 1: Container and Task (步骤 1: 容器和任务) 中,对于 Container definition (容器定义) 选择 sample-app (示例应用)。

  4. 对于 Task definition (任务定义),保留所有默认选项并选择 Next (下一步)。

  5. Step 2: Service (步骤 2: 服务) 中,对于 Load balancer type (负载均衡器类型) 选择 Application Load Balancer (应用程序负载均衡器)、Next (下一步)。

    重要

    AWS 资源中有 应用程序负载均衡器 时,将产生相应费用。有关更多信息,请参阅 Elastic Load Balancing 定价

  6. Step 3: Cluster (步骤 3: 群集) 中,对于 Cluster name (群集名称) 输入 service-autoscaling 并选择 Next (下一步)。

  7. 检查您的选择,然后选择 Create (创建)。

    您将会转到 Launch Status (启动状态) 页面,此页面显示您的启动状态并描述此过程的每一步 (在创建和填充您的群集资源时,这可能需要几分钟时间才能完成)。

  8. 创建群集和服务后,选择 View service (查看服务)。

步骤 2:配置 服务 Auto Scaling

现在,您已启动一个群集,并且已在该群集中创建一个在负载均衡器后面运行的服务,您可以通过创建根据 CloudWatch 警报扩展和缩减您的服务的扩展策略来配置 服务 Auto Scaling。

配置基本 服务 Auto Scaling 参数

  1. Service: sample-app-service (服务: 示例应用程序服务) 页面上,您的服务配置应类似于下图 (尽管任务定义版本和负载均衡器名称可能会不同)。选择 Update 以更新您的新服务。

     选择您的配置选项
  2. Update service (更新服务) 页面上选择 Next step (下一步),直至到达 Step 3: Set Auto Scaling (optional) (步骤 3: 设置 Auto Scaling (可选))。

  3. 对于 服务 Auto Scaling,选择 Configure Service Auto Scaling to adjust your service’s desired count

  4. 对于 Minimum number of tasks,输入 作为 服务 Auto Scaling 要使用的任务数的下限值。1您的服务的预期数量不会自动调整到低于此数量。

  5. 对于 Desired number of tasks (预期任务数),此字段是使用您之前输入的值预先填充的。此值必须介于此页面上指定的最小任务数和最大任务数之间。将此值保留为 1.

  6. 对于 Maximum number of tasks,输入 作为 服务 Auto Scaling 服务要使用的任务数的上限值。2您的服务的预期数量不会自动调整到高于此数量。

  7. 对于 IAM role for Service Auto Scaling,选择一个 IAM 角色来授权 Application Auto Scaling 服务代表您调整您的服务的预期数量。如果您之前未创建此类角色,请选择 Create new role,系统将为您创建此角色。为了方便将来参考,为您创建的角色名为 ecsAutoscaleRole。有关更多信息,请参阅 Amazon ECS 服务 Auto Scaling IAM 角色

为您的服务配置扩展策略

以下步骤将帮助您创建扩展策略和可用于为您的服务触发扩展活动的 CloudWatch 警报。您可以创建扩展警报来增加服务的预期数量,并创建缩减警报来减少服务的预期数量。

  1. 选择 Add scaling policy (添加扩展策略) 以配置您的扩展策略。

  2. Add policy 页面上,执行以下操作:

    1. 对于 Scaling policy type (扩展策略类型) 选择 Target tracking (目标跟踪)。

    2. 对于 Policy name,输入 TargetTrackingPolicy.

    3. 对于 ECS service metric,选择 CPUUtilization

    4. 对于 Target value (目标值) 输入 75

    5. 对于 Scale-out cooldown period (扩展冷却时间),输入 60。这是在一个扩展活动完成后、另一个扩展活动开始前的时长 (秒)。在此期间,已启动的资源不影响 Auto Scaling 组指标。

    6. 对于 Scale-in cooldown period (缩减冷却时间),输入 60。这是一个缩减活动完成后、另一个缩减活动开始前的时长 (秒)。在此期间,已启动的资源不影响 Auto Scaling 组指标。

    7. 选择 Save

  3. 选择下一步

  4. 检查您的所有选择,然后选择 Update Service (更新服务)。

  5. 当您的服务状态为已完成更新时,选择 View Service

步骤 3:触发扩展活动

使用 服务 Auto Scaling 配置服务后,可以通过将服务的 CPU 利用率推送到 ALARM 状态来触发扩展活动。由于本教程中的示例是一个在负载均衡器后面运行的 Web 应用程序,因此,您可以将数千个 HTTP 请求发送到服务 (使用 ApacheBench 实用工具) 以使服务 CPU 利用率迅速上升并超过阈值。此峰值将触发警报,而警报反过来会触发一个扩展活动来向服务添加一个任务。

ApacheBench 实用工具完成请求后,服务 CPU 利用率应降至 25% 阈值以下,并触发将服务的预期数量返回至 1 的向内扩展活动。

为服务触发扩展活动

  1. 从控制台中的服务主视图页面,选择负载均衡器名称以在 Amazon EC2 控制台中查看其详细信息。您需要负载均衡器的 DNS 名称,类似于如下内容:EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com

  2. 使用 ApacheBench (ab) 实用工具在短时间内向负载均衡器发出数千个 HTTP 请求。

    注意

    此命令在 macOS 上是默认安装的,也可用于许多 Linux 分发版。例如,您可以在 Amazon Linux 上通过以下命令安装 ab

    $ sudo yum install -y httpd24-tools

    运行以下命令,将替换您的负载均衡器的 DNS 名称。

    $ ab -n 100000 -c 1000 http://EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com/
  3. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  4. 在左侧导航窗格中,选择 Alarms (警报)。

  5. 等待 ab HTTP 请求在 CloudWatch 控制台中触发扩展警报。您应该会看到您的 Amazon ECS 服务向外扩展并将 1 个任务添加到服务的预期数量。

  6. ab HTTP 请求完成后的短时间内(1 到 2 分钟),您的向内扩展警报将触发,并且向内扩展策略会将服务的预期数量减至 1。

步骤 4:清理

完成本教程后,您可以选择保留您的群集、Auto Scaling 组、负载均衡器和 CloudWatch 警报。但是,如果您没有主动使用这些资源,则应考虑将其清除以免您的账户产生不必要的费用。

删除集群和 CloudWatch 警报

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在左侧导航窗格中,选择群集

  3. Clusters (群集) 页面上,选择 service-autoscaling (service-autoscaling) 群集。

  4. 选择 Delete Cluster (删除群集)、Delete (删除)。集群 AWS CloudFormation 堆栈的清理可能需要几分钟才能完成。

  5. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  6. 选择 Alarms (警报) 并选择以 TargetTracking-service- 开头的警报。

  7. 选择 Delete (删除)、Yes, Delete (是,删除)。