基于 SQS 队列大小的自动缩放
Posted
技术标签:
【中文标题】基于 SQS 队列大小的自动缩放【英文标题】:Autoscale based on SQS queue size 【发布时间】:2015-12-14 14:42:17 【问题描述】:我已将这些命令放在一起,以根据 SQS 队列大小自动扩展 EC2 实例。我已经运行了所有命令,我的队列有 10 条消息,并且没有启动单个实例。
我想弄清楚,我的 cloudwatch 警报正在听什么 SQS 队列?也感谢任何帮助识别问题!
### Create Autoscaling Policy ###
aws autoscaling create-launch-configuration --launch-configuration-name my-lc --image-id ami-551c6d30 --instance-type m1.small
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --launch-configuration-name my-lc --availability-zones "us-east-1a" "us-east-1c" --max-size 10 --min-size 0 --desired-capacity 0
# Scale up policy
aws autoscaling put-scaling-policy --policy-name my-sqs-scaleout-policy --auto-scaling-group-name my-asg --scaling-adjustment 1 --adjustment-type ChangeInCapacity
# Scale down policy
aws autoscaling put-scaling-policy --policy-name my-sqs-scalein-policy --auto-scaling-group-name my-asg --scaling-adjustment -1 --adjustment-type ChangeInCapacity
# Alarm to scale up
aws cloudwatch put-metric-alarm --alarm-name AddCapacityToProcessQueue --metric-name ApproximateNumberOfMessagesVisible --namespace "AWS/SQS" --statistic Average --period 120 --threshold 3 --comparison-operator GreaterThanOrEqualToThreshold --dimensions Name=QueueName,Value=my-queue --evaluation-periods 2 --alarm-actions arn:aws:autoscaling:us-east-1:850082592395:scalingPolicy:6408b62d-9363-4252-a88c-5ffab08a8cb5:autoScalingGroupName/my-asg:policyName/my-sqs-scaleout-policy
# Alarm to scale down
aws cloudwatch put-metric-alarm --alarm-name RemoveCapacityFromProcessQueue --metric-name ApproximateNumberOfMessagesVisible --namespace "AWS/SQS" --statistic Average --period 300 --threshold 1 --comparison-operator LessThanOrEqualToThreshold --dimensions Name=QueueName,Value=my-queue --evaluation-periods 2 --alarm-actions arn:aws:autoscaling:us-east-1:850082592395:scalingPolicy:4771ea64-2ebf-45ef-9328-50e058dc68b7:autoScalingGroupName/my-asg:policyName/my-sqs-scalein-policy
# Verify cloudwatch alarms
aws cloudwatch describe-alarms --alarm-names AddCapacityToProcessQueue RemoveCapacityFromProcessQueue
# Verify scaling policy
aws autoscaling describe-policies --auto-scaling-group-name my-asg
# Verify instances autoscaled
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
【问题讨论】:
您是否尝试在 AWS 管理控制台上进行调试? @UiltonDutra 你如何在控制台上调试? 【参考方案1】:AWS Documentation 声明:
Amazon Simple Queue Service 每 5 分钟向 CloudWatch 发送一次数据。
此外,您还指定了多个时间段的平均指标。因此,将 Amazon SQS 指标发送到 Amazon CloudWatch 需要几个 5 分钟的时间。
度量周期(120 秒)可能太短而无法从 SQS 接收多个更新,从而导致 INSUFFICIENT_DATA
错误。
首先尝试使用Maximum
设置触发警报并使用时间段。成功触发警报后,使用阈值来获得所需的行为。
【讨论】:
以上是关于基于 SQS 队列大小的自动缩放的主要内容,如果未能解决你的问题,请参考以下文章
您可以在基于 Cloud Pub/Sub 队列的 Google App Engine 中触发自动缩放吗?
在发送到 SNS 之前,我可以使用 Amazon SQS 作为延迟队列吗?
在 Kubernetes 中,如何根据队列的大小进行自动缩放?