如果EC2实例是AWS Elastic Load Balancer(ELB)的成员,终止此EC2实例将不会将其从ELB中删除。
它将被标记为N / A,并且已停止服务。 然后,我们的监控系统会通知我们ELB中的不健康情况。
我们当前的解决方案是一个boto脚本,定期轮询和验证每个ELB成员。这是有效的,但这是一个拉动数据架构,使我们的AWS API限制陷入困境。
是否有一个选项,可以自动从ELB中删除已终止/丢失的实例? 或者,是否可以在推送数据(SQS,SNS)上而不是提取数据(API,w / boto)?
答案 0 :(得分:1)
我可以理解需要轮询的问题,因为你已经采取了拉动设计[轮询更改并拉动boto脚本进行更改]。
更简单的方法是使用推送方法,即按需制作实例或删除实例。
有几种方法可以做;我能想到的几种方式
我相信终止API调用将导致Graceful关闭然后终止 - 如果我的理解是正确的,那么你可以使用可以触发的On-Shutdown脚本来移除ELB后面的自身。您可以获得EC2 Metadata to identify itself的帮助 - 实例ID;所以你可以在每个实例中放置相同的脚本或制作AMI。
使用Lambda函数使用SNS [CloudTrail - >侦听CLoudTrail日志] SNS - > Lambda Invoke],为"eventName": "TerminateInstances"
解析它们,然后查找实例ID并从ELB中删除它。
这更像是[1a + 2a] - 在运行boto(或脚本)的情况下,你留下一个SNS消息,该消息将调用lambda,而lambda将从ELB中删除该实例。将有用且易于实现条件删除或用例更改的逻辑。