node.js - AWS Lambda NodeJS12.x - 加载共享库时出错 : libXrender. so.1

标签 node.js amazon-web-services aws-lambda wkhtmltopdf

我已将 lambda 函数从 nodejs8 更新为 nodejs12。

wkhtmltopdf 与 nodejs 8 运行良好,但现在我收到此错误:

"wkhtmltopdf: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory



我试图将 librairie libXrender 手动放入文件项目中,但它不起作用。

如果有人有关于如何使 wkhtmltopdf 在 nodejs 12 中的 aws lambda 上工作的解决方案,那就太好了。先感谢您。

最佳答案

我曾经也有过一样的问题。最终从 Amazon Linux 2 图像中提取必要的库+字体,如下所示:

1) 运行并进入 Amazon Linux 2 的 docker 容器:

docker run -it --rm amazonlinux:2.0.20191217.0

2)在docker容器内部安装必要的工具,并自动准备必要的依赖项(基于64位):
mkdir -p /deps
yum install -y yum-utils rpmdevtools
yum install -y libXrender.x86_64 fontconfig.x86_64 freetype.x86_64 libXext.x86_64 libX11.x86_64 expat.x86_64 libxcb.x86_64 libXau.x86_64
yumdownloader libXrender.x86_64 fontconfig.x86_64 freetype.x86_64 libXext.x86_64 libX11.x86_64 expat.x86_64 libxcb.x86_64 libXau.x86_64
rpmdev-extract *rpm
cp /tmp/*/usr/lib64/* /deps
cp -R /tmp/*/etc/fonts /deps/

3) 打开一个新的终端窗口并导航到 PDF lambda 文件夹。使用 docker ps命令,找到容器 ID 并粘贴以下命令:
docker cp <CONTAINER_ID>:/deps/ . && mv deps/* . && rmdir deps

4) 替换<your_lambda_path>/deps/fonts/fonts.conf的内容与此,或提供您自己的配置 + 字体文件:
<fontconfig>
<dir>/var/task/fonts/</dir>
<cachedir>/tmp/fonts-cache/</cachedir>
<config></config>
</fontconfig>

5) 在您的处理程序中,您需要设置以下内容来查找字体:
process.env['FONTCONFIG_PATH'] = process.env['LAMBDA_TASK_ROOT'] + '/fonts'

这样做之后,只需像往常一样压缩您的包并进行部署。

希望有帮助

关于node.js - AWS Lambda NodeJS12.x - 加载共享库时出错 : libXrender. so.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634324/

相关文章:

aws-lambda - 如何使用多种方法从API网关触发AWS Lambda?

node.js - 是否可以在 Node.js 中 fork 一个 javascript 函数?

mysql - 为我的 EC2 和 RDS 设置设置测试环境

javascript - 在 Node 上使用 PDF-LIB 加载 PDF 文档给出 "No PDF header found"

amazon-web-services - 工件的类型和文件是什么,aws buildspec yaml 文件

node.js - 在 Amazon EC2 上运行一个简单的 HTTPS Node JS 服务器

amazon-web-services - SAM 部署因 Lambda 函数的大小问题而失败

amazon-web-services - 如何在每个请求上调用 lambda 自定义授权者?

node.js - 网络请求的并行化对于 Node.js 工作线程来说是一个很好的用途吗?

node.js - 如何在 Azure 机器人消息文本中添加超链接