我如何从AWS中的多个Lambda聚合数据

时间:2019-07-11 06:30:19

标签: amazon-web-services aws-lambda amazon-sns

我有SNS Topic会触发50 Lambdas中的Multiple Accounts

现在每个lambda都以json格式产生一些输出。

我想将所有这些单独的json汇总到一个列表中,然后将其传递到另一个SNS Topic

汇总数据最好的方法

3 个答案:

答案 0 :(得分:1)

您可以使用两种体系结构解决方案来解决此问题。可能没有一个“正确的选择”,它取决于数据量,触发频率和预算。

您将需要一些共享存储,您的50个lambda函数可以在其中临时存储其结果,以及另一个组件,很可能是另一个lambda函数,负责聚合以产生最终结果。

根据要处理的数据量,我首先考虑一个共享的Amazon S3存储桶,您的所有50个函数都可以删除它们的JSON,聚合函数可以读取和组装所有这些。可以充当共享存储的其他服务是Amazon DynamoDB和Amazon Kinesis。

难点是要检测何时可用以开始最终汇总。如果50是一个固定数字,那将很容易,否则您将需要考虑一种机制来告诉聚合函数它可以开始工作...

答案 1 :(得分:1)

您描述的场景与您选择的架构模式并不真正匹配。如果您预先知道您将不得不处理状态(聚合跟踪状态)SNS 和 SQS 不是正确的解决方案,Lambda 也不是。

其他帖子中没有提到的是,您必须管理这样一个事实,即您的 50 个进程中的一个可能会失败。你也必须考虑到这一点。处理所有这些情况不应该是您的重点,因为有一些工具可以为您做这些。

我建议您看看 AWS Kinesis:https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html

此外,AWS Step Functions 提供了一种解决方案: https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-parallel-state.html

答案 2 :(得分:0)

我建议查看 DynamoDB 来聚合信息,如果存储的数据适合这样做。

各个组件可以异步删除它们的数据,然后聚合器可以执行单个查询以获取整个结果集。

虽然它被描述为一个数据库,但它可以被视为一个简单的对象存储或查找引擎,因此您不必真正考虑数据键,只是一种将每个贡献与其他贡献区分开的方法。

因此,您可以存储在“lambda-id + timestamp”下,以确保每条记录都是不同的,然后您就可以检索所有记录。别忘了有办法退记录,这样系统才不会填满!