基于SQS中的消息动态自动缩放AWS

时间:2016-02-04 09:32:11

标签: amazon-web-services amazon-sqs autoscaling

用例:

每天早上都会填充SQS(只有一次,消息数量可能会有很大差异),我想根据队列中的消息数生成新实例。

例如:对于200000条消息,4个实例,400000个8个实例。

我们有办法实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

  1. 您可以在服务器上设置cron-job或使用时间触发的Lambda来查询SQS以查找队列中可见消息的数量。如果您正在使用AWS CLI,则运行aws sqs get-queue-attributes并阅读ApproximateNumberOfMessages响应字段以获取队列中的项目数。然后,您将使用该数字来计算实例数,并调用aws ec2 run-instances --count 4加上其余参数。一切都完成后,您将终止实例。

  2. 另一种方法是利用自动缩放和警报。您可以设置一个ScaleOut策略,将1个服务器添加到AutoScaling组,并在SQS上使用CloudWatch警报触发该策略AboutArtNumberOfMessages> =某个阈值。此选项不会等到早上处理队列,您可以让它一直运行。当ApproximateNumberOfMessages< =某个阈值时,您还可以使用ScaleIn策略来减少AutoScaling组中的Desired Capacity(服务器数量)。