Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

656
Vistas
Falta el archivo al intentar cambiar el tamaño en Sharp en la función AWS Lambda

Estoy sinceramente desconcertado por esto. Simplemente estoy tratando de invocar una función Lambda desde una aplicación Node JS y cambiar el tamaño de la imagen en ella. La invocación tiene éxito y se llama a la función (puedo pasarle parámetros y verlos devueltos), sin embargo, cuando intento usar Sharp para cambiar el tamaño de la imagen, aparece el extraño error de que falta el archivo de entrada. No lo es, ya que puedo confirmar definitivamente que el búfer de hecho se pasa a Lambda.

Puedo confirmar que usar Sharp localmente funciona. En la invocación, soy JSON que encadena la carga útil y puedo confirmar que Lambda realmente pasa los parámetros y los recibe. Los estoy mapeando correctamente desde el primer argumento de 'evento' en la invocación. Sin embargo, la inclusión de Sharp en Lambda simplemente se rompe.

He creado un nuevo proyecto 'Sharp' y he instalado los módulos de nodo. Estos se empaquetan con la función de índice de Lambda en un archivo y se cargan en el zip. Lo único que es bastante diferente es que para usar Sharp dentro de Lambda, tuve que instalar la versión de Linux.

npm install --arch=x64 --platform=linux sharp

Tengo un script de prueba en Lambda donde he copiado una carga útil completa que incluye un búfer adecuado. Tanto el script de prueba como mi máquina local arrojan el mismo error:

 { "errorType": "Error", "errorMessage": "Input file is missing", "trace": [ "Error: Input file is missing" ] }

Esta es mi función Lambda.

 const sharp = require('sharp'); exports.handler = async (event) => { return await sharp(event.buffer) .resize({ width: event.maxWidth, height: event.maxHeight, fit: 'inside', withoutEnlargement: true }) .jpeg({ quality: 80 }) .toBuffer(); }

Y esta es mi invocación.

 const thumbImage = await lambda.invoke({ FunctionName: 'sharp-resize', Payload: JSON.stringify({ buffer: file.buffer, maxWidth, maxHeight }) }).promise();

Cualquier idea o ayuda sería apreciada.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Finalmente me di cuenta de esto, y realmente era algo tan simple. Al encadenar el búfer, Lambda necesitaba recrear el búfer a partir de la propiedad event.buffer. Cuando la función devolvió la imagen redimensionada, la encadené nuevamente antes de recrear el búfer al recibirlo. Luego fue una simple cuestión de publicar el nuevo búfer en S3.

Mi lambda final:

 const sharp = require('sharp'); exports.handler = async (event) => { let buffer = Buffer.from(event.buffer.data); buffer = await sharp(Buffer.from(buffer)) .resize({ width: event.maxWidth, height: event.maxHeight, fit: 'inside', withoutEnlargement: true }) .jpeg({ quality: 80 }) .toBuffer(); } return { statusCode: 200, headers: { "Access-Control-Allow-Origin": "*" }, buffer: JSON.stringify(buffer) }; }

Y mi invocación y publicación en S3:

 const thumbImage = await lambda.invoke({ FunctionName: 'sharp-resize', Payload: JSON.stringify({ extension, buffer: file.buffer, maxWidth, maxHeight }) }).promise(); const payload = JSON.parse(thumbImage.Payload); const buffer = JSON.parse(payload.buffer); const parsedBuffer = Buffer.from(buffer.data); response.thumbImage = await uploadToS3({ key: amazonS3ThumbKey, file: parsedBuffer });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda