如何在 AWS Lambda 上 运行 像 `pdflatex` 这样的二进制文件?
How to run binary like `pdflatex` on AWS Lambda?
由于 AWS Lambda 支持 running binaries,我想在 AWS Lambda 中 运行 pdflatex
,但我偶然发现了一些问题。我已经成功 运行 其他二进制文件,但是 pdflatex
有许多共享的 OS 库依赖项,我不知道如何让它工作。
示例代码如下所示:
'use strict';
let exec = require('child_process').exec;
exports.handler = (event, context, callback) => {
const child = exec('LD_LIBRARY_PATH=bin/ ./pdflatex my-file.tex', (error) => {
callback(error, 'Process complete!');
});
child.stdout.on('data', console.log);
child.stderr.on('data', console.error);
};
ZIP 文件如下所示:
index.js -------------- where the above code is
pdflatex -------------- binary from my OS
my-file.tex ----------- a sample LaTeX document
bin/ ------------------ folder with shared OS libraries
上传的 ZIP 文件包含以上所有内容。
我用 cp $(which pdflatex) pdflatex
生成了 pdflatex
。
- 这样上传是正确的
pdflatex
吗?这个方法有什么问题吗?有没有更好的方法?
第一次尝试 运行 后,AWS Lambda 抱怨许多 lib_____.so
丢失,所以我将它们从我的机器复制到 ZIP 内的 bin/
文件夹.我使用 ldd $(which pdflatex)
来查找 pdflatex
的依赖项。
然而,正如我想象的那样,它们与 运行 AWS Lambda 的 Linux 版本不兼容,所以我开了一个 CentOS 并复制了 lib______.so
文件到 bin/
文件夹,但这也不起作用。
有没有办法 "dump" pdflatex
的自包含版本,它包含所有必需的依赖项并且 运行 不需要共享 OS 图书馆?
我需要在 Amazon Linux 实例中编译 pdflatex
吗?如果我在 64 位架构下编译,而代码 运行 在 32 位架构下编译,它不会失败吗?
生成用于 Lambda 的二进制文件的最佳方法是在 Lambda 使用的 Linux 相同版本上复制或编译它们。亚马逊在这里有一个 AMI 图像列表:http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html。从其中一个创建一个 EC2 实例,安装软件包,然后将文件复制到您的 zip 中。
对于 #2,您可以通过静态编译来简化依赖关系,但除非您熟悉从源代码构建包,否则我不会尝试这样做。您需要在 link 阶段使用 -static
进行编译。
由于 AWS Lambda 支持 running binaries,我想在 AWS Lambda 中 运行 pdflatex
,但我偶然发现了一些问题。我已经成功 运行 其他二进制文件,但是 pdflatex
有许多共享的 OS 库依赖项,我不知道如何让它工作。
示例代码如下所示:
'use strict';
let exec = require('child_process').exec;
exports.handler = (event, context, callback) => {
const child = exec('LD_LIBRARY_PATH=bin/ ./pdflatex my-file.tex', (error) => {
callback(error, 'Process complete!');
});
child.stdout.on('data', console.log);
child.stderr.on('data', console.error);
};
ZIP 文件如下所示:
index.js -------------- where the above code is
pdflatex -------------- binary from my OS
my-file.tex ----------- a sample LaTeX document
bin/ ------------------ folder with shared OS libraries
上传的 ZIP 文件包含以上所有内容。
我用 cp $(which pdflatex) pdflatex
生成了 pdflatex
。
- 这样上传是正确的
pdflatex
吗?这个方法有什么问题吗?有没有更好的方法?
第一次尝试 运行 后,AWS Lambda 抱怨许多 lib_____.so
丢失,所以我将它们从我的机器复制到 ZIP 内的 bin/
文件夹.我使用 ldd $(which pdflatex)
来查找 pdflatex
的依赖项。
然而,正如我想象的那样,它们与 运行 AWS Lambda 的 Linux 版本不兼容,所以我开了一个 CentOS 并复制了 lib______.so
文件到 bin/
文件夹,但这也不起作用。
有没有办法 "dump"
pdflatex
的自包含版本,它包含所有必需的依赖项并且 运行 不需要共享 OS 图书馆?我需要在 Amazon Linux 实例中编译
pdflatex
吗?如果我在 64 位架构下编译,而代码 运行 在 32 位架构下编译,它不会失败吗?
生成用于 Lambda 的二进制文件的最佳方法是在 Lambda 使用的 Linux 相同版本上复制或编译它们。亚马逊在这里有一个 AMI 图像列表:http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html。从其中一个创建一个 EC2 实例,安装软件包,然后将文件复制到您的 zip 中。
对于 #2,您可以通过静态编译来简化依赖关系,但除非您熟悉从源代码构建包,否则我不会尝试这样做。您需要在 link 阶段使用 -static
进行编译。