无法在AWS Lambda中使用ghostscript

时间:2019-07-02 21:22:47

标签: python-3.x aws-lambda

我正在尝试使用ghostscript在AWS Lambda中将pdf转换为tiff。一切都在本地运行,我得到了很好的快速转换。有人告诉我Lambda内置了一个(旧)版本的ghostscript,可以使用,但是我似乎无法调用它。

我尝试使用os.system命令直接调用ghostscript,也尝试使用pip安装的ghostscript版本,但均无效。

os.system("gs -q -dBATCH -dNOPAUSE "
                "-sDEVICE=tiffg4 -r600 "
                "-sOutputFile=" + upload_path + " " + download_path)

我遇到以下错误:

  

sh:gs:找不到命令

我不明白为什么或如何解决它。

2 个答案:

答案 0 :(得分:1)

我按照this文档中的说明通过使用正确的AMI(对我来说是第一个链接here)启动ec2实例,但这只能帮助您取出共享库,最终当该部分出现时是以下命令:

yumdownloader ghostscript.x86_64 avahi-libs.x86_64 cairo.x86_64 cups-libs.x86_64 ghostscript-fonts.noarch gnutls.x86_64 jasper-libs.x86_64 jbigkit-libs.x86_64 libXdamage.x86_64 libXfixes.x86_64 libXt.x86_64 libXxf86vm.x86_64 libdrm.x86_64 libglvnd.x86_64 libglvnd-glx.x86_64 libpciaccess.x86_64 libtiff.x86_64 libxshmfence.x86_64 mesa-dri-drivers.x86_64 mesa-filesystem.x86_64 mesa-libGL.x86_64 mesa-libglapi.x86_64 pixman.x86_64 urw-fonts.noarch

所以我用yum安装了ghostscript 8.70,安装后从/tmp/ghostscript-8.70-24.26.amzn1.x86_64/usr获得了共享和bin文件夹。
通过上面的链接将获得的库放在/ lib中,然后将/ bin和/ shared放在lambda zip中的/ ghostscript中。 现在,我的node.js函数的zip文件如下所示:
src /
ghostscript /
lib /
...等

我将脚本更改为使用LAMBDA_TASK_ROOT为gs(现在为/ var / task / ghostscript / bin / gs)构建二进制路径,但出现错误,提示找不到gs_init.ps。 在此版本中,他们为这些文件使用了share / Resource / Init,因此我将此位置作为环境变量添加到了lambda函数上(KEY:GS_LIB,VALUE:/var/task/ghostscript/share/ghostscript/8.70/Resource/Init ),然后一切又恢复正常了。

答案 1 :(得分:0)

Aws刚刚升级了Lambda当前运行的linux版本。

https://aws.amazon.com/blogs/compute/upcoming-updates-to-the-aws-lambda-execution-environment/

Ghostscript在以前的AMI版本上运行良好,但是在新版本上似乎已损坏。

https://forums.aws.amazon.com/thread.jspa?threadID=306787&tstart=0