无法在AWS Lambda上使用PhantomJS

4
我正在尝试使用node-lambda和网上找到的一些材料来执行phantomjs,主要是https://github.com/justengland/phantom-lambda-template
我在使用node43部署node-lambda时遇到了一些问题,但手动安装最新源代码似乎有所帮助。
但现在我在运行lambda函数时遇到了麻烦。我得到了:
2016-04-12T16:47:12.133Z    3330adb9-00ce-11e6-9c08-d79a6bc84748    Calling phantom:  /var/task/phantomjs [ '/var/task/phantomjs-script.js' ]
2016-04-12T16:47:12.236Z    3330adb9-00ce-11e6-9c08-d79a6bc84748    Error: spawn EACCES
    at exports._errnoException (util.js:870:11)
    at ChildProcess.spawn (internal/child_process.js:298:11)

似乎lambda无法访问幻影二进制文件。我能否以某种方式为该函数提供更多权限来执行此操作?
谢谢。
2个回答

7
这个问题的原因可能是您将本地构建的二进制文件部署到了AWS Lambda上。Lambda要求其二进制文件编译为Amazon Linux格式,否则它将无法执行它们(除非您非常幸运)。
如果您调用任何可执行文件或使用带有二进制文件的库,则需要在Amazon Linux的EC2机器上编译它们,并在Lambda函数中使用其结果。这是一个非常基本的教程
如果您已经这样做了,请确保您正在使用的二进制文件是可执行的(您可以通过调用chmod 777 your_executable来实现)。我猜您已经这样做了(在您的情况下,phantomjs也应该处理这个问题),但这是EACCES错误的主要来源。

其中一个文件缺少执行权限,所以使用chmod 777命令解决了问题。问题的复杂性是由于我正在从Windows机器上传文件。将其在Linux虚拟机上运行并从那里发布可以使整个过程更加容易。 - Marcom
还有一个提示,供其他人尝试此操作。如果Phantom生成任何输出,请确保将其保存到/tmp/文件夹中 :) - Marcom

0

这篇文章有点老了,但我刚解决了一个相关的问题,想在这里留下关键的部分以供后人参考。除了@birnbaum所说的二进制文件需要在Amazon Linux机器上编译之外,您还需要在Linux机器上打包可部署的软件包(zip文件)!如果不这样做,运行时将能够找到您的二进制文件,但无法创建实际的浏览器实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接