Aws lambda音频功能提取(存储空间不足-分层)



我们有IOT传感器,可以将wav文件上传到S3 Bucket中。

我们希望能够使用aws-lambda从上传的每个文件中提取声音特征(创建obj事件(

为此,我们需要:

  • python-librosapyAudio分析包+numpy和scipy。(约2.4亿未洗(
  • ffmpeg(~70mb未zzled(

正如您所看到的,没有办法将它们放在同一个lambda包中(最大250mb未压缩(。在收集wav文件时,我在层中不包括ffmpeg时出错:

[ERROR] FileNotFoundError: [Errno 2] No such file or directory: 'ffprobe': 'ffprobe'

这与ffmpeg有关。

我们正在寻找实施建议,我们考虑过:

  1. 将ffmpeg文件放在s3中,并在每次调用时获取它(无需将其放在层中。(如果可能的话(

  2. 链接两个lambda:1用于通过ffmpeg处理输入文件,并将输出文件放入另一个bucket>2函数调用并从处理后的数据中提取特征。(使用SNS/链接机制((如果可能的话(

  3. 转到EC2,在那里,当两个文件同时上传时,我们将遇到并发调用指控的问题。

必须有一种更简单的方法,在深入实施之前,我很乐意听取其他意见,谢谢大家!

场景看起来是:

  • 文件随机进入
  • 文件需要处理,但不能实时处理
  • AWS Lambda函数所需的库太大

建议的架构:

  • 配置Amazon S3事件以在文件到达时向Amazon SQS队列发送消息
  • 配置Amazon CloudWatch事件以定期触发AWS Lambda功能(例如1小时(
    • Lambda函数检查队列中是否有消息
    • 如果有消息,它将启动一个带有用户数据脚本的Amazon EC2实例,该脚本将安装并启动处理系统
  • 处理系统将:
    • 从队列中获取消息
    • 处理消息(不受Lambda的限制(
    • 删除消息
    • 如果队列中没有剩余消息,它将终止EC2实例

这可能非常具有成本效益,因为Amazon EC2 Linux实例是每秒收费的。您可以并行运行多个工人来处理消息(但在编写终止代码时要小心,以确保所有工人都已完成处理消息(。或者,如果不是时间关键型的,只需选择最小的可用实例类型并单线程即可,因为较大的实例无论如何都会花费更多的成本(因此从成本效益的角度来看,它们并没有更好(。

请确保设置监控,以确保正在处理消息。在Amazon SQS中实现死信队列以捕获无法处理的消息,并在DLQ上设置CloudWatch警报,以便在出现问题时通知您。

最新更新