尝试使用ffmpeg时,AWS Lambda权限被拒绝

moa*_*fee 7 linux amazon-ec2 amazon-web-services aws-lambda

我想编写一个响应S3 put事件的处理程序来转换任何上传到mp4的avi文件.我在Java中使用AWS工具包插件在Eclipse中完成它.对于视频转换,我使用ffmpeg和ffmpeg-cli-wrapper,我在源代码树中提供了ffmpeg的静态(linux)二进制文件.

我发现当我上传函数时,二进制文件被放入/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";
    }
}
Run Code Online (Sandbox Code Playgroud)

并且堆栈跟踪的第一行:java.io.IOException: Cannot run program "/var/task/ffmpeg": error=13, Permission denied.

我该如何执行这个二进制文件?我已经完成了其他人的建议和chmod 755上传之前的二进制文件,但它没有什么区别.

hel*_*loV 7

AWS Lambda在Amazon Linux上运行.这是一个众所周知的问题.尝试构建(启用静态)并检查它是否适用于Amazon Linux并上传该二进制文件.您没有chmod文件的权限/var/task/.或尝试这个有效的解决方案:

  • 移动ffmpeg/tmp
  • chmod 755 /tmp/ffmpeg
  • 呼叫 /tmp/ffmpeg

有关详细信息,请参阅此讨论.