【问题标题】:Is there a way to get the previous version of a deleted s3 object with aws-sdk?有没有办法使用 aws-sdk 获取已删除 s3 对象的先前版本?
【发布时间】:2019-09-26 04:45:15
【问题描述】:

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

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

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

或者,有没有办法使用 aws-sdk 获取已删除的对象?

(我正在使用 JavaScript aws-sdk)

【问题讨论】:

  • 目前无法尝试,但您应该可以调用 S3 "list-object-versions" API 来获取所有对象版本。我会提供一个链接,但您没有指定您使用的是哪种编程语言。
  • 谢谢@mark-b,这行得通。我还编辑了问题以指定语言(JavaScript)。通过多步骤过程完成: 1. 使用 s3.listObjectVersions 获取版本列表 2. 从列表中获取想要的版本 3. 获取特定对象,将 VersionId 作为参数传递给 s3.getObject({ Bucket: ,键:,VersionId: })

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


【解决方案1】:

可以通过 3 个步骤完成:

  1. 使用 listObjectVersions 获取版本列表
  2. 从列表中获取想要的版本
  3. 获取特定对象, 在 getObject 中将 VersionId 作为参数传递
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;
    }

}

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2022-01-07
    • 2022-01-18
    相关资源
    最近更新 更多