Aws lambda 音频特征提取(存储层不足)

Aws lambda audio features extraction ( Not enough storage -Layers )

我们有将 wav 文件上传到 S3 存储桶的物联网传感器。

我们希望能够使用 aws lambda

从每个上传的文件中提取声音特征(创建 obj 事件)

为此我们需要:

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

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

与ffmpeg相关

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

  1. 将 ffmpeg 文件放入 s3 并在每次调用时获取它(不必将其放入图层中。(如果可能的话)

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

  3. 移动到 EC2 那里,当两个文件同时上传时,我们会遇到并发调用问题。

必须有更简单的方法,我很高兴在开始实施之前听取其他意见, 谢谢大家!

场景似乎是:

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

建议的架构:

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

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

确保将 监控 放置到位,以确保消息得到处理。在 Amazon SQS 中实施 Dead Letter Queue 以捕获无法处理的消息,并在 DLQ 上放置 CloudWatch Alarm 以在出现问题时通知您会出错的。