2

私は、メディア目的のためにAWS S3サービスを使用しています。また、サム関連画像にAWS Lamdaサービスを使用しています。イメージがS3バケットルートから削除された場合のサブディレクトリから対応するサムネイルを削除するにはどうすればよいですか?

次の問題に直面しています。サムネイル(Lambdaによって生成されたもの)よりもメインディレクトリのメディアを削除しても、サブディレクトリにはまだ存在します。例えば

: 私はまた同じ「100×100」、「1920x720」から削除するファイルと、「300×300」のディレクトリを必要とするよりも、Node.jsのコードから「1513928090496_juCQtDAt6ylr.jpg」ファイルを削除した場合。 (同じファイル「1513928090496_juCQtDAt6ylr.jpg」を含む)

詳細については、enter image description hereアップロード画像を参照してください。

+0

を、確認してくださいそれが役立つことがあります。 https://stackoverflow.com/questions/42715682/delete-aws-s3-object-using-nodejs-lambda-function –

答えて

2

これを行う最も簡単な方法は、別のラムダ関数を使うことです。 オブジェクトがバケットから削除されたときに実行をトリガーできます。

この関数は、削除されたオブジェクトがルートディレクトリにあるかどうかを分析し、そうであれば、サブフォルダからサムネールを削除します。ここで

はあなたが使用できる機能です:オブジェクトの削除であなたのラムダを実行するためには

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(); 
 
    }); 
 
};

、あなたに行く(AWSコンソールでトリガーを設定する必要がありますラムダ - >設定):

enter image description here

また、あなたは必ず、あなたのことを行う必要がありますLamdaの役割には、バケットからオブジェクトを削除できるポリシーがあります。私の場合は

私はこのようなインライン・ポリシーを追加しました:

enter image description here

だから、それは以下のポリシー生成:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "VisualEditor0", 
      "Effect": "Allow", 
      "Action": "s3:DeleteObject", 
      "Resource": [ 
       "arn:aws:s3:::thumbnails-bucket-123", 
       "arn:aws:s3:::*/*" 
      ] 
     } 
    ] 
} 
関連する問題