配置基于 Amazon SQS 的缩放 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

配置基于 Amazon SQS 的缩放

本节介绍如何根据亚马逊 Amazon SQS 配置您的扩展。

步骤 1:创建 CloudWatch 自定义指标

自定义指标是使用您选择的指标名称和命名空间定义的。自定义指标的命名空间不能以 AWS/ 开头。有关发布自定义指标的更多信息,请参阅 Amazon CloudWatch 用户指南中的发布自定义指标主题。

按照此步骤首先从您的 Amazon 账户中读取信息来创建自定义指标。然后,计算前面的章节中建议的每个实例的积压指标。最后,每隔 1 分钟将 CloudWatch 此数字发布到。只要可能,我们强烈建议您按 1 分钟粒度的指标进行扩展,以确保更快地响应系统负载变化。

创建 CloudWatch 自定义指标 (Amazon CLI)
  1. 使用 SQS get-queue-attributes命令获取队列中等待的消息数量 (ApproximateNumberOfMessages)。

    aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \ --attribute-names ApproximateNumberOfMessages
  2. 使用describe-auto-scaling-groups命令获取组的运行容量,即处于InService生命周期状态的实例数量。此命令返回 Auto Scaling 组的实例及其生命周期状态。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
  3. 将该队列中可供检索的大致消息数量除以该组的运行容量,计算得出每个实例的积压。

  4. 创建每分钟运行一次的脚本,以检索每个实例的待办事项值并将其发布到 CloudWatch 自定义指标。发布自定义指标时,需要指定该指标的名称、命名空间、单位、值以及零个或多个维度。维度由维度名称和维度值组成。

    要发布自定义指标,请将斜体占位符值替换为首选指标名称、指标值、命名空间(只要不是以 AWS “” 开头)和维度(可选),然后运行以下put-metric-data命令。

    aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace \ --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue

在您的应用程序发出所需指标后,数据将发送到。 CloudWatch该指标在 CloudWatch 控制台中可见。您可以通过登录 Amazon Web Services Management Console 并导航到该 CloudWatch 页面来访问它。然后,通过导航到指标页面或者使用搜索框搜索指标来查看指标。有关查看指标的信息,请参阅 Amazon CloudWatch 用户指南中的查看可用指标

步骤 2:创建目标跟踪扩展策略

现在,您可以将创建的指标添加到目标跟踪扩缩策略中。

创建目标跟踪扩缩策略(Amazon CLI)
  1. 使用以下cat命令可以在您的主目录的名为config.json的 JSON 文件中存储扩缩策略的目标值和自定义指标规范。将每个用户输入占位符替换为您自己的信息。对于 TargetValue,计算每个实例的可接受积压指标并在此处输入。要计算此数值,请考虑正常延迟值并将其除以处理一条消息所需的平均时间(如前面的章节所述)。

    如果您没有为步骤 1 中创建的指标指定任何维度,请不要在自定义指标规范中包含任何维度。

    $ cat ~/config.json { "TargetValue":100, "CustomizedMetricSpecification":{ "MetricName":"MyBacklogPerInstance", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"None" } }
  2. 使用put-scaling-policy命令以及您在上一步中创建config.json的文件来创建您的扩展策略。

    aws autoscaling put-scaling-policy --policy-name sqs100-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://~/config.json

    这会创建两个警报:一个用于增加实例数量,另一个用于减少实例数量。它还会返回向其注册的策略的 Amazon 资源名称 (ARN) CloudWatch,该名称 CloudWatch 用于在指标阈值被违反时调用缩放。

步骤 3:测试扩展策略

在您完成设置后,验证您的扩展策略是否正常工作。您可以通过以下方式测试:增加 SQS 队列中的消息数,然后验证 Auto Scaling 组是否已启动更多 EC2 实例。您还可以通过以下方式测试:减少 SQS 队列中的消息数,然后验证 Auto Scaling 组是否终止了一个 EC2 实例。

测试扩展函数
  1. 按照创建 Amazon SQS 标准队列并发送消息创建 Amazon SQS FIFO 队列并发送消息中的步骤将消息添加到队列中。请确保您增加了队列中的消息数量,使得每个实例的积压指标超过目标值。

    您的更改调用警报可能需要几分钟时间。

  2. 使用describe-auto-scaling-groups命令验证该组是否已启动实例。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
在函数中测试比例尺
  1. 按照接收和删除消息(控制台)中的步骤从队列中删除消息。请确保您减少了队列中的消息数量,使得每个实例的积压指标低于目标值。

    您的更改调用警报可能需要几分钟时间。

  2. 使用describe-auto-scaling-groups命令验证该组是否已终止实例。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg