教程:配置扩展以提高应用程序的可用性 - Application Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:配置扩展以提高应用程序的可用性

在本教程中,您将了解如何在应用程序的工作负载高于正常工作负载时根据时间窗进行横向扩展和扩展。当您的应用程序可能突然需要大量容量按可预测的时间表时,这将非常有用。您可以将计划扩展配置为添加处理应用程序上的负载所需的容量添加容量然后在不再需要它时进行删除。

您可以将目标跟踪扩展策略与计划扩展配合使用。计划扩展会自动启动对MinCapacityMaxCapacity(基于您指定的计划)。当扩展策略在资源上处于活动状态时,它可以根据当前资源利用率在新的最小容量和最大容量范围内动态扩展。

注意

在开始学习本教程之前,我们建议您首先阅读以下介绍性教程:开始使用 Amazon CLI

Prerequisites

本教程假定您已执行以下操作:

  • 您创建了Amazonaccount.

  • 安装并配置了Amazon CLI。

  • 您的帐户具有在 Application Auto Scaling 中注册和取消注册资源作为可扩展目标的所有必要权限。它还具有创建扩展策略和计划操作的所有必要权限。

  • 您在非生产环境中拥有可扩展的资源,可用于本教程。如果您还没有一个,请在开始教程之前创建一个。

开始之前,请考虑以下事项:

完成本教程时,您可以通过两个步骤设置或更新MinCapacityMaxCapacity值设置为 0,将当前容量重置为 0。根据您选择使用的资源,您可能无法在这些步骤中将当前容量重置为 0。为了帮助您解决此问题,输出中将显示一条消息,指示最小容量不能小于指定的值,并将提供资源可接受的最小容量值。

要使用 Application Auto Scaling 监控扩展活动,可以使用describe-scaling-activities命令。由扩展策略或计划操作触发的每个扩展事件都会生成一个扩展活动。

第 1 步:注册您的可扩展目标

首先,通过 Application Auto Scaling 将您的资源注册为可扩展目标。Application Auto Scaling 可扩展目标。

向 Application Auto Scaling 注册您的可扩展目标

  • 请使用以下register-scalable-target命令注册新的可扩展目标。设置MinCapacityMaxCapacity值设置为 0,将当前容量重置为 0。

    Linux、macOS 或 Unix

    aws application-autoscaling register-scalable-target \ --service-namespace service namespace \ --scalable-dimension scalable dimension of the scalable target \ --resource-id resource identifier to associate with this scalable target \ --min-capacity 0 --max-capacity 0

    Windows

    aws application-autoscaling register-scalable-target --service-namespace service namespace --scalable-dimension scalable dimension of the scalable target --resource-id resource identifier to associate with this scalable target --min-capacity 0 --max-capacity 0

    如果此命令成功执行,将不会返回任何输出。

第 2 步:创建计划的操作

您可以将put-scheduled-action命令创建配置为满足您的业务需求的计划操作。在本教程中,我们重点介绍关闭工作时间以外扩展的配置。

创建可在早上扩大的计划操作

  1. 要向外扩展可扩展目标,请使用以下put-scheduled-action命令。加入--schedule参数,使用 cron 表达式,采用 UTC 时间。

    按照指定的计划(每天 UTC 上午 9:00),Application Auto Scaling 更新MinCapacityMaxCapacity值设置为 1-5 容量单位的所需范围。

    Linux、macOS 或 Unix

    aws application-autoscaling put-scheduled-action \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --scheduled-action-name my-first-scheduled-action \ --schedule "cron(0 9 * * ? *)" \ --scalable-target-action MinCapacity=1,MaxCapacity=5

    Windows

    aws application-autoscaling put-scheduled-action --service-namespace namespace --scalable-dimension dimension --resource-id identifier --scheduled-action-name my-first-scheduled-action --schedule "cron(0 9 * * ? *)" --scalable-target-action MinCapacity=1,MaxCapacity=5

    如果此命令成功执行,将不会返回任何输出。

  2. 要确认您的计划操作是否存在,请使用以下describe-scheduled-actions命令。

    Linux、macOS 或 Unix

    aws application-autoscaling describe-scheduled-actions \ --service-namespace namespace \ --query 'ScheduledActions[?ResourceId==`identifier`]'

    Windows

    aws application-autoscaling describe-scheduled-actions --service-namespace namespace --query "ScheduledActions[?ResourceId==`identifier`]"

    下面是示例输出。

    [ { "ScheduledActionName": "my-first-scheduled-action", "ScheduledActionARN": "arn", "Schedule": "cron(0 9 * * ? *)", "ScalableTargetAction": { "MinCapacity": 1, "MaxCapacity": 5 }, ... } ]

创建可在夜间扩展的计划操作

  1. 重复上述步骤,创建另一个计划操作,应用程序 Auto Scaling 在一天结束时使用该操作进行缩放。

    按照指定的计划(每天 UTC 下午 8:00),Application Auto Scaling 更新目标的MinCapacityMaxCapacity设置为 0,如下所示put-scheduled-action命令。

    Linux、macOS 或 Unix

    aws application-autoscaling put-scheduled-action \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --scheduled-action-name my-second-scheduled-action \ --schedule "cron(0 20 * * ? *)" \ --scalable-target-action MinCapacity=0,MaxCapacity=0

    Windows

    aws application-autoscaling put-scheduled-action --service-namespace namespace --scalable-dimension dimension --resource-id identifier --scheduled-action-name my-second-scheduled-action --schedule "cron(0 20 * * ? *)" --scalable-target-action MinCapacity=0,MaxCapacity=0
  2. 要确认您的计划操作是否存在,请使用以下describe-scheduled-actions命令。

    Linux、macOS 或 Unix

    aws application-autoscaling describe-scheduled-actions \ --service-namespace namespace \ --query 'ScheduledActions[?ResourceId==`identifier`]'

    Windows

    aws application-autoscaling describe-scheduled-actions --service-namespace namespace --query "ScheduledActions[?ResourceId==`identifier`]"

    下面是示例输出。

    [ { "ScheduledActionName": "my-first-scheduled-action", "ScheduledActionARN": "arn", "Schedule": "cron(0 9 * * ? *)", "ScalableTargetAction": { "MinCapacity": 1, "MaxCapacity": 5 }, ... }, { "ScheduledActionName": "my-second-scheduled-action", "ScheduledActionARN": "arn", "Schedule": "cron(0 20 * * ? *)", "ScalableTargetAction": { "MinCapacity": 0, "MaxCapacity": 0 }, ... } ]

第 3 步:创建目标跟踪扩展策略

现在,您已经准备好了基本计划,请添加一个目标跟踪扩展策略,以便根据目标跟踪进行扩展。

通过目标跟踪,Application Auto Scaling 会将策略中的目标值与指定度量的当前值进行比较。当它们在一段时间内不相等时,Application Auto Scaling 会添加或删除容量以保持稳定的性能。随着应用程序负载和指标值的增加,Application Auto Scaling 会尽可能快地增加容量,而无需超过MaxCapacity。当 Application Auto Scaling 因为负载最小而删除容量时,它会在不低于MinCapacity。通过根据使用情况调整容量,您只需为应用程序需求付费。有关更多信息,请参阅 在高利用率期间支持应用程序可用性

如果指标数据不足,因为您的应用程序没有任何负载,则 Application Auto Scaling 不会添加或删除容量。此行为的目的是在信息不足的情况下优先考虑可用性。

创建目标跟踪扩展策略

  1. 请使用以下put-scaling-policy命令创建策略。

    最常用于目标跟踪的指标是预定义的,您可以在不提供 CloudWatch 的完整指标规范的情况下使用它们。有关可用的预定义指标的更多信息,请参阅PredefinedMetricSpecification中的Application Auto Scaling API 参考

    在运行此命令之前,请确保您的预定义指标需要目标值。例如,要在 CPU 利用率达到 50% 时横向扩展,请指定目标值 50.0。或者,要在使用率达到 70% 时扩展 Lambda 预配置并发,请指定目标值 0.7。有关特定资源的目标值的信息,请参阅服务提供的有关如何配置目标跟踪的文档。有关更多信息,请参阅 Application Auto Scaling 入门

    Linux、macOS 或 Unix

    aws application-autoscaling put-scaling-policy \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --policy-name my-scaling-policy --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "predefinedmetric" }}'

    Windows

    aws application-autoscaling put-scaling-policy --service-namespace namespace --scalable-dimension dimension --resource-id identifier --policy-name my-scaling-policy --policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration "{ \"TargetValue\": 50.0, \"PredefinedMetricSpecification\": { \"PredefinedMetricType\": \"predefinedmetric\" }}"

    如果成功,此命令将返回包含代表您创建的两个 CloudWatch 警报的 ARN 和名称。

  2. 要确认您的计划操作是否存在,请使用以下describe-scaling-policies命令。

    Linux、macOS 或 Unix

    aws application-autoscaling describe-scaling-policies --service-namespace namespace \ --query 'ScalingPolicies[?ResourceId==`identifier`]'

    Windows

    aws application-autoscaling describe-scaling-policies --service-namespace namespace --query "ScalingPolicies[?ResourceId==`identifier`]"

    下面是示例输出。

    [ { "PolicyARN": "arn", "TargetTrackingScalingPolicyConfiguration": { "PredefinedMetricSpecification": { "PredefinedMetricType": "predefinedmetric" }, "TargetValue": 50.0 }, "PolicyName": "my-scaling-policy", "PolicyType": "TargetTrackingScaling", "Alarms": [], ... } ]

第 4 步:清除

为了防止您的账户对主动扩展时创建的资源产生费用,您可以按如下方式清理关联的扩展配置。

删除扩展配置不会删除可扩展的资源。它也没有使其恢复到原来的能力。您可以使用创建可扩展资源的服务控制台删除该服务或调整其容量。

删除计划的操作

下面的 delete-scheduled-action 命令将删除指定的计划操作。如果您要保留创建的计划操作,您可以跳过此操作。

Linux、macOS 或 Unix

aws application-autoscaling delete-scheduled-action \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --scheduled-action-name my-second-scheduled-action

Windows

aws application-autoscaling delete-scheduled-action --service-namespace namespace --scalable-dimension dimension --resource-id identifier --scheduled-action-name my-second-scheduled-action

删除扩展策略

以下delete-scaling-policy命令可删除指定的目标跟踪扩展策略。如果您要保留您创建的扩展策略,您可以跳过此操作。

Linux、macOS 或 Unix

aws application-autoscaling delete-scaling-policy \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --policy-name my-scaling-policy

Windows

aws application-autoscaling delete-scaling-policy --service-namespace namespace --scalable-dimension dimension --resource-id identifier --policy-name my-scaling-policy

撤消可扩展目标的注册

使用如下 deregister-scalable-target 命令来取消注册可扩展目标。如果您有任何您创建的扩展策略或尚未删除的计划操作,这条命令会将它们删除。如果您要将此可扩展目标保留供将来使用,您可以跳过此操作。

Linux、macOS 或 Unix

aws application-autoscaling deregister-scalable-target \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier

Windows

aws application-autoscaling deregister-scalable-target --service-namespace namespace --scalable-dimension dimension --resource-id identifier