基于 SQS 中消息的动态自动缩放 AWS
Dynamic auto scaling AWS based on messages in SQS
用例:
每天早上都会填充 SQS(只有一次,消息数量可能会有很大差异),我想根据队列中的消息数量生成新实例。
例如:对于 200000 条消息 4 个实例,400000 条 8 个实例。
有什么方法可以实现吗?
您可以在您的服务器上设置一个 cron-job 或一个时间触发的 Lambda 来查询 SQS 以找出队列中可见消息的数量。如果您使用的是 AWS CLI,您将 运行 aws sqs get-queue-attributes
并读取 ApproximateNumberOfMessages
响应字段以获取队列中的项目数。然后,您将使用该数字来计算实例数,并调用 aws ec2 run-instances --count 4
加上其余参数。完成所有操作后,您将终止实例。
另一种方法是利用自动缩放和警报。您可以设置一个向 AutoScaling 组添加 1 个服务器的 ScaleOut 策略,并在 SQS ApproximateNumberOfMessages >= 某个阈值上使用 CloudWatch 警报触发该策略。此选项不会等到早上才处理队列,您会一直 运行ning。当 ApproximateNumberOfMessages <= 某个阈值时,您还可以有一个 ScaleIn 策略来减少 AutoScaling 组中的所需容量(服务器数量)。
用例:
每天早上都会填充 SQS(只有一次,消息数量可能会有很大差异),我想根据队列中的消息数量生成新实例。
例如:对于 200000 条消息 4 个实例,400000 条 8 个实例。
有什么方法可以实现吗?
您可以在您的服务器上设置一个 cron-job 或一个时间触发的 Lambda 来查询 SQS 以找出队列中可见消息的数量。如果您使用的是 AWS CLI,您将 运行
aws sqs get-queue-attributes
并读取ApproximateNumberOfMessages
响应字段以获取队列中的项目数。然后,您将使用该数字来计算实例数,并调用aws ec2 run-instances --count 4
加上其余参数。完成所有操作后,您将终止实例。另一种方法是利用自动缩放和警报。您可以设置一个向 AutoScaling 组添加 1 个服务器的 ScaleOut 策略,并在 SQS ApproximateNumberOfMessages >= 某个阈值上使用 CloudWatch 警报触发该策略。此选项不会等到早上才处理队列,您会一直 运行ning。当 ApproximateNumberOfMessages <= 某个阈值时,您还可以有一个 ScaleIn 策略来减少 AutoScaling 组中的所需容量(服务器数量)。