Используйте библиотеку tiff2pdf в AWS Lambda
Я пытаюсь создать лямбду, которая будет конвертировать файлы Tiff в файлы PDF, чтобы позже загрузить их в S3. Для этого я использую библиотеку tiff2pdf .
Я скопировал исполняемый файл библиотеки внутри лямбды. Но я сталкиваюсь с ошибками. На самом деле я пробовал разные подходы. Я опубликую здесь последнюю.
По сути, я выполнил следующие шаги:
- Я скачал исходный код
libtiff
библиотеку и скомпилируйте ее внутри экземпляра ec2, используя Amazon Linux. - Позже на основе моей базы лямбда-кода я создал
bin
папка, куда я поместил исполняемый файл из компиляции шага 1. - Я создал класс для преобразования PDF-файла, который должен выполнить команду
tiff2pdf -o file.pdf file.tiff
. - Я загрузил свою базу кода на лямбде, созданной с помощью Nodejs v18.
Это класс, упомянутый в пункте 3:
import { exec } from 'child_process';
import { promisify } from 'util';
import { join } from 'path';
import { readFileSync, writeFileSync } from 'fs';
import * as path from 'path';
export default class TiffToPdfConverter {
static async convert(inputPath, outputPath) {
try {
// Load the bundled tiff2pdf binary as an asset
const tiff2pdfBinary = readFileSync(join(path.resolve(path.dirname(''), 'bin', 'tiff2pdf')));
// Write the binary to a temporary file in the /tmp directory
const tiff2pdfPath = '/tmp/tiff2pdf';
writeFileSync(tiff2pdfPath, tiff2pdfBinary, { mode: 0o755 });
// Execute the tiff2pdf conversion command using the provided binary path
const command = `${tiff2pdfPath} -o ${outputPath} ${inputPath}`;
console.log('command', command);
await promisify(exec)(command);
} catch (error) {
console.error('Error converting TIFF to PDF:', error);
throw error;
}
}
}
Мне пришлось переместить библиотеку внутрь/tmp
библиотека, потому что раньше у меня были ошибки, говорящие о доступе только для чтения. Но даже несмотря на то, что у меня продолжает возникать следующая ошибка:
/tmp/tiff2pdf: line 202: cd: /home/ec2-user/libtiff/tiff-4.5.0/tools: No such file or directory
/tmp/tiff2pdf: line 202: gcc: command not found
Я заметил, что внутри исполняемого файла есть ссылка на этот адрес. Я просто не знаю, как его заменить. Это ссылка внутри исполняемого файла tiff2pdf:
relink_command="(cd /home/ec2-user/libtiff/tiff-4.5.0/tools; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH; gcc -g -O2 -Wall -W -o \$progdir/\$file tiff2pdf.o ../libtiff/.libs/libtiff.so ../port/.libs/libport.a -ljpeg -lz -lm -Wl,-rpath -Wl,/home/ec2-user/libtiff/tiff-4.5.0/libtiff/.libs -Wl,-rpath -Wl,/usr/local/lib)"
Кто-нибудь может мне здесь помочь?