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

Understanding object deletion with versioning in S3 with lifecycle

以下策略规定在 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
                        }
                }
        ]
}



在尝试回答您的问题之前,让我澄清一些我理解的基础知识:

假设您的 S3 文件版本化为一个堆栈,其中包含一组具有 当前版本 和 0 个或多个 非当前版本 的文件。每当 currentversion 发生新的更新时,新版本就会堆叠在顶部并成为 currentversion,而其余的则成为一组 noncurrentversion 按顺序(因为它们表现得像一个堆栈)。

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

考虑到S3文件中这个"stack"的每个对象都包含一个时间标记,它是在创建对象并添加到堆栈顶部时设置的。

根据您保单的第一部分:

                    "Expiration": {
                            "Days": 30
                    }

每次触发此规则时,它都会读取 当前版本 的时间标记,如果超过 30 天,它将被删除。它对 noncurrent 对象版本没有影响。而且最后一个

来源: AWS - Elements to describe lifecycle actions in versioned buckets - Expiration action element - Versioned bucket

根据您保单的第二部分:

                    "NoncurrentVersionExpiration": {
                            "NoncurrentDays": 30
                    }

通过读入AWS Documentation of Lifecycle rules based on object's age。在生命周期配置中的 NoncurrentVersionTransition 和 NoncurrentVersionExpiration 操作中指定天数时,请注意以下几点:

It is the number of days from when the version of the object becomes noncurrent (that is, when the object is overwritten or deleted), that Amazon S3 will perform the action on the specified object or objects.

每当将新版本放在堆栈顶部时。时间标记将在该操作发生时更新。

每次触发此规则时,它将读取堆栈中所有 非当前 版本对象的时间标记,如果任何对象超过 30 天,它将被删除.

结论

Would new version and old version be deleted both on 10th May OR, old version gets deleted on 30th April and new version get's deleted on 10th May?

两个版本都将在 5 月 10 日(4 月 10 日 + 30 天)删除。因为新版本会有一个时间标记,从5月10日开始计算,同时旧版本也会被删除(如果在此期间没有其他事情发生),因为当新版本创建时时间标记旧的也在更新。两者确实在同一时刻。

希望对您有所帮助。 并感谢以下评论中的更正。

根据 AWS Docs 的以下摘录,在当前情况下,两个对象(最新版本和先前版本)都将在 5 月 10 日删除

当前版本将于 10 日到期5 月,因为它是在 4 月 10 日创建的(我们有到期 = 30 天)

非当前版本将于 5 月 10 日到期,因为它也是在 4 月 10 日创建=修改的(并且我们有非当前到期 = 30 天)


Amazon S3 maintains only the last modified date for each object. For example, the Amazon S3 console shows the Last Modified date in the object Properties pane. When you initially create a new object, this date reflects the date the object is created. If you replace the object, the date changes accordingly. So when we use the term creation date, it is synonymous with the term last modified date. ref:https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-number-of-days

NoncurrentVersionExpiration 操作元素 – 使用此操作指定您希望在 Amazon S3 永久删除非当前对象版本之前保留多长时间(从对象变为非当前的时间起)。删除的对象无法恢复。

This delayed removal of noncurrent objects can be helpful when you need to correct any accidental deletes or overwrites. For example, you can configure an expiration rule to delete noncurrent versions five days after they become noncurrent. For example, suppose that on 1/1/2014 10:30 AM UTC, you create an object called photo.gif (version ID 111111). On 1/2/2014 11:30 AM UTC, you accidentally delete photo.gif (version ID 111111), which creates a delete marker with a new version ID (such as version ID 4857693). You now have five days to recover the original version of photo.gif (version ID 111111) before the deletion is permanent. On 1/8/2014 00:00 UTC, the Lifecycle rule for expiration executes and permanently deletes photo.gif (version ID 111111), five days after it became a noncurrent version. https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions