node.js - 无法在 AWS Lambda 上将 pdf 转换为图像
问题描述
我有一个 Nodejs 8.10 lambda,它将 pdf 转换为 png,直到几天前它都可以正常工作。这似乎是由于 AWS 更新引起的错误 https://aws.amazon.com/blogs/compute/upcoming-updates-to-the-aws-lambda-execution-environment/
{
Error: Command failed: convert -density 200 -quality 75 "/tmp/temp_file.pdf[0]" "/tmp/temp_file-0.png"
convert: unable to load module `/usr/lib64/ImageMagick-6.7.8/modules-Q16/coders/pdf.la': file not found @ error/module.c/OpenModule/1278.
convert: no decode delegate for this image format `/tmp/temp_file.pdf' @ error/constitute.c/ReadImage/544.
convert: no images defined `/tmp/temp_file-0.png' @ error/convert.c/ConvertImageCommand/3046.
}
通过添加将在 7 月 22 日之后停止工作的公共层解决了该错误:arn:aws:lambda:::awslayer:AmazonLinux1703
我尝试为 AWS Lambda 创建 ImageMagick 静态二进制文件。我遵循了 ImageMagic 6.9.10-5 版的这些说明 https://gist.github.com/bensie/56f51bc33d4a55e2fc9a
https://imagemagick.org/download/ImageMagick-6.9.10-55.tar.gz
lambda 的文件夹结构:
我尝试了 png 图像的基本调整大小:
var IM_PATH = "var/task/imagemagick/bin/";
process.env['LD_LIBRARY_PATH'] = 'var/task/imagemagick/lib/';
process.env['PATH'] = process.env['PATH'] + ':' + IM_PATH + ':' + process.env['LD_LIBRARY_PATH'];
var gm = require('gm').subClass({
imageMagick: true,
appPath: 'var/task/imagemagick/bin/',
});
gm('image.png')
.resize(240, 240, '!')
.write('/tmp/resize.png', function (err) {
if (!err) console.log('done');
else {
console.log(err);
}
});
尝试在节点 8.10 和节点 10.x lambdas 上运行,这里出现错误:
1) 节点 8.10
{ Error: Command failed: convert: UnableToOpenConfigureFile `delegates.xml' @ warning/configure.c/GetConfigureOptions/677.
convert: NoDecodeDelegateForThisImageFormat `PNG' @ error/constitute.c/ReadImage/560.
convert: NoImagesDefined `/tmp/resize.png' @ error/convert.c/ConvertImageCommand/3235.
at ChildProcess.onExit (/var/task/node_modules/gm/lib/command.js:301:17)
at emitTwo (events.js:126:13)
at ChildProcess.emit (events.js:214:7)
at maybeClose (internal/child_process.js:925:16)
at Socket.stream.socket.on (internal/child_process.js:346:11)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at Pipe._handle.close [as _onclose] (net.js:567:12) code: 1, signal: null }
2) 节点 10.x
{ Error: Command failed: var/task/imagemagick/bin/convert: error while loading shared libraries: libgomp.so.1: cannot open shared object file: No such file or directory
at ChildProcess.onExit (/var/task/node_modules/gm/lib/command.js:301:17)
at ChildProcess.emit (events.js:189:13)
at ChildProcess.EventEmitter.emit (domain.js:441:20)
at maybeClose (internal/child_process.js:970:16)
at Socket.stream.socket.on (internal/child_process.js:389:11)
at Socket.emit (events.js:189:13)
at Socket.EventEmitter.emit (domain.js:441:20)
at Pipe._handle.close (net.js:597:12) code: 127, signal: null }
解决方案
推荐阅读
- html - 使用响应式页面重新分配 div 内的项目
- java - Maven 项目将 JDBC 驱动程序作为依赖项,但如果没有 Class.forName 则不会加载它们
- linux - 如何获取目录中最新文件的 MD5 校验和?
- python - python json to csv,json.decoder.JSONDecodeError: Unterminated string started at: line 1 column 67 (char 66),如何跳过错误
- reactjs - React redux 表单 - 提交时的值未定义
- flutter - Revenuecat 工作但无法调用付款屏幕
- reactjs - ReactJS Hooks:打开和关闭多个模式/对话框的最佳实践
- c++ - C++ 如何在 C++ 中使用 dlopen()?
- typescript - 联合类型的 IntelliJ Typescript 智能
- c++ - 智能指针作为使用 std::function、std::bind 的函数的参数