Lisez et extrayez un fichier zip énorme depuis AWS S3 avec AWS Lambda

Je travaille sur une application de gestion de données où le client peut télécharger un zip file(approx 250 MB) avec plusieurs text files(approx 1500 MB) sur AWS S3 .

Mais en raison de la mémoire limitée de aws lamda (taille maximale de 1536 Mo), je suis en mesure d’extraire un fichier zip de (50 Mo) avec des fichiers extraits de (500 Mo).

Depuis que je dois append une validation sur les fichiers extraits lors de l’extraction et après cela, je dois stocker tout le contenu du fichier dans la firebase database.

Pour le moment, je stocke le contenu des fichiers dans l’ aws-lambda tmp location qui peut également contenir une limite maximale de 500 Mo.

tout concept de diffusion en continu qui peut aider à effectuer la tâche ci-dessus avec validation me sera utile.

Je peux utiliser EC2, ECS mais pour l’instant, je souhaite utiliser uniquement AWS-Lambda .

Avec ce code, je suis en train d’extraire et de télécharger les fichiers zip dans un autre S3 .

N’importe quel autre concept, tel que le streaming, me sera utile, car je ne connais pas très bien le concept de streaming que je mets ici pour avoir une idée en vue de résoudre mon problème.

 s3.getObject(params, (err, data) => { if (err) { console.log('Error', err); var message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`; console.log(message); // callback(message); } else { console.log('Started to buffer data'); JSZip.loadAsync(data.Body).then(function(zip) { fs.writeFile('temp/hello.txt', 'New file added for testing'); async.each(zip.files, function(item, cb1) { if (!item.dir && item.name.includes('nightly')) { zip.file(item.name).async("text").then(function(content) { fs.writeFile('temp/' + item.name.replace(/^.*[\\\/]/, ''), content, function(err) { if (err) throw err; cb1(); }); }); } else { cb1(); } }, function(err, result) { var zipObj = new JSZip(); fs.readdir('./temp', function(err, files) { console.log(files); async.each(files, function(file, cb2) { fs.readFile('./temp/' + file, 'utf-8', function(err, content) { if (err) { return err; } zipObj.file(file, content); cb2(); }); }, function(err) { zipObj.generateAsync({ type: "nodebuffer" }) .then(function(content) { console.log(content); deleteFiles(['./temp/*'], function(err, paths) { console.log('Deleted files/folders:\n', paths.join('\n')); }); s3.putObject({ Bucket: 'abtempb', Key: 'temp/records.zip', Body: content }, function(err, result) { if (result && result.ETag) { console.log('uploaded file: ', result.ETag); } console.log('Error ', err); }); }); }); }); }); }); } }); 

Je vous remercie