由于 AWS Lambda 支持 running binaries ,我想在 AWS Lambda 中运行 pdflatex ,但我偶然发现了一些问题。我已经成功运行了其他二进制文件,但是 pdflatex 有许多共享的操作系统库依赖项,我不知道如何使它工作。

示例代码如下所示:

'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 文件包含上述所有内容。

我用 pdflatex 生成了 cp $(which pdflatex) pdflatex
  • 这是上传pdflatex 的正确方法吗?这种方法有问题吗?有没有更好的办法?

  • 在第一次尝试运行后,AWS Lambda 提示很多 lib_____.so 丢失,所以我将它们从我的机器复制到 ZIP 内的 bin/ 文件夹。我使用 ldd $(which pdflatex) 来查找 pdflatex 的依赖项。

    然而,正如我想象的那样,它们与运行 AWS Lambda 的 Linux 版本不兼容,所以我启动了一个 CentOS 并将 lib______.so 文件复制到 bin/ 文件夹,但这也不起作用。
  • 有没有办法“转储”包含所有必需依赖项并且无需共享操作系统库即可运行的自包含 pdflatex 版本?
  • 我是否需要在 Amazon Linux 实例中编译 pdflatex?如果我在 64 位架构中编译它并且代码在 32 位架构上运行,它会不会失败?
  • 最佳答案

    生成用于 Lambda 的二进制文件的最佳方法是在 Lambda 使用的同一 Linux 版本上复制或编译它们。亚马逊在这里有一个 AMI 图像列表: http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html 。从其中之一创建一个 EC2 实例,安装软件包,然后将文件复制到您的 zip 文件中。

    对于#2,您可以通过静态编译来简化依赖关系,但除非您熟悉从源代码构建包,否则我不会尝试这样做。您需要在链接阶段使用 -static 进行编译。

    关于amazon-web-services - 如何在 AWS Lambda 上运行像 `pdflatex` 这样的二进制文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37219169/

    10-11 08:01