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

时间:2016-03-17 14:26:29

标签: linux amazon-web-services amazon-ec2 aws-lambda

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

我发现当我上传该函数时,二进制文件会被放入/var/task,但是当我尝试使用我编写的测试函数时,我得到了一个"权限被拒绝&# 34;错误。

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二进制文件进行了上传,但它没有起到作用。

3 个答案:

答案 0 :(得分:6)

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

  • /tmp移至chmod 755 /tmp/ffmpeg
  • /tmp/ffmpeg
  • 致电process

有关详细信息,请参阅此discussion

答案 1 :(得分:1)

我最近遇到了这个问题,在搞了各种手动解决方案之后,真正解决了这个问题的是:

  1. 创建一个 Lambda 层,在 ffmpeg 文件夹中只有 bin/ 二进制文件
  2. 创建一个 Lambda 函数来实现该层,并在 python 代码中运行 /opt/bin/ffmpeg

https://aws.amazon.com/blogs/media/processing-user-generated-content-using-aws-lambda-and-ffmpeg/

答案 2 :(得分:0)

正如helloV所提到的,您可能必须包含静态ffmpeg二进制文件并将其复制到某个位置并从那里执行。 给出详细答案(node.js代码)here