Поскольку AWS Lambda поддерживает запуск двоичных файлов, я хотел запустить pdflatex
в AWS Lambda, но я наткнулся на несколько проблем. Я успешно запускал другие двоичные файлы, но 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
отсутствуют, поэтому я скопировал их со своего компьютера в папку bin/
внутри ZIP-файла. Я использовал ldd $(which pdflatex)
для поиска зависимостей pdflatex
.
Однако, как я и предполагал, они были несовместимы с версией Linux, на которой работает AWS Lambda, поэтому я запустил CentOS и скопировал файлы lib______.so
в папку bin/
, но это тоже не сработало.
Есть ли способ «выгрузить» автономную версию
pdflatex
, которая содержала бы все необходимые зависимости и работала бы без необходимости использования общих библиотек ОС?Нужно ли компилировать
pdflatex
внутри инстанса Amazon Linux? Что, если я скомпилирую его в 64-битной архитектуре, а код запустится в 32-битной архитектуре, не произойдет ли сбой?