如何在终止时自动从 AWS ELB 注销 EC2 实例?
How to automatically deregister EC2 instance from AWS ELB on termination?
如果 EC2 实例是 AWS 弹性负载均衡器 (ELB) 的成员,终止此 EC2 实例不会将其从 ELB 中删除。
它将被标记为 N/A,并停止服务。
然后我们的监控系统会通知我们 ELB 中的不健康实例。
我们当前的解决方案是定期轮询和验证每个 ELB 成员的 boto 脚本。这行得通,但这是一种拉取数据架构,使我们的 AWS API 节流陷入困境。
是否有一个选项可以自动从 ELB 中删除 terminated/missing 个实例?
或者,是否可以在推送数据(SQS、SNS)上而不是拉取数据(API、w/boto)?
我可以理解需要轮询的问题,因为您已经采用了 Pull Design [轮询更改并拉取 boto 脚本以进行更改]。
更简单的方法是使用推送方法,即按需显式创建实例或删除实例。
您可以通过多种方式进行操作;我能想到的几个方法
我相信终止 API 调用将导致正常关机,然后终止 - 如果我的理解是正确的,那么您可以使用可以触发的 On-Shutdown 脚本将其自身删除ELB。您可以获得 EC2 Metadata to identify itself - 实例 ID 的帮助;因此您可以在每个实例中放置相同的脚本或制作 AMI。
使用 Lambda 函数使用 SNS [CloudTrail -> SNS -> Lambda Invoke] 侦听 CLoudTrail 日志,为 "eventName": "TerminateInstances"
解析它们,然后查找实例 ID 和从 ELB 中删除它。
这更像是 [1a + 2a] - 而不是 运行 boto(或脚本),您留下一条 SNS 消息,该消息会调用 lambda,而 lambda 又会删除来自 ELB 的实例。将有助于并易于实现有条件删除或用例更改的逻辑。
如果 EC2 实例是 AWS 弹性负载均衡器 (ELB) 的成员,终止此 EC2 实例不会将其从 ELB 中删除。
它将被标记为 N/A,并停止服务。 然后我们的监控系统会通知我们 ELB 中的不健康实例。
我们当前的解决方案是定期轮询和验证每个 ELB 成员的 boto 脚本。这行得通,但这是一种拉取数据架构,使我们的 AWS API 节流陷入困境。
是否有一个选项可以自动从 ELB 中删除 terminated/missing 个实例? 或者,是否可以在推送数据(SQS、SNS)上而不是拉取数据(API、w/boto)?
我可以理解需要轮询的问题,因为您已经采用了 Pull Design [轮询更改并拉取 boto 脚本以进行更改]。
更简单的方法是使用推送方法,即按需显式创建实例或删除实例。
您可以通过多种方式进行操作;我能想到的几个方法
我相信终止 API 调用将导致正常关机,然后终止 - 如果我的理解是正确的,那么您可以使用可以触发的 On-Shutdown 脚本将其自身删除ELB。您可以获得 EC2 Metadata to identify itself - 实例 ID 的帮助;因此您可以在每个实例中放置相同的脚本或制作 AMI。
使用 Lambda 函数使用 SNS [CloudTrail -> SNS -> Lambda Invoke] 侦听 CLoudTrail 日志,为
"eventName": "TerminateInstances"
解析它们,然后查找实例 ID 和从 ELB 中删除它。这更像是 [1a + 2a] - 而不是 运行 boto(或脚本),您留下一条 SNS 消息,该消息会调用 lambda,而 lambda 又会删除来自 ELB 的实例。将有助于并易于实现有条件删除或用例更改的逻辑。