【问题标题】:Automated Real Time Data Processing on AWS with Lambda使用 Lambda 在 AWS 上自动处理实时数据
【发布时间】:2021-09-08 04:25:58
【问题描述】:

我对使用 Lambda 在 AWS 上进行自动化实时数据处理很感兴趣,但我不确定如何触发我的 Lambda 函数。我的数据处理代码涉及获取多个文件并在对每个文件执行计算后将它们连接成一个数据帧。由于文件同时上传到 S3 并且文件相互依赖,我希望仅在所有文件上传时触发 Lambda。

目前的方法/尝试:

-我正在考虑使用 S3 触发器,但我担心在单个文件上传触发 Lambda 启动的情况下,S3 触发器会导致错误。另一种选择是增加等待时间,但不希望限制使用的计算资源。

-使用 Cloudwatch/EventBridge 的预定触发器,但这不是实时处理。

-SNS 触发,但我不确定是否可以在不知道文件上传完成的情况下自动发送消息。

感谢任何建议!谢谢!

【问题讨论】:

  • 我添加了一个答案,但需要两个 lambda 或一些系统修改。

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


【解决方案1】:

如果您确实无法使用计划函数执行此操作,最好的选择是在创建对象时触发 Lambda 函数。

棘手的一点是,它会在每个对象上传时触发您的函数。因此,您可以识别“最后一部分”,例如,基于一些元数据,或者您需要存储和跟踪所有上传的状态,例如在 DynamoDB 中,只有在批处理完成时才进行实际处理。

最好的,斯特凡

【讨论】:

    【解决方案2】:

    您的部分文件可能被命名为 -

    filename_part1.ext
    filename_part2.ext
    

    如果您的任何系统正在生成这些文件,则使用该系统生成最终的虚拟空白文件名 -

    filename.final
    

    由于在您的 S3 事件触发器中,您可以使用后缀来生成事件、使用 .final 扩展名来调用 lambda 并处理记录。

    在另一种方法中,如果您无权访问将对象放入 s3 存储桶的服务器,则在您的 s3 存储桶中执行每个 PUT 操作时,调用 lambda 并在 dynamoDB 中插入一个条目。 您需要在发电机中为每个文件(不是文件部分)放置一个唯一条目 -

    filename and last_part_recieved_time
    

    last_part_recieved_time 不断更新,直到您不断获取文件部分。

    现在,该表可以通过 cron lambda 调用来查找,该调用检查时间偏差(lambda 调用的 SYSTIME 和 dynamoDB 条目之间的时间差 - last_part_recieved_time)是否足以处理记录。

    我仍然更喜欢第一种方法,因为第二种方法仍然有出错的机会。

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 2018-08-17
      • 1970-01-01
      • 2019-07-25
      • 2019-10-22
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2020-01-19
      相关资源
      最近更新 更多