我如何在aws中聚合来自多个lambda的数据

How can i aggregate data from multiple lambdas in aws

我有 SNS TopicMultiple Accounts

中触发 50 Lambdas

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

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

聚合数据的最佳方法是什么

您可以使用多种架构解决方案来解决此问题。可能没有 "right one",这取决于数据量、触发频率和预算。

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

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

困难在于检测何时 所有片段都可用于开始最终聚合。如果 50 是一个固定的数字,那会很容易,否则你需要考虑一种机制来告诉聚合函数它可以开始工作了...

我建议查看 DynamoDB 以聚合信息,如果存储的数据适合于此。

各种组件可以异步放入它们的数据,然后聚合器可以执行单个查询来提取整个结果集。

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

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

您描述的场景与您选择的架构模式并不完全匹配。如果您预先知道,您将不得不处理状态(聚合跟踪状态)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