Erstellen Sie eine zip-Datei auf S3 von Dateien auf S3 mit einer Lambda-Knoten

Brauche ich zum erstellen einer Zip-Datei besteht aus einer Auswahl von Dateien (videos und Bilder), die sich in meinem s3-bucket.

Im moment das problem mit meinem code ist, dass ich schnell traf das memory limit auf Lambda.

async.eachLimit(files, 10, function(file, next) {
    var params = {
        Bucket: bucket, //bucket name
        Key: file.key
    };
    s3.getObject(params, function(err, data) {
        if (err) {
            console.log('file', file.key);
            console.log('get image files err',err, err.stack); //an error occurred
        } else {
            console.log('file', file.key);
            zip.file(file.key, data.Body);
            next();
        }
    });
}, 
function(err) {
    if (err) {
        console.log('err', err);
    } else {
        console.log('zip', zip);
        content = zip.generateNodeStream({
            type: 'nodebuffer',
            streamFiles:true
        });
        var params = {
            Bucket: bucket, //name of dest bucket
            Key: 'zipped/images.zip',
            Body: content
        };
        s3.upload(params, function(err, data) {
            if (err) {
                console.log('upload zip to s3 err',err, err.stack); //an error occurred
            } else {
                console.log(data); //successful response
            }
        });
    }
});
  • Ist das möglich, mit Lambda, oder sollte ich auf einen anderen
    Ansatz?

  • Ist es möglich zu schreiben, um eine komprimierte zip-Datei on-the-fly, also den Wegfall der Speicher-Problem etwas, oder muss ich die Dateien gesammelt, bevor die Kompression?

Jede Hilfe wäre sehr geschätzt werden.

InformationsquelleAutor Rabona | 2016-07-28
Schreibe einen Kommentar