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):
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:
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:::*/*"
]
}
]
}
Bitte überprüfen Sie, kann es helfen. https://stackoverflow.com/questions/42715682/delete-aws-s3-object-using-nodejs-lambda-function –