Извлечение лямбда-аудио функций Aws (Недостаточно памяти - слои) - PullRequest
0 голосов
/ 04 ноября 2019

У нас есть IOT-датчики, которые загружают файлы WAV в S3 Bucket.

Мы хотим иметь возможность извлекать звуковые функции из каждого загружаемого файла (создать событие obj) с помощью aws lambda

Для этого нам нужно:

  • python librosa или пакет анализа pyAudio + numpy и scipy. (~ 240mb unzziped)
  • ffmpeg (~ 70mb unzziped)

Как вы можете видеть, невозможно собрать их все вместе в один и тот же лямбда-пакет (максимум 250 МБ без сжатия). И я получаю сообщение об ошибке, если не включить ffmpeg в слои при сборе файла wav:

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

, который связан с ffmpeg.

Мы ищем рекомендации по реализации, мы подумали о:

  1. Помещение файла ffmpeg в s3 и получение его при каждом вызове (без необходимости помещать его в слои. (Если это даже возможно)

  2. Объединение двух лямбд : 1 для обработки входного файла с помощью ffmpeg и помещения выходного файла в другую корзину> 2 вызванной функции и извлечения объектов из обработанных данных. (ИспользуяSNS / механизм цепочки) (если это возможно)

  3. Перейдите к EC2 , где у нас будет проблема с одновременным вызовом, который происходит при одновременной загрузке двух файлов.

должен быть и более простой способ, я буду рад услышать другие мнения, прежде чем погрузиться в реализацию, спасибо всем!

1 Ответ

1 голос
/ 06 ноября 2019

Сценарий выглядит следующим образом:

  • Файлы поступают в случайное время
  • Файлы должны обрабатываться, но не в режиме реального времени
  • требуемые библиотеки слишком велики для лямбда-функции AWS

Предлагаемая архитектура:

  • Настройте Событие Amazon S3 для отправки сообщения на Amazon SQS queue при получении файла
  • Настройка Amazon CloudWatch Event для запуска Лямбда-функции AWS через регулярные интервалы (например, 1 час)
    • Функция Lambda проверяет, есть ли в очереди сообщения
    • Если есть сообщения, запускает экземпляр Amazon EC2 со сценарием пользовательских данных, которыйустанавливает и запускает систему обработки
  • Система обработки будет:
    • Захватить сообщение из очереди
    • Обработка сообщения (без ограничений по лямбде)
    • Удаление сообщение
    • Если в очереди не осталось сообщений, прекратит работу экземпляра EC2

Это может быть очень экономически выгодно , потому что экземпляры Amazon EC2 Linux оплачиваются в секунду. Вы можете запустить несколько рабочих параллельно для обработки сообщений (но будьте осторожны при написании кода завершения, чтобы все работники завершили обработку сообщений). Или, если вещи не являются критичными по времени, просто выберите наименьший используемый тип экземпляра и однопотоковый, так как большие экземпляры в любом случае стоят дороже (поэтому они не лучше с экономической точки зрения).

Убедитесь, чтоВы устанавливаете мониторинг , чтобы обеспечить обработку сообщений. Реализуйте Dead Letter Queue в Amazon SQS, чтобы перехватывать сообщения, которые не обрабатываются, и помещайте CloudWatch Alarm в DLQ, чтобы уведомлять вас, если что-то идет не так.

...