2016-03-17 3 views
4

Я хочу написать обработчик, который отвечает на события S3 put, чтобы конвертировать любые avi-файлы, которые загружаются в mp4. Я делаю это на Java, в Eclipse, с плагином инструментария AWS. Для преобразования видео я использую ffmpeg с ffmpeg-cli-wrapper, и я предоставил статический (linux) двоичный файл ffmpeg в исходном дереве.AWS Lambda разрешено при попытке использования ffmpeg

Я обнаружил, что, когда я загружаю функцию, бинарный файл помещается в /var/task, но когда я пытаюсь использовать тестовую функцию, которую я написал, я получаю сообщение об ошибке «отказ в доступе».

import net.bramp.ffmpeg.FFmpeg; 

public class LambdaFunctionHandler implements RequestHandler<S3Event, String> { 

    private static final String FFMPEG = "/var/task/ffmpeg"; 

    public String handleRequest(S3Event event, Context context) { 

     try { 
      FFmpeg ff = new FFmpeg(FFMPEG); 
      System.out.println(ff.version()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return "foo"; 
    } 
} 

И первая линия StackTrace: java.io.IOException: Cannot run program "/var/task/ffmpeg": error=13, Permission denied.

Как выполнить этот двоичный код? Я сделал, как предложили другие, и chmod 755 двоичный файл перед загрузкой, но это не изменило ситуацию.

ответ

5

AWS Lambda работает на Amazon Linux. Это известная проблема. Попробуйте создать (с включенной статикой) и проверить, работает ли он на Amazon Linux и загружает этот двоичный файл. У вас нет привилегий для chmod файлов в /var/task/. Или попробуйте это решение, которое работает:

  • Move ffmpeg в /tmp
  • chmod 755 /tmp/ffmpeg
  • Вызов /tmp/ffmpeg

Смотрите эту discussion для получения дополнительной информации.

+0

Как перенести файл? Это то, что я могу сделать один раз из командной строки или мне нужно сделать это в коде в начале метода? – moarCoffee

+0

В начале метода. Если 'mv' терпит неудачу, попробуйте' cp'. Это всегда сработало для меня. – helloV

+0

Извините, что не вернулся к вам раньше. Я использовал 'ProcessBuilder', чтобы сделать так, как вы сказали, и все это работает хорошо. Спасибо за помощь! – moarCoffee

0

Как упоминалось выше, вам может потребоваться включить статический двоичный файл ffmpeg и скопировать его в место и выполнить оттуда. Дается подробный ответ (код узла.js) here

+0

Да Я использовал двоичные файлы с [этого сайта] (http://johnvansickle.com/ffmpeg/) – moarCoffee

Смежные вопросы