了解具有生命周期的S3中版本控制的对象删除

问题描述 投票:0回答:1

以下策略规定要在30天后删除对象的当前版本,并在30天后删除对象的先前版本。现在,假设我于4月1日在启用版本的存储桶中上传了一个对象,然后于4月10日上传了相同的对象。如果我没有上传第二个版本,那么当前对象将在4月30日被删除。所以我的问题是,如果我在4月10日上传了第二个版本,会发生什么。

是否会在5月10日删除新版本和旧版本,还是在4月30日删除旧版本,并在5月10日删除新版本?

{
        "Rules": [{
                        "ID": "DeletionOfFileBasedOnQATag",

                        "Status": "Enabled",
                        "Expiration": {
                                "Days": 30
                        },
                        "NoncurrentVersionExpiration": {
                                "NoncurrentDays": 30
                        }
                }
        ]
}



amazon-web-services amazon-s3 versioning lifecycle
1个回答
0
投票

在尝试回答您的问题之前,请先让我先了解一些我理解的基本知识:

想象一下您的S3文件版本为堆栈,其中内部包含一组currentversion和0或多个noncurrenversion的文件。每当currentversion发生新更新时,新版本就会堆叠在顶部,并成为currentversion,而其余版本则依次成为一组[[noncurrentversion(因为它们的行为就像堆叠一样)) 。

尽管您的S3配置未启用版本控制,但使用的是相同的架构。在这些情况下,noncurrenversion设置为0,并且禁用版本控制机制。

考虑到S3文件中此“堆栈”的每个对象都包含一个时间戳,该时间戳是在创建对象并将其添加到堆栈顶部时设置的。从那时起,该标记将跟随该对象,并且不会更改。因此,通过考虑在触发策略时对象是属于

当前版本

还是非当前版本来应用每个策略。 根据政策的第一部分:

"Expiration": { "Days": 30 }
每次触发此规则时,它将读取

currentversion

的时间标记,如果时间超过30天,它将被删除。它对noncurrent对象版本没有影响。来源:AWS - Elements to describe lifecycle actions in versioned buckets - Expiration action element - Versioned bucket

根据政策的第二部分:

"NoncurrentVersionExpiration": { "NoncurrentDays": 30 }
每次触发此规则时,它将读取堆栈中所有

noncurrent

版本对象的时间标记,如果有任何对象早于30天,它将被删除。来源:Example 7: Removing expired object delete markers

结论

新版本和旧版本都会在5月10日删除,还是旧版本版本在4月30日被删除,新版本在4月30日被删除5月10日?

旧版本将在4月30日删除,因为它的时间标记会早于30天。新版本将于5月10日(4月10日+ 30天)删除。

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.