当前位置: 首页 > 面试题库 >

如何在AWS Lambda上安装phantomjs?

权承
2023-03-14
问题内容

我发现一个有4年历史的项目应该在lambda上安装phantomjs,但是我做错了什么,或者自从创建回购以来事情已经发生了变化,并且不再起作用。克隆并部署此存储库时,尝试运行phantomjs时出现此错误:

{
  "errorType": "Error",
  "errorMessage": "write EPIPE",
  "code": "EPIPE",
  "stack": [
    "Error: write EPIPE",
    "    at WriteWrap.afterWrite [as oncomplete] (net.js:779:14)"
  ],
  "errno": "EPIPE",
  "syscall": "write"
}

{
  "errorType": "Error",
  "errorMessage": "html-pdf: Received the exit code '127'\n./phantomjs_lambda/phantomjs_linux-x86_64: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory\n",
  "stack": [
    "Error: html-pdf: Received the exit code '127'",
    "./phantomjs_lambda/phantomjs_linux-x86_64: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory",
    "",
    "    at ChildProcess.respond (/var/task/node_modules/html-pdf/lib/pdf.js:121:31)",
    "    at ChildProcess.emit (events.js:189:13)",
    "    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)"
  ]
}

如果我使用最新的linux二进制文件而不是此仓库附带的二进制文件,则会收到有关另一个.so文件丢失的不同但相似的错误。

对于上下文,我要安装phantomjs的原因是因为我想在我的lambda中使用节点html-
pdf库

我在Mac上。

作为答案,我不是想越过这个特定的错误,而只是发现下一个错误。 我正在寻找一个答案,可以让我在AWS
Lambda上运行phantomjs。如果存在另一个不需要phantomjs就能轻松在AWS Lambda上运行的“ html to pdf” /“
html to png”库节点,那也是可以接受的解决方案。


问题答案:

一种解决方案是在Lambda函数.zip文件中包含PhantomJS所需的库。我将其分为几个步骤。

您的错误消息指出缺少共享库。让我们通过将PhantomJS安装在Docker容器中并检查其运行时依赖关系来确切地找到PhantomJS的需求。nodejs10.x
AWS Lambda运行时使用Amazon Linux 2,但步骤与早期运行时相似。

在您的主机系统上,运行一个Amazon Linux 2 Docker容器:

$ docker run -it --rm amazonlinux:2.0.20190508

在容器中,安装PhantomJS并检查其依赖性:

bash-4.2$ yum install -y bzip2 tar
bash-4.2$ curl -LO https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
bash-4.2$ tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2
bash-4.2# ldd ./phantomjs-2.1.1-linux-x86_64/bin/phantomjs 
        linux-vdso.so.1 (0x00007ffdd251f000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f35d0439000)
        libfontconfig.so.1 => not found
        libfreetype.so.6 => not found
        ...

我们看到缺少libfontconfig和libfreetype。

安装库

接下来,我们将下载并提取所需的库,然后将它们复制到主机系统。请注意,libfontconfig取决于libexpat,因此我们也将安装它。

在容器中:

bash-4.2$ yum install -y yum-utils rpmdevtools
bash-4.2$ cd /tmp
bash-4.2$ yumdownloader fontconfig.x86_64 freetype.x86_64 expat.x86_64
bash-4.2$ rpmdev-extract *.rpm

将库复制到目录中:

bash-4.2$ mkdir -p /deps
bash-4.2$ cp /tmp/*/usr/lib64/* /deps

还复制fontconfig配置文件:

bash-4.2$ cp /tmp/*/etc/fonts/fonts.conf /deps

接下来,在主机上,获取Docker容器ID,并将文件从容器复制到主机。以下lambda-node- phantom是克隆https://github.com/TylerPachal/lambda-node-
phantom存储库的目录:

$ cd lambda-node-phantom
$ docker ps
$ docker cp <CONTAINER_ID>:/deps/ .
$ mv deps/* . && rmdir deps

更新Lambda

将目录中的PhantomJS二进制文件更新为在上述Docker容器中下载的版本。确保index.js使用最新版本的正确名称;在2.1.1版中,其名为phantomjs

接下来,添加以下行,index.js以便fontconfig fonts.conf在Lambda根目录中找到:

process.env['FONTCONFIG_PATH'] = process.env['LAMBDA_TASK_ROOT'];

最后,重新创建Lambda函数.zip文件,包括本地库和font.conf

$ zip -y /path/to/lambda-node-phantom-dist.zip .

-y选项将符号链接存储为链接而不是引用文件。为了节省空间,请确保该.git目录未包含在.zip文件中。

测试Lambda

在AWS Lambda控制台中,上传新的Lambda函数.zip文件并测试Lambda函数。PhantomJS现在应该运行没有错误,并且您的函数应该返回“
hello from phantom!”。如果不是,请检查stderrPhantomJS子进程返回的信息。

您可能需要修改fonts.conf和/或包括其他文件才能正确呈现字体。



 类似资料:
  • 问题内容: 创建一个显示CSV文件中最新天气的网页后,我需要做一个项目。 我想了解一些详细的操作方法(不要真正获得http://flask.pocoo.org/docs/installation/#installation安装设置) 谁能介意简单地说明我的做法? 谢谢。 我在Windows 7和Windows Powershell上运行。 问题答案: Python 2.7.9+和3.4+ 好消息!

  • 问题内容: 我正在尝试使用Python 3.4将其安装在Windows 8.1笔记本电脑上,但失败了。 首先,我尝试了简单明了的解决方案:。但是,这没有用。它是这样说的: 所以然后我看了一个很棒的有用的东西,叫做 互联网 ,很多人都需要和错误。他们推荐了一个叫Christoph Gohlke的页面,其中他为一堆软件包提供了一些二进制工具。您可以在这里找到它(到lxml部分的快速链接)。 因此,在我

  • 问题内容: 我已按照此处的所有说明进行操作:http : //www.tonyspencer.com/2003/10/22/curl-with-php-and- apache-on-windows/ 要安装和配置apache,请获取PHP5软件包并获取CURL软件包。 我运行apache并运行PHP脚本。没问题。但是当我用curl运行php脚本时,它失败了。 它返回: 在第5行被称为 我输出php

  • 本文向大家介绍如何在Ubuntu上安装ImageMagick,包括了如何在Ubuntu上安装ImageMagick的使用技巧和注意事项,需要的朋友参考一下 使用ImageMagick创建,编辑,合成或转换位图pix。它实际上可以用一种编解码器(超过200种)来读取和写入快照,包括PNG,JPEG,JPEG-2000,GIF,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG。

  • 问题内容: 当我尝试使用以下命令在Windows上安装PyQt5时 我收到此错误: 我从PyQt5下载获得了pyQt5 。 如何安装PyQt5? 更新: 我从Qt下载页面安装,现在出现此错误: using the –verbose flag to see more detail about the problem. 当我执行命令时: qtdetail.m k qtdetail.pro nmake

  • 问题内容: 我有一个带有Phalcon3和php 7的Docker容器。我正在尝试安装php扩展名Mcrypt,但不走运。 如果我对容器执行ssh并执行: 我得到以下内容: 有没有办法安装它? 问题答案: 让我们看一下php docker镜像的 官方手册 部分PHP核心扩展 例如,如果您想要一个带有iconv,mcrypt和gd扩展名的PHP- FPM映像,则可以继承您喜欢的基本映像,并编写自己的