Используйте библиотеку tiff2pdf в AWS Lambda

Я пытаюсь создать лямбду, которая будет конвертировать файлы Tiff в файлы PDF, чтобы позже загрузить их в S3. Для этого я использую библиотеку tiff2pdf .

Я скопировал исполняемый файл библиотеки внутри лямбды. Но я сталкиваюсь с ошибками. На самом деле я пробовал разные подходы. Я опубликую здесь последнюю.

По сути, я выполнил следующие шаги:

  1. Я скачал исходный кодlibtiffбиблиотеку и скомпилируйте ее внутри экземпляра ec2, используя Amazon Linux.
  2. Позже на основе моей базы лямбда-кода я создалbinпапка, куда я поместил исполняемый файл из компиляции шага 1.
  3. Я создал класс для преобразования PDF-файла, который должен выполнить командуtiff2pdf -o file.pdf file.tiff.
  4. Я загрузил свою базу кода на лямбде, созданной с помощью 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)"

Кто-нибудь может мне здесь помочь?

0 ответов

Другие вопросы по тегам