了解 S3 中通过生命周期进行版本控制的对象删除

Aks*_*ain 6 versioning lifecycle amazon-s3 amazon-web-services

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



Run Code Online (Sandbox Code Playgroud)

Luc*_*sPC 9

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

想象一下您的 S3 文件作为一个堆栈进行版本控制,其中包含一组具有currentversion和 0 或多个noncurrentversion的文件。每当currentversion发生新更新时,新版本就会在堆栈顶部并成为currentversion,而其余版本则按顺序变成一组非currentversion(因为它们的行为类似于堆栈)。

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

考虑一下 S3 文件中此“堆栈”的每个对象都包含一个时间标记,该时间标记是在创建对象并将其添加到堆栈顶部时设置的。

根据您的政策的第一部分:

                    "Expiration": {
                            "Days": 30
                    }
Run Code Online (Sandbox Code Playgroud)

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

来源: AWS - 描述版本化存储桶中生命周期操作的元素 - 过期操作元素 - 版本化存储桶

根据您的政策的第二部分:

                    "NoncurrentVersionExpiration": {
                            "NoncurrentDays": 30
                    }
Run Code Online (Sandbox Code Playgroud)

通过阅读基于对象年龄的生命周期规则的AWS文档。在生命周期配置中指定 NoncurrentVersionTransition 和 NoncurrentVersionExpiration 操作的天数时,请注意以下事项:

它是从对象版本变为非当前版本(即对象被覆盖或删除时)起,Amazon S3 将对指定对象执行操作的天数。

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

每次触发此规则时,它都会读取堆栈中所有非当前版本对象的时间标记,如果任何对象早于 30 天,则会将其删除。

结论

新版本和旧版本都会在5月10日删除吗?或者,旧版本会在4月30日删除,新版本会在5月10日删除吗?

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

我希望这有帮助。并感谢以下评论中的更正。


Aks*_*ain 1

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

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

\n\n


\n\n
\n

Amazon S3 仅维护每个对象的最后修改日期。例如,Amazon S3 控制台在对象属性窗格中显示上次修改日期。当您最初创建新对象时,此日期反映了对象的创建日期。如果替换\n 对象,日期会相应更改。因此,当我们使用术语创建日期时,它与术语上次修改日期同义。参考:https: //docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html #intro-lifecycle-rules-number-of-days

\n
\n\n

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

\n\n
\n

当您需要更正任何意外删除或覆盖时,延迟删除非当前对象可能会很有帮助。例如,您可以配置过期规则,在非当前版本变为非当前版本五天后将其删除。例如,假设您在 UTC 时间 2014 年 1 月 1 日上午 10:30 创建了一个名为 photo.gif 的对象(版本 ID 111111)。在 UTC 时间 2014 年 1 月 2 日上午 11:30,您意外删除了 photo.gif(版本 ID 111111),这会创建一个带有新版本 ID(例如版本 ID 4857693)的删除标记。在永久删除之前,您现在有五天时间恢复 photo.gif 的原始版本(版本 ID 111111)。UTC 时间 2014 年 1 月 8 日 00:00,到期的生命周期规则\n 执行并永久删除 photo.gif(版本 ID\n 111111),五天后它成为非当前版本。\n https://docs。 aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions

\n
\n