繁体   English   中英

如何在AWS Lambda上运行像`pdflatex`这样的二进制文件?

[英]How to run binary like `pdflatex` on AWS Lambda?

由于AWS Lambda支持运行二进制文件 ,我想在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文件包含以上所有内容。

我所产生的pdflatexcp $(which pdflatex) pdflatex

  1. 这是上传pdflatex的正确方法吗? 这个方法有问题吗? 有没有更好的办法?

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

但是,正如我想象的那样,它们与运行AWS Lambda的Linux版本不兼容,因此我解雇了一个CentOS并将lib______.so文件复制到bin/文件夹,但这也无效。

  1. 有没有办法“转储”包含所有必需依赖项的pdflatex的自包含版本,并且可以在不需要共享OS库的情况下运行?

  2. 我是否需要在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进行编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM