AWS node js lambda с использованием gm imagemagick изменение размера, обрезка и получение монохромного тайм-аута

#node.js #aws-lambda #imagemagick #gm

#node.js #aws-lambda #imagemagick #gm

Вопрос:

Моя функция lambda просматривает s3, получает объект и обрезает / изменяет размеры до желаемых размеров, а затем загружает. У меня есть лямбда-слой для imagemagick, и я добился некоторого успеха с изменением размера, но он работает, возможно, в 10% случаев. Это мои функции imagemagick,

 exports.resizeImg = async (buf, width, height) => {
  return new Promise((resolve, reject) => {
    gm(buf).resize(width, height).noProfile().toBuffer((err, buffer) => err ? console.log(err) : resolve(buffer));
   });
};

exports.cropImg = async (buf, width, height) => {
  return new Promise((resolve, reject) => {
    gm(buf).crop(width, height, 0, 0).noProfile().toBuffer((err, buffer) => err ? reject(err) : resolve(buffer));
   });
};

exports.monochromeImg = async (buf) => {
  return new Promise((resolve, reject) => {
    gm(buf).monochrome().noProfile().toBuffer((err, buffer) => err ? reject(err) : resolve(buffer));
   });
};
  

вызов изменения размера или обрезки как

 const resized = await resizeImg(buffer, 200, 200);
  

затем передача двоичного файла / буфера для загрузки в s3, которая работает. Если изменение размера работает.

Я также пытался записать буфер в fs, но и там не повезло.

  exports.resizeImage = async (buf, width, height, path) => {
     gm(buf)
     .resize(width, height, "!")
     .write(path   'output/1111.jpg', function(err){
     if (err) return console.dir(arguments)
     console.log(this.outname   " created  ::  "   arguments[3])
      })
  }
  

imagemagick все еще работает? Или я должен просто использовать sharp?

Ответ №1:

у меня та же ошибка, которую я исправляю, увеличивая время ожидания

новый пользовательский интерфейс aws

 lambda function -> configuration -> General configuration -> Edit Timeout
  

введите описание изображения здесь