Я хочу написать обработчик, который отвечает на события 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
двоичный файл перед загрузкой, но это не изменило ситуацию.
Как перенести файл? Это то, что я могу сделать один раз из командной строки или мне нужно сделать это в коде в начале метода? – moarCoffee
В начале метода. Если 'mv' терпит неудачу, попробуйте' cp'. Это всегда сработало для меня. – helloV
Извините, что не вернулся к вам раньше. Я использовал 'ProcessBuilder', чтобы сделать так, как вы сказали, и все это работает хорошо. Спасибо за помощь! – moarCoffee