From 8f306e60d5de56e9550c4ecc7fd727ad79a941dd Mon Sep 17 00:00:00 2001 From: Nick Kitmitto Date: Mon, 8 May 2017 13:29:33 -0700 Subject: [PATCH 1/2] adding in removal of objects too --- index.js | 54 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/index.js b/index.js index 29edb90..355d78a 100644 --- a/index.js +++ b/index.js @@ -46,6 +46,7 @@ function processRecord(record, callback) { // The source bucket and source key are part of the event data var srcBucket = record.s3.bucket.name; + var eventName = record.eventName; var srcKey = decodeURIComponent(record.s3.object.key.replace(/\+/g, " ")); // Get the target bucket(s) based on the source bucket. @@ -68,24 +69,45 @@ function processRecord(record, callback) { var targetKey = srcKey; console.log("Copying '" + srcKey + "' from '" + srcBucket + "' to '" + targetBucketName + "'"); + console.log(record); + console.log(eventName); + if (eventName == "ObjectRemoved:DeleteMarkerCreated") { + console.log("DELETE MARKER CREATED") + var s3 = createS3(regionName); + s3.deleteObject({ + Bucket: targetBucket, + Key: targetKey + }, + function (err, data) { + if (err) { + console.log("Error deleting '" + srcKey + "' from '" + srcBucket + "' to '" + targetBucketName + "'"); + console.log(err, err.stack); // an error occurred + callback("Error deleting '" + srcKey + "' from '" + srcBucket + "' to '" + targetBucketName + "'"); + } else { + callback(); + } + }); + } // Copy the object from the source bucket - var s3 = createS3(regionName); - s3.copyObject({ - Bucket: targetBucket, - Key: targetKey, - - CopySource: encodeURIComponent(srcBucket + '/' + srcKey), - MetadataDirective: 'COPY' - }, function (err, data) { - if (err) { - console.log("Error copying '" + srcKey + "' from '" + srcBucket + "' to '" + targetBucketName + "'"); - console.log(err, err.stack); // an error occurred - callback("Error copying '" + srcKey + "' from '" + srcBucket + "' to '" + targetBucketName + "'"); - } else { - callback(); - } - }); + if (eventName == "ObjectCreated:Put") { + var s3 = createS3(regionName); + s3.copyObject({ + Bucket: targetBucket, + Key: targetKey, + + CopySource: encodeURIComponent(srcBucket + '/' + srcKey), + MetadataDirective: 'COPY' + }, function (err, data) { + if (err) { + console.log("Error copying '" + srcKey + "' from '" + srcBucket + "' to '" + targetBucketName + "'"); + console.log(err, err.stack); // an error occurred + callback("Error copying '" + srcKey + "' from '" + srcBucket + "' to '" + targetBucketName + "'"); + } else { + callback(); + } + }); + }; }, function (err) { if (err) { callback(err); From 509c4e440c2c5a61e1c910a720e03e2e7bd6e908 Mon Sep 17 00:00:00 2001 From: Nick Kitmitto Date: Mon, 8 May 2017 13:32:34 -0700 Subject: [PATCH 2/2] adding in removal of objects too --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e6c10a6..08a7b61 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # An AWS Lambda Based Function to Copy S3 Objects -With this AWS Lambda function, you can copy objects from a source S3 bucket to one or more target S3 buckets as they are added to the source bucket. +With this AWS Lambda function, you can copy objects from a source S3 bucket to one or more target S3 buckets as they are added or removed to/from the source bucket. ## Configuration @@ -18,7 +18,8 @@ Create an IAM role with the following policy: "Action": [ "s3:GetBucketTagging", "s3:GetObject", - "s3:PutObject" + "s3:PutObject", + "s3:DeleteObject" ], "Resource": [ "*" @@ -83,7 +84,11 @@ npm install aws-sdk * Event Source Type: S3 * Bucket: your source bucket * Event Type: Object Created -4. Set your Lambda function to execute using the IAM role you created above. +4. Add another event source to your Lambda function: + * Event Source Type: S3 + * Bucket: your source bucket + * Event Type: Objects Removed (All) +5. Set your Lambda function to execute using the IAM role you created above. ### Configuration