2

Ich verwende den AWS S3-Dienst für Medienzwecke und verwende AWS Lamda-Dienste für thumb-ähnliche Bilder.Wie entfernen Sie die entsprechenden Miniaturansichten aus Unterverzeichnissen, wenn das Bild aus dem S3-Bucket-Stamm gelöscht wurde?

Mit dem folgenden Problem konfrontiert: Wenn ich Medien im Hauptverzeichnis entfernen, als die Thumbnails (generiert von Lambda) noch in den Unterverzeichnissen existieren.

Zum Beispiel: Wenn ich „1513928090496_juCQtDAt6ylr.jpg“ Datei von Node.js Code entfernen, als ich brauche auch die gleiche Datei aus „100x100“, „1920x720“ gelöscht werden und „300x300“ Verzeichnissen. (Sie enthalten auch die gleiche Datei "1513928090496_juCQtDAt6ylr.jpg")

Für weitere Informationen wenden Sie sich bitte enter image description here hochgeladen Bild.

+0

Bitte überprüfen Sie, kann es helfen. https://stackoverflow.com/questions/42715682/delete-aws-s3-object-using-nodejs-lambda-function –

Antwort

2

Der einfachste Weg, dies zu tun, ist eine andere Lambda-Funktion zu verwenden. Sie können die Ausführung auslösen, wenn ein Objekt aus dem Bucket gelöscht wird.

Die Funktion analysiert dann, ob sich das gelöschte Objekt im Stammverzeichnis befand und wenn ja, löschen Sie die Vorschaubilder aus den Unterordnern.

Hier ist die Funktion, die Sie verwenden können:

const AWS = require("aws-sdk"); 
 
const s3 = new AWS.S3(); 
 

 
const thumbnailFolders = ["100x100", "1920x720", "300x300"]; 
 

 
exports.handler = function(event, context, callback) { 
 
    const bucketName = event.Records[0].s3.bucket.name; 
 
    const deletedFileKey = event.Records[0].s3.object.key; 
 

 
    // If there are no forward slashes the file was in the root folder. 
 
    const wasInRootDirectory = !deletedFileKey.includes("/"); 
 
    if (!wasInRootDirectory) { 
 
    // If if was not in the root foler, ignore it. 
 
    return; 
 
    } 
 

 
    const thumbnailsToDelete = thumbnailFolders.map(f => { 
 
    return { Key: `${f}/${deletedFileKey}` }; 
 
    }); 
 

 
    const params = { 
 
    Bucket: bucketName, 
 
    Delete: { 
 
     Objects: thumbnailsToDelete 
 
    } 
 
    }; 
 

 
    s3.deleteObjects(params, (err, data) => { 
 
    if (err) { 
 
     console.log(err, err.stack); 
 
     callback(err); 
 
     return; 
 
    } 
 

 
    //Deleted successfully 
 
    callback(); 
 
    }); 
 
};

Um Ihre Lambda auf Objektlöschung auszuführen, können Sie den Auslöser in AWS Console (gehen müssen einrichten, um Ihre Lambda -> Konfiguration):

enter image description here

auch sollten Sie sicherstellen, dass Ihre Lamda hat eine Richtlinie, die es erlaubt, Objekte aus dem Bucket zu löschen.

In meinem Fall habe ich eine Inline-Politik wie folgt aus:

enter image description here

So ist es die folgende Politik generiert:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "VisualEditor0", 
      "Effect": "Allow", 
      "Action": "s3:DeleteObject", 
      "Resource": [ 
       "arn:aws:s3:::thumbnails-bucket-123", 
       "arn:aws:s3:::*/*" 
      ] 
     } 
    ] 
} 
Verwandte Themen