我想编写一个响应S3 put事件的处理程序,以将上载到mp4的任何avi文件转换为。我使用AWS工具包插件在Java中,Eclipse中进行了此操作。对于视频转换,我将ffmpeg与ffmpeg- cli-wrapper一起使用,并且在源代码树中提供了ffmpeg的静态(Linux)二进制文件。
我发现上载函数时,二进制文件被放入/var/task,但是当我尝试使用编写的测试函数时,出现“权限被拒绝”错误。
/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"; } }
和堆栈跟踪的第一行:java.io.IOException: Cannot run program "/var/task/ffmpeg": error=13, Permission denied。
java.io.IOException: Cannot run program "/var/task/ffmpeg": error=13, Permission denied
如何执行此二进制文件?我已经按照其他人的建议做了,并且chmod 755在上传之前使用了二进制文件,但是并没有改变。
chmod 755
AWS Lambda在Amazon Linux上运行。这是一个已知问题。尝试构建(启用静态功能)并检查它是否在Amazon Linux上运行并上传该二进制文件。您没有对chmod中文件的特权/var/task/。或者尝试以下可行的解决方案:
chmod
/var/task/
ffmpeg
/tmp
chmod 755 /tmp/ffmpeg
/tmp/ffmpeg
有关更多信息,请参见此讨论。