AWS Lambda "Ошибка: не удается найти ffmpeg" во время выполнения лямбда

In the AWS Lambda function (uploaded using the serverless framework) I'm trying to use the "fluent-ffmpeg" library to convert an MP4 file, downloaded from YouTube, to MP3 and save to S3.

The code:

'use strict'
module.exports.download_mp3 = function (event, context, callback)
{
  function uploadFromStream(s3) {
    const stream = require('stream')
    var pass = new stream.PassThrough()
    var params = {Bucket: "bucket_name", Key: "some_key", Body: pass};
    s3.upload(params, function(err, data) {
      console.log(err, data);
    });
    console.log("Should be finished")
    callback(null)
  }

  const aws = require('aws-sdk')
  const s3 = new aws.S3()
  const ytdl = require('ytdl-core');
  const ffmpeg = require('fluent-ffmpeg');

  let stream = ytdl("some_id", {
    quality: 'highestaudio',
    filter: 'audioonly'
  });

  ffmpeg(stream)
    .audioBitrate(128)
    .format('mp3')
    .on('error', (err) => console.error(err))
    .pipe(uploadFromStream(s3), {
      end: true
  });
}

The function works locally, the "fluent-ffmpeg" library is in "node_modules". But, when uploaded to Lambda, the code gives this error.

2018-12-23T19:59:15.664Z    39443d81-06ed-11e9-8410-f9ea8d0cf6ab    Error: Cannot find ffmpeg
at /var/task/node_modules/fluent-ffmpeg/lib/processor.js:136:22
at /var/task/node_modules/fluent-ffmpeg/lib/capabilities.js:123:9
at /var/task/node_modules/async/dist/async.js:473:16
at next (/var/task/node_modules/async/dist/async.js:5329:29)
at /var/task/node_modules/async/dist/async.js:969:16
at /var/task/node_modules/fluent-ffmpeg/lib/capabilities.js:116:11
at /var/task/node_modules/fluent-ffmpeg/lib/utils.js:223:16
at F (/var/task/node_modules/which/which.js:68:16)
at E (/var/task/node_modules/which/which.js:80:29)
at /var/task/node_modules/which/which.js:89:16

В ошибке я ясно вижу, что функция на самом деле находит каталог "fluent-ffmpeg", но не может найти "ffmpeg". Я рассказал об аналогичных проблемах и обнаружил, что мне нужно включить встроенный файл "ffmpeg" в каталог функций. Я скачал архив отсюда: https://johnvansickle.com/ffmpeg/ , включил файл "ffmpeg" в мой главный каталог проекта (где находятся файл serverless.yml и файлы .js) И отредактировал первую часть функции, чтобы она выглядела так:

use strict'
process.env.PATH = process.env.PATH + ':/tmp/'
process.env['FFMPEG_PATH'] = '/tmp/ffmpeg';
const BIN_PATH = process.env['LAMBDA_TASK_ROOT']
rocess.env['PATH'] = process.env['PATH'] + ':' + BIN_PATH;

module.exports.download_mp3 = function (event, context, callback)
{
  require('child_process').exec('cp /var/task/ffmpeg /tmp/.; chmod 755 
/tmp/ffmpeg;', function (error, stdout, stderr) {
  if (error) 
  {
    console.log('An error occured', error);
    callback(null, null)
  } 
  else 
  {
    var ffmpeg = require('ffmpeg');
    const aws = require('aws-sdk')
    const s3 = new aws.S3()
    const ytdl = require('ytdl-core');

В этом случае я получаю еще одну ошибку:

module initialization error: ReferenceError
at Object. (/var/task/download.js:5:1)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)

Я также попытался добавить переменную окружения «PATH» в функцию Lambda. Но это тоже не помогло.

0
de
ReferenceError: rocess не определен . Как насчет process в пятой строке вместо rocess ? Соблазн закрыть как опечатку, но могут быть и другие ошибки.
добавлено автор Amadan, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском