【发布时间】:2017-11-23 14:49:49
【问题描述】:
需要考虑的案例:
-
给定:一个附加到状态为 InService 的 ELB 的实例
何时:其状态从 InService 变为 OutOfService
然后:一个 AWS Lambda 函数被调用,InstanceId 作为事件的一部分
-
给定:一个全新的实例,第一次注册到 ELB
何时:它仍在启动过程中(因此尚未在健康检查中报告阳性)
那么:没有调用 AWS Lambda 函数,因为没有发生所需的状态更改
我尝试过的解决方案
我设置了一个 Lambda 函数来每分钟轮询一个硬编码的 ELB 列表。它为每个状态为 OutOfService 的实例成功调用。然而,这是不可取的,因为它不支持上述案例列表中的第二种情况。
我修改了向 ELB 报告的健康检查功能。如果健康检查失败,则调用实例的 ELB 实例状态。但这也很难确定实例是否仍在启动。
在第二种解决方案中还有更多可供探索的选项,但理想情况下,我不希望轮询 ELB 以获取信息以触发 Lambda 函数。相反,我希望 Lambda 函数接收此类转换的事件(通过 CloudWatch、SNS 或其他可用的方式)。
对我尚未考虑的选项有任何见解吗?
【问题讨论】:
-
最终,最好的方法可能是使用 CloudWatch Events,但该服务尚不支持 ELB(根据 docs.aws.amazon.com/AmazonCloudWatch/latest/events/…)。
-
是的,这正是我认为我可以在开始之前采取的路线。只有到了这一部分,我才意识到缺少功能。
-
另一个潜在的选择可能是对 ELB 指标使用 CloudWatch 警报。例如,在 N 个时间段内的 HealthyHostCount 为零时发出警报,这可能会导致向 SNS 主题发送 SNS 通知,然后调用 Lambda 函数。
标签: amazon-web-services amazon-sns amazon-elb amazon-cloudwatch