amazon-web-services - 使用 Lambda 在 AWS 上自动处理实时数据
问题描述
我对使用 Lambda 在 AWS 上进行自动化实时数据处理很感兴趣,但我不确定如何触发我的 Lambda 函数。我的数据处理代码涉及获取多个文件并在对每个文件执行计算后将它们连接成一个数据帧。由于文件同时上传到 S3 并且文件相互依赖,我希望仅在上传所有文件时触发 Lambda。
当前的方法/尝试:
-我正在考虑使用 S3 触发器,但我担心的是,在单个文件上传触发 Lambda 启动的情况下,S3 触发器会导致错误。另一种选择是增加等待时间,但不希望限制使用的计算资源。
- 使用 Cloudwatch/EventBridge 的预定触发器,但这不是实时处理。
-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)是否足以处理记录。
我仍然更喜欢第一种方法,因为第二种方法仍然有出错的机会。
推荐阅读
- python - 如何将视图中的变量值存储到 Django 模型中?
- python - 通过 dask 在 python 脚本中进行任务管理和监控
- c++ - 为什么没有通过“”比较检查空字符串的优化?
- java - Checkmarx Postgres 查询形成错误 SQL Injection error , SQL Second order injection error Java Springboot
- pytorch - 使用具有不同内核的 SVM 作为 CNN 网络中的最后一层
- xamarin.forms - Xamarin.Forms:停止时从“自动拾取和关闭”禁用 iOS 选择器并等待“完成”按钮单击
- c# - 设置 iframe C# 的基本标签
- jenkins - Wget 命令未通过 Jenkins 执行
- python - 从迭代特定列中获取同一行
- python - 我的 html 表单中的下拉列表仅将空值返回到 mysql 数据库