如何在终止时自动从AWS ELB取消注册EC2实例?

时间:2015-05-13 07:44:33

标签: amazon-web-services amazon-ec2

如果EC2实例是AWS Elastic Load Balancer(ELB)的成员,终止此EC2实例将不会将其从ELB中删除。

它将被标记为N / A,并且已停止服务。 然后,我们的监控系统会通知我们ELB中的不健康情况。

我们当前的解决方案是一个boto脚本,定期轮询和验证每个ELB成员。这是有效的,但这是一个拉动数据架构,使我们的AWS API限制陷入困境。

是否有一个选项,可以自动从ELB中删除已终止/丢失的实例? 或者,是否可以在推送数据(SQS,SNS)上而不是提取数据(API,w / boto)?

1 个答案:

答案 0 :(得分:1)

我可以理解需要轮询的问题,因为你已经采取了拉动设计[轮询更改并拉动boto脚本进行更改]。

更简单的方法是使用推送方法,即按需制作实例或删除实例。

有几种方法可以做;我能想到的几种方式

  1. 我相信终止API调用将导致Graceful关闭然后终止 - 如果我的理解是正确的,那么你可以使用可以触发的On-Shutdown脚本来移除ELB后面的自身。您可以获得EC2 Metadata to identify itself的帮助 - 实例ID;所以你可以在每个实例中放置相同的脚本或制作AMI。

  2. 使用Lambda函数使用SNS [CloudTrail - >侦听CLoudTrail日志] SNS - > Lambda Invoke],为"eventName": "TerminateInstances"解析它们,然后查找实例ID并从ELB中删除它。

  3. 这更像是[1a + 2a] - 在运行boto(或脚本)的情况下,你留下一个SNS消息,该消息将调用lambda,而lambda将从ELB中删除该实例。将有用且易于实现条件删除或用例更改的逻辑。