Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在AmazonAWS中,如何调用Lambda函数以仅在ELB';s实例状态从服务内转换到服务外?_Amazon Web Services_Amazon Sns_Amazon Elb_Amazon Cloudwatch - Fatal编程技术网

Amazon web services 在AmazonAWS中,如何调用Lambda函数以仅在ELB';s实例状态从服务内转换到服务外?

Amazon web services 在AmazonAWS中,如何调用Lambda函数以仅在ELB';s实例状态从服务内转换到服务外?,amazon-web-services,amazon-sns,amazon-elb,amazon-cloudwatch,Amazon Web Services,Amazon Sns,Amazon Elb,Amazon Cloudwatch,要考虑的案例: 给定:连接到ELB的实例,状态为InService When:其状态从服务中更改为服务外 然后:将使用InstanceId作为事件的一部分调用AWS Lambda函数 给定:一个新实例,第一次注册到ELB 时间:它仍在启动过程中(因此在健康检查中尚未报告呈阳性) 然后:没有调用AWS Lambda函数,因为未发生所需的状态更改 我尝试过的解决方案 我设置了一个Lambda函数,每分钟轮询一个硬编码的ELB列表。已为状态为:OutOfService的每个实例成功调用它。然而,这是不

要考虑的案例

  • 给定:连接到ELB的实例,状态为InService

    When:其状态从服务中更改为服务外

    然后:将使用InstanceId作为事件的一部分调用AWS Lambda函数

  • 给定:一个新实例,第一次注册到ELB

    时间:它仍在启动过程中(因此在健康检查中尚未报告呈阳性)

    然后:没有调用AWS Lambda函数,因为未发生所需的状态更改

  • 我尝试过的解决方案

    我设置了一个Lambda函数,每分钟轮询一个硬编码的ELB列表。已为状态为:OutOfService的每个实例成功调用它。然而,这是不可取的,因为它不支持上述案件清单中的第二个案件

    我修改了向ELB报告的健康检查功能。如果运行状况检查失败,将显示从中调用该实例的实例的ELB实例状态。但这也很难确定该实例是否仍在启动

    在第二个解决方案中还有更多的选项可供探索,但理想情况下,我不希望为了触发Lambda函数而轮询ELB以获取信息。相反,我希望Lambda函数接收这样一个转换事件(通过CloudWatch、SNS或其他方式,如果可用)


    对我尚未考虑的选项有什么见解吗?

    我同意对状态进行轮询不是正确的答案。探索的一个选项是使用cloudwatch警报触发lambda函数


    无法100%确定是否存在内置指标,或者是否需要为此创建自定义指标,但通过cloudwatch,您可以触发SNS通知,进而触发lambda函数。

    设法使其在运行状况检查端点内工作。现在,每当ELB执行运行状况检查并且失败时(如果实例未处于启动过程中),它都会检查ELB是否将其实例状态标记为OutOfService。这种方法的唯一缺点是,如果运行状况端点本身发生故障(并且loadbalancer将实例状态标记为OutOfService),则无法调用Lambda函数。我将尝试用自定义度量替换我所做的。现在我有了健康端点,它以ELB为目标,工作正常(也很高兴轮询频率与ELB健康检查间隔参数相关),唯一不会执行Lambda调用的事情是如果ELB健康端点本身关闭。我想了一个可能的解决办法。每次到达健康端点时,它都会向该实例特有的主题发送SNS通知。如果该主题的最新消息超过时间阈值,将触发CloudWatch警报。这个CloudWatch警报可以执行调用,但是我必须考虑如果机器正在启动,而healthpoint还没有激活该怎么办。。。在这种情况下,我不想触发lambda函数。因此,另一种选择可能是尝试使用应用程序负载平衡器(设置应基本相同),您可以使用AWS配置触发lambda函数。最终,最好的方法可能是使用CloudWatch事件,但该服务尚不支持ELB(每).是的,这正是我在开始之前认为可以采取的路线。只有当我到达这一部分时,我才意识到功能缺失。另一个可能的选择可能是在ELB度量上使用CloudWatch警报。例如,在N个时间段内发出HealthyHostCount为零的警报,这可能会导致SNS通知发送到然后调用Lambda函数的SNS主题。