AWS Lambda音频功能提取(没有足够的存储-层) 为此,我们需要:我们正在寻找实施建议,我们考虑过:

我们有IOT传感器,可将wav文件上传到S3存储桶。

我们希望能够使用 aws lambda

从每个要上传的文件(创建obj事件)中提取声音功能。

为此,我们需要:

  • python librosa pyAudio分析包+ numpy和scipy。 (〜240mb,未压缩)
  • ffmpeg(未压缩的〜70mb)

如您所见,没有办法将它们全部放在同一个lambda包中(最大250mb未压缩)。当收集wav文件时,如果不在图层中不包含ffmpeg,则会出现错误:

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

与ffmpeg有关。

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

  1. 将ffmpeg文件放入s3,并在每次调用时将其获取(无需将其放置在层中。(即使可能)

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

  3. 移至EC2 ,当同时上传两个文件时,在此处进行并发调用会产生问题。

必须有一种简便的方法,在开始实施之前,很高兴听到其他意见, 谢谢大家!

hellionhe 回答:AWS Lambda音频功能提取(没有足够的存储-层) 为此,我们需要:我们正在寻找实施建议,我们考虑过:

该情况似乎是:

  • 文件随机进入
  • 文件需要处理,但不是实时的
  • 所需的库对于AWS Lambda函数而言太大了

建议的体系结构:

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

这可能非常具有成本效益,因为Amazon EC2 Linux实例是按秒收费的。您可以并行运行多个工作线程来处理消息(但在编写终止代码时要小心,以确保所有工作线程都已完成对消息的处理)。或者,如果事情不是时间紧迫的,则选择最小的可用实例类型并对其进行单线程处理,因为无论如何,大型实例的成本更高(因此从成本效益的角度来看,它们并没有更好的表现)。

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

本文链接:https://www.f2er.com/3164745.html

大家都在问