Hola, tengo una respuesta json probablemente de un tamaño de 150-200 MB. Debido a su tamaño, quiero guardarlo en aws s3 como archivo json en lugar de devolverlo al cliente. Debajo de esto, el código que estoy usando actualmente.
async function uploadFileOnS3(fileData, s3Detail) { const params = { Bucket: s3Detail.Bucket, Key: s3Detail.Key_response, Body: JSON.stringify(fileData), // big fat js object }; try { const stored = await S3.upload(params).promise(); console.log("file uploaded Sucessfully ", stored); } catch (err) { console.log(err); } console.log("upload exit"); }Me preocupa la operación JSON.stringify(fileData). suponiendo que esta función sea parte de aws lambda, ¿no se necesitarán grandes recursos para analizarla como una cadena?
¿Hay alguna otra forma eficiente de guardar el objeto javascript como json en el depósito aws s3?
Realmente no tiene que encadenar el archivo JSON. Puedes pasar una secuencia como un cuerpo:
async function uploadFileOnS3(fileData, s3Detail) { const params = { Bucket: s3Detail.Bucket, Key: s3Detail.Key_response, Body: fileData, // remove stringify from here }; try { const stored = await S3.upload(params).promise(); console.log("file uploaded Sucessfully ", stored); } catch (err) { console.log(err); } console.log("upload exit"); } exports.handler = async (event) => { // We create a stream const stream = fs.createReadStream("/tmp/upload.json"); // Pass the stream to the upload function await uploadFileOnS3(stream, { Bucket: "bucket_name", Key_response: "upload.json" }); }