AWS无服务器CSV队列到CSV体系结构

时间:2017-10-13 14:15:08

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

我目前正在使用AWS进行无服务器的CSV处理。熟悉EC2和Dynamo。我确信有更好的方法来构建它,我找不到一种有效的方法来存储数据。任何架构建议将不胜感激。

此流程将采用上传到S3的CSV,处理元组的所有行,并将新处理的数据CSV输出到S3。

什么是1)最佳架构和2)在队列完成之前存储数据的最佳位置,直到可以构建CSV

数据流和服务架构:

CSV(包含元组)(S3) - > CSV处理(Lambda) - >队列(SNS) - >队列处理(Lambda) - > ?????在写入CSV之前已经处理的队列项的临时存储???? (这里有什么用?) - > CSV构建(Lambda) - > CSV存储(S3)

聪明的想法赞赏。

2 个答案:

答案 0 :(得分:1)

我相信你的事情过于复杂

s3可以在事件发生时触发调用lambda函数。这是直接在s3存储桶事件通知中设置的

因此,请使用此功能在另一个存储桶中制作CSV的转换版本

亚马逊有一个如何在这里做这类事情的例子

http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

答案 1 :(得分:1)

更新(回复this comment):

  

它没有任何并行化

如果你很清楚单个Lambda在其时间限制内可以处理多少个元组,你可以平均分配任务。

例如,给出以下信息......

  • 原始CSV包含50,000个元组
  • 单个Lambda可以在限定时间内处理5000个元组。

然后,您可以对处理器 Lambda进行10次并行异步调用,每次调用使用不同的offset

原始答案:

你可以使用两个Lambdas:

  1. 监听
    • S3触发的Lambda,其唯一的工作是将新上传的CSV的s3路径传递给 Processor Lambda。
  2. 处理器
    • 侦听器触发的Lambda。它需要s3 pathoffset作为参数(其中offset是应该开始处理的CSV行。
    • 此Lambda执行CSV行的实际处理。它应该跟踪它当前处理的行,并且在达到Lambda时间限制之前,它将停止并使用相同的s3 path调用自身,但使用新的offset
  3. 所以,基本上,它是一个递归的Lambda,在处理所有CSV行之前调用它。

    要检查剩余时间,您可以在处理程序的context.getRemainingTimeInMillis()while循环中使用for方法(NodeJS)。