首页 > 解决方案 > 使用 Lambda 在 AWS 上自动处理实时数据

问题描述

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

当前的方法/尝试:

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

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

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

任何建议表示赞赏!谢谢!

标签: amazon-web-servicesamazon-s3aws-lambdaamazon-sns

解决方案


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

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)是否足以处理记录。

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


推荐阅读