【发布时间】:2019-11-25 18:51:38
【问题描述】:
在过去的 18 个月里,我在 S3 对象上运行了一个 AWS Lambda 函数,但它在大约一个月前在一次小更新后就死了。我已经恢复了它,但它仍然坏了。我已经研究过使用 ImageMagick 进行最基本的 pdf 转换,但没有成功,所以我认为 AWS 更新了一些内容并导致 pdf 模块被删除或停止工作。
我只完成了我在 Node.js 8.10 中的核心代码中基本完成的基本功能:
gm(response.Body).setFormat("png").stream((err, stdout,stderr) => {
if (err) {
console.log('broken');
}
const chunks = [];
stdout.on('data', (chunk) => {
chunks.push(chunk);
});
stdout.on('end', () => {
console.log('gm done!');
});
stderr.on('data', (data) => {
console.log('std error data ' + data);
})
});
带有错误响应:
标准错误数据转换:无法加载模块`/usr/lib64/ImageMagick-6.7.8/modules-Q16/coders/pdf.la':找不到文件
我还尝试迁移到 Node.js 10.x 并使用可通过 aws 无服务器应用程序存储库获得的 ImageMagick 层。在相同的代码上尝试这个会产生这个错误
标准错误数据转换:FailedToExecuteCommand `'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 '-sDEVICE=pngalpha' -dTextAlphaBits=4 -dGraphicsAlphaBits=4 '-r72x72' '-sOutputFile=/tmp/magick-22TOeBgB4WrfoN%d' '-f/tmp/magick-22KvuEBeuJuyq3' '-f/tmp/magick-22dj24vSktMXsj'' (1) @error/pdf。 c/InvokePDFDelegate/292
在这两种情况下,该函数在图像文件上运行时都能正常工作。
基于此,我认为 aws 8.10 ImageMagick 和 10 层都缺少 pdf 模块,但我不确定如何添加它或为什么首先将其删除。修复此功能的最佳方法是什么?
编辑
所以我已经下载了https://github.com/serverlesspub/imagemagick-aws-lambda-2 并手动构建了库,将其上传到 Lambda 并使其成功地作为一个层工作,但是它不包含作为可选库的 GhostScript。我尝试将它添加到Makefile_ImageMagick,它构建并在结果中有一些对 Ghostscript 的引用,但运行它并不能解决 PDF 问题(图像仍然有效)。将 GhostScript 可选库添加到 Make 文件的最佳方法是什么?
【问题讨论】:
-
您是否为 Imagemagick 安装了 Ghostscript?如果你不这样做,那么你需要它。如果您这样做,那么您可能需要编辑 delegates.xml 文件以插入到 gs (ghostscript) 的完整路径以获取 PDF 相关条目。或者您可能需要编辑您的 policy.xml 文件以授予对 PDF 文件的读写权限。见stackoverflow.com/questions/52861946/…。对不起,我不知道或使用 AWS
-
@fmw42 我不需要,但我以前不需要它。 AWS 是否删除了它?
-
什么意思,你以前不需要它?在 AWS 或只是 Imagemagick 上。阅读 PDF 文件总是需要 Ghostscript。不需要编写它们。如果您的 Imagemagick 版本以前是旧的,则 policy.xml 文件可能没有包含它。它是在几个月前报告有关 Ghostscript 的安全错误时添加的。也许 AWS 更新了 Imagemagick 并在 policy.xml 文件中引入了新条目。或者他们可能遗漏了 Ghostscript。
-
同样的问题!看起来像一个 AWS 问题,因为它已经运行了一年多...
-
我相信AWS Lambda默认不再包含ghostscript,也就是ImageMagick使用的PDF委托。
标签: node.js amazon-web-services pdf aws-lambda imagemagick