我有一个EC2实例,我想根据SQS队列中的消息数量进行扩展。如果有很多消息(5分钟)我想弹出一个新的EC2,以便更快地消费消息。然后,如果消息很少(5分钟),我想要弹出最老的EC2。这样,如果消耗消息的服务由于某种原因停止,我将终止旧的EC2,服务将运行。
我为此创建了AutoScalling
。我已将TerminationPolicy
设置为OldestInstance
,但只有在我只设置一个区域(例如:eu-west-1a
)时才能正常工作:它会创建一个新实例并每次终止最旧的实例。但是如果我有3个区域(eu-west-1a, eu-west-1b, eu-west-1c
),它只会以OldestInstance
方式启动和终止实例。或者,至少,不像我期望的那样:每次删除最旧的。是否有与不同区域相关的东西?在this速度上,我没有发现任何相关信息,除了默认政策。
即使应用了从默认策略链接到多个区域的案例,我也可以最多只有2个实例同时转向。它们总是在一个新的区域发射。
答案 0 :(得分:2)
这可能是关键段落:
自定义终止策略时,Auto Scaling会首先评估可用区域是否存在任何不平衡。如果可用区的实例数多于该组使用的其他可用区,则Auto Scaling会对来自不平衡可用区的实例应用指定的终止策略。 如果组使用的可用区是平衡的,则Auto Scaling会随机选择可用区并应用您指定的终止策略。
我将此解释为,如果您在多个区域中有实例,并且这些区域已经平衡,那么AWS将随机选择一个区域,然后在随机选择的区域内选择最旧的实例 - 它赢得了'选择AZ中最旧的实例,选择随机AZ,然后在该AZ中终止最旧的实例。