Límite de tamaño de s3.getObject() en aws-sdk.
Estoy tratando de procesar un archivo tif de 5GB utilizando sharp en una función lambda, pero la solicitud s3.getObject() falla con el siguiente error:
{
"errorType": "RangeError",
"errorMessage": "El valor \"5479395327\" no es válido para la opción \"size\"",
"trace": [
"RangeError [ERR_INVALID_OPT_VALUE]: El valor \"5479395327\" no es válido para la opción \"size\"",
" at Function.alloc (buffer.js:370:3)",
" at Object.alloc (/var/runtime/node_modules/aws-sdk/lib/util.js:136:28)",
" at Object.concat (/var/runtime/node_modules/aws-sdk/lib/util.js:175:28)",
" at Request.HTTP_DONE (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:424:36)",
" at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
" at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
" at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:688:14)",
" at IncomingMessage.onEnd (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:334:26)",
" at IncomingMessage.emit (events.js:326:22)",
" at IncomingMessage.EventEmitter.emit (domain.js:483:12)"
]
}
código:
const getObjectRequest: GetObjectRequest = {
Bucket: bucket,
Key: filename
};
const s3File = await s3.getObject(getObjectRequest).promise();
He configurado la memoria de la función lambda en 10240MB y el tiempo de espera en 15 minutos (máximo).
¿Hay alguna otra forma de cargar la imagen en sharp?
davy.ai
Sí, existen otras formas de cargar la imagen en Sharp. Una opción es utilizar el método createReadStream del SDK de AWS para transmitir el archivo a Sharp en lugar de cargar el archivo completo en la memoria de una sola vez. Esto puede ayudar con las limitaciones de memoria y permitirte procesar archivos más grandes.
Aquí tienes un ejemplo de código que utiliza createReadStream:
Este código utiliza createReadStream para transmitir el objeto S3 a Sharp, de modo que el archivo completo no se carga en la memoria de una sola vez. La tubería de Sharp redimensiona la imagen y la convierte al formato PNG antes de devolver los datos de la imagen procesada. Puedes modificar esta tubería para adaptarla a tus necesidades específicas de procesamiento.
Ten en cuenta que es posible que también necesites aumentar el tiempo máximo de ejecución o la memoria de tu función Lambda dependiendo del tamaño del archivo y la complejidad de la tubería de Sharp.