无法让phantomjs在aws lambda上工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法让phantomjs在aws lambda上工作相关的知识,希望对你有一定的参考价值。

我正在尝试使用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无法访问幻像二进制文件。有什么办法可以让函数获得更多的权限吗?

谢谢

答案

出现此问题的原因可能是您将本地构建的二进制文件部署到AWS Lambda。 Lambda requires it's binaries to be compiled for Amazon Linux,否则它无法执行它们(除非你是超级幸运的)。

如果您正在调用任何可执行文件或使用二进制文件附带的库,则需要在使用Amazon Linux的EC2计算机上编译它们,并使用Lambda函数中的结果。 This is a very basic tutorial

如果您已经这样做了,还要确保您使用的二进制文件是可执行的(您可以通过调用chmod 777 your_executable来执行此操作)。我猜你已经这样做了(在你的情况下,phantomjs也应该照顾这个),但这是EACCES的主要错误来源。

另一答案

这有点老了,但我刚刚解决了一个相关的问题,并希望在此发布关键部分以供后人使用。除了@birnbaum所说的关于需要在Amazon linux机器上编译的二进制文件之外,还需要在Linux机器上捆绑可部署软件包(zip文件)!如果不这样做,运行时将能够找到您的二进制文件,但不能创建实际的浏览器实例。

以上是关于无法让phantomjs在aws lambda上工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NodeJS 在 AWS Lambda 上运行 PhantomJS

如何在 Python 中从 AWS 中的 lambda 函数返回二进制数据?

是否可以让 AWS Lambda 函数保持温暖?

AWS Lambda超时时获取通知

如何将 jQuery Validate 与我的 aws lambda 函数集成?

AWS Lambda 无法调用没有 VPC 的另一个 AWS Lambda - NodeJs