从lambda向SNS发布6000多条消息



我有一个脚本,我们想在AWS中作为Lambda运行,用Python编写。这将24小时运行一次。它描述了环境中的所有ec2实例,我正在检查一些符合性的细节。之后,我们希望将所有实例的详细信息发送到其他类似的合规脚本正在使用的SNS主题,这些主题被发送到lambda,然后从那里发送到sumologic。我目前只使用一个环境进行测试,但有1000多个实例,因此有1000多条消息要逐个发布到SNS。lambda在发送所有这些之前很久就超时了。一旦检查了所有环境及其实例,发布到SNS的消息可能接近6000条。

我需要一些关于如何将其构建为适用于所有环境的建议。我在想,也许可以从我的lambda中将所有记录放入S3 bucket中,然后创建另一个lambda,从bucket中读取每个记录,比如一次读取50条,并将它们逐个推送到SNS主题中。但我也不确定这会如何运作。

任何想法都值得赞赏!

我建议使用Step函数来解决这个问题。即使你现在解决了这个问题,随着实例数量的增加或其他步骤的增加,你想要执行单个Lambda的900秒最长运行时间也不再足够了。


使用阶跃函数的一种简单方法可以是:

步骤1:创建一个EC2实例列表;"检查";第一辆Lambda。可以是所有实例,也可以只是带有特定标签的实例等。你可以随心所欲地发挥创意。

步骤2:使用并行步骤处理此实例列表,该步骤为每个实例id调用一个Lambda。

步骤3:触发的Lambda从提供的EC2实例中读取详细信息,然后将结果发布到SNS。发布到SNS可能已经有一个预定义的步骤,所以你不需要自己编程。

有了新的WorkflowStudio,这应该相对容易实现。

注意:这可能不会比单个Lambda快,但它会随着更多EC2实例的扫描而更好地扩展。这里唯一的瓶颈可能是步骤1中的Lambda。如果Lambda需要超过15分钟的时间来";查找";所有EC2实例到"0";"扫描";,然后你需要变得有点创造性。但这是可以解决的。

我想您可以创建一个SQS队列来解决您的问题。

从SNS向SQS队列发送消息。然后,您可以从SQS中lambda轮询messaged(默认值为10,但您可以通过cli命令它(。

最新更新