有没有办法使用aws-sdk获取已删除的s3对象的先前版本?

时间:2019-05-08 12:33:50

标签: javascript amazon-s3 aws-lambda event-handling aws-sdk

我有一个启用版本控制的S3存储桶,配置为向Lambda发送通知事件。收到s3:ObjectRemoved:*事件时,我需要处理该存储桶中已删除的对象。

该事件包含已删除对象的versionId。

是否有办法发现被删除对象的前一个版本的versionId并使用aws-sdk来获取该版本?

或者,是否可以使用aws-sdk获取已删除的对象?

(我正在使用JavaScript aws-sdk)

1 个答案:

答案 0 :(得分:0)

这可以通过3个步骤完成:

  1. 通过listObjectVersions获取版本列表
  2. 从列表中获取所需版本
  3. 获取特定对象, 将VersionId作为参数传递给getObject
const AWS = require('aws-sdk');
const s3 = new AWS.S3();

async function getDeletedObject (event, context) {

    let params = {
        Bucket: 'my-bucket',
        Prefix: 'my-file'
    };


    try {
        const previousVersion =  await s3.listObjectVersions(params)
            .promise()
            .then(result => {
                const versions = result.Versions;
                // get previous versionId
                return versions[0].VersionId;
             });

         params = {
              Bucket: 'my-bucket',
              Key: 'my-file',
              VersionId: previousVersion
         };

         const deletedObject = await s3.getObject(params)
             .promise()
             .then(response => response.Body.toString('utf8'));

         return deletedObject;
    }

    catch (error) {
        console.log(error);
        return;
    }

}