S3 生命周期配置的示例 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

S3 生命周期配置的示例

此部分提供 S3 生命周期配置的示例。每个示例演示如何在各个示例方案中指定 XML。

示例 1:指定筛选条件

每个 S3 生命周期规则都包含一个筛选条件,该筛选条件可用于确定存储桶中适用 S3 生命周期规则的一部分对象。以下 S3 生命周期配置显示了如何指定筛选条件的示例。

  • 在此 S3 生命周期配置规则中,筛选条件指定了一个键前缀 (tax/)。因此,此规则应用于带键名前缀 tax/ 的对象,例如 tax/doc1.txttax/doc2.txt

    此规则指定两个指示 Amazon S3 完成以下任务的操作:

    • 在对象创建 365 天(一年)后将其转换为 S3 Glacier Flexible Retrieval 存储类。

    • 在对象创建 3650 天(10 年)后将其删除(Expiration 操作)。

    <LifecycleConfiguration> <Rule> <ID>Transition and Expiration Rule</ID> <Filter> <Prefix>tax/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>365</Days> <StorageClass>GLACIER</StorageClass> </Transition> <Expiration> <Days>3650</Days> </Expiration> </Rule> </LifecycleConfiguration>

    您可以为每个操作指定一个日期,而不用以创建后的天数的形式指定对象期限。但是,您不能在同一规则中同时使用 DateDays

  • 如果希望 S3 生命周期规则应用于存储桶中的所有对象,请指定一个空前缀。在下面的配置中,该规则指定了一个 Transition 操作,该操作将指示 Amazon S3 在创建后 0 天将对象转移到 S3 Glacier Flexible Retrieval 存储类。此规则意味着对象在创建后有资格在世界标准时间午夜归档到 S3 Glacier Flexible Retrieval。有关生命周期约束的更多信息,请参阅 约束

    <LifecycleConfiguration> <Rule> <ID>Archive all object same-day upon creation</ID> <Filter> <Prefix></Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>0</Days> <StorageClass>GLACIER/StorageClass> </Transition> </Rule> </LifecycleConfiguration>
  • 您可以在筛选条件中指定零或一个键名前缀以及零或多个对象标签。以下示例代码将 S3 生命周期规则应用于带 tax/ 键前缀的一部分对象以及包含具有特定键和值的两个标签的对象。在指定多个筛选条件时,您必须按下面所示包含 <And>(Amazon S3 会应用逻辑 AND 以将指定筛选条件组合起来)。

    ... <Filter> <And> <Prefix>tax/</Prefix> <Tag> <Key>key1</Key> <Value>value1</Value> </Tag> <Tag> <Key>key2</Key> <Value>value2</Value> </Tag> </And> </Filter> ...

  • 您可以仅基于标签筛选对象。例如,以下 S3 生命周期规则应用于具有两个指定标签的对象(该规则未指定任何前缀)。

    ... <Filter> <And> <Tag> <Key>key1</Key> <Value>value1</Value> </Tag> <Tag> <Key>key2</Key> <Value>value2</Value> </Tag> </And> </Filter> ...

重要

当您在 S3 生命周期配置中有多个规则时,对象可能变得有资格执行多个 S3 生命周期操作。在这种情况下,Amazon S3 遵循以下一般规则:

  • 永久删除优先于转换。

  • 转换优先于删除标记的创建。

  • 当对象有资格进行 S3 Glacier Flexible Retrieval 和 S3 Standard-IA(或 S3 One Zone-IA)转换时,Amazon S3 将选择 S3 Glacier Flexible Retrieval 转换。

有关示例,请参阅 示例 5:重叠的筛选条件、冲突的生命周期操作,以及 Amazon S3 如何处理非版本化的存储桶

示例 2:禁用生命周期规则

您可以临时禁用 S3 生命周期规则。以下 S3 生命周期配置指定了两个规则:

  • 规则 1 指示 Amazon S3 在带 logs/ 前缀的对象创建后立即将其转换为 S3 Glacier Flexible Retrieval 存储类。

  • 规则 2 指示 Amazon S3 在带 documents/ 前缀的对象创建后立即将其转换为 S3 Glacier Flexible Retrieval 存储类。

在此配置中,启用了规则 1 但禁用了规则 2。Amazon S3 忽略禁用的规则。

<LifecycleConfiguration> <Rule> <ID>Rule1</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>0</Days> <StorageClass>GLACIER</StorageClass> </Transition> </Rule> <Rule> <ID>Rule2</ID> <Filter> <Prefix>documents/</Prefix> </Filter> <Status>Disabled</Status> <Transition> <Days>0</Days> <StorageClass>GLACIER</StorageClass> </Transition> </Rule> </LifecycleConfiguration>

示例 3:在对象的生命周期内逐步将存储类降级

在本示例中,您使用 S3 生命周期配置在对象的生命周期内逐步将存储类降级。级别降低可帮助减少存储成本。有关定价的更多信息,请参阅 Amazon S3 定价

以下 S3 生命周期配置指定了应用于带键名前缀 logs/ 的对象的规则。该规则指定了以下操作:

  • 两个转换操作:

    • 在对象创建 30 天后将其转换为 S3 Standard-IA 存储类。

    • 在对象创建 90 天后将其转换为 S3 Glacier Flexible Retrieval 存储类。

  • 一个过期操作,指示 Amazon S3 在对象创建一年后将其删除。

<LifecycleConfiguration> <Rule> <ID>example-id</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>30</Days> <StorageClass>STANDARD_IA</StorageClass> </Transition> <Transition> <Days>90</Days> <StorageClass>GLACIER</StorageClass> </Transition> <Expiration> <Days>365</Days> </Expiration> </Rule> </LifecycleConfiguration>
注意

如果所有 S3 生命周期操作都应用于同一组对象(由筛选条件标识),您可以使用一个规则来描述这些操作。或者,您也可以添加多个规则,每个规则指定一个不同的筛选条件。

重要

当您在 S3 生命周期配置中有多个规则时,对象可能变得有资格执行多个 S3 生命周期操作。在这种情况下,Amazon S3 遵循以下一般规则:

  • 永久删除优先于转换。

  • 转换优先于删除标记的创建。

  • 当对象有资格进行 S3 Glacier Flexible Retrieval 和 S3 Standard-IA(或 S3 One Zone-IA)转换时,Amazon S3 将选择 S3 Glacier Flexible Retrieval 转换。

有关示例,请参阅示例 5:重叠的筛选条件、冲突的生命周期操作,以及 Amazon S3 如何处理非版本化的存储桶

示例 4:指定多个规则

如果您希望不同的对象有不同的 S3 生命周期操作,则可以指定多个规则。以下 S3 生命周期配置有两个规则:

  • 规则 1 应用于带键名前缀 classA/ 的对象。它指示 Amazon S3 在对象创建一年后将其转换为 S3 Glacier Flexible Retrieval 存储类,并在对象创建 10 年后使它们过期。

  • 规则 2 应用于带键名前缀 classB/ 的对象。它指示 Amazon S3 在对象创建 90 天后将其转换为 S3 Standard-IA 存储类,并在对象创建 1 年后将其删除。

<LifecycleConfiguration> <Rule> <ID>ClassADocRule</ID> <Filter> <Prefix>classA/</Prefix> </Filter> <Status>Enabled</Status> <Transition>       <Days>365</Days>       <StorageClass>GLACIER</StorageClass>     </Transition> <Expiration> <Days>3650</Days> </Expiration> </Rule> <Rule> <ID>ClassBDocRule</ID> <Filter> <Prefix>classB/</Prefix> </Filter> <Status>Enabled</Status> <Transition>       <Days>90</Days>       <StorageClass>STANDARD_IA</StorageClass>     </Transition> <Expiration> <Days>365</Days> </Expiration> </Rule> </LifecycleConfiguration>
重要

当您在 S3 生命周期配置中有多个规则时,对象可能变得有资格执行多个 S3 生命周期操作。在这种情况下,Amazon S3 遵循以下一般规则:

  • 永久删除优先于转换。

  • 转换优先于删除标记的创建。

  • 当对象有资格进行 S3 Glacier Flexible Retrieval 和 S3 Standard-IA(或 S3 One Zone-IA)转换时,Amazon S3 将选择 S3 Glacier Flexible Retrieval 转换。

有关示例,请参阅示例 5:重叠的筛选条件、冲突的生命周期操作,以及 Amazon S3 如何处理非版本化的存储桶

示例 5:重叠的筛选条件、冲突的生命周期操作,以及 Amazon S3 如何处理非版本化的存储桶

您可能会指定一个在其中指定了重叠的前缀或操作的 S3 生命周期配置。

通常,S3 生命周期将针对成本进行优化。例如,如果两个过期策略重叠,将采用较短的过期策略,以便数据存储不会超过预期时间。同样,如果两个转换策略重叠,S3 生命周期将对象转换为较低成本的存储类。

在这两种情况下,S3 生命周期尝试选择最便宜的路径。该一般规则的一个例外情况是 S3 Intelligent-Tiering 存储类。S3 生命周期希望采用 S3 Intelligent-Tiering 而不是任何其他存储类,但 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 存储类除外。

以下示例说明 Amazon S3 如何解决潜在的冲突。

例 1:重叠的前缀(无冲突)

以下示例配置包含两个规则,它们指定了如下所示的重叠前缀:

  • 第一个规则指定了一个空筛选条件,指示存储桶中的所有对象。

  • 第二个规则指定了一个键名前缀 (logs/),指示仅一部分对象。

规则 1 请求 Amazon S3 在所有对象创建一年后删除这些对象。规则 2 请求 Amazon S3 在创建 30 天后将对象子集转换为 S3 Standard-IA 存储类。

<LifecycleConfiguration> <Rule> <ID>Rule 1</ID> <Filter> </Filter> <Status>Enabled</Status> <Expiration> <Days>365</Days> </Expiration> </Rule> <Rule> <ID>Rule 2</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <StorageClass>STANDARD_IA<StorageClass> <Days>30</Days> </Transition> </Rule> </LifecycleConfiguration>

由于在这种情况下没有冲突,因此 Amazon S3 将在创建 30 天后将带有 logs/ 前缀的对象转换为 S3 Standard-IA 存储类。当任何对象在创建一年后到达时,它将被删除。

例 2:冲突的生命周期操作

本示例配置中有两个规则,它们指示 Amazon S3 在对象的生命周期中同时对同一组对象执行两个不同的操作:

  • 两个规则指定了相同的键名前缀,因此两个规则都应用于同一组对象。

  • 当应用两个规则时,它们指定了相同的“对象创建后的 365 天”。

  • 一个规则指示 Amazon S3 将对象转换为 S3 Standard-IA 存储类,另一个规则希望 Amazon S3 使对象同时过期。

<LifecycleConfiguration> <Rule> <ID>Rule 1</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Expiration> <Days>365</Days> </Expiration> </Rule> <Rule> <ID>Rule 2</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <StorageClass>STANDARD_IA<StorageClass> <Days>365</Days> </Transition> </Rule> </LifecycleConfiguration>

在这种情况下,由于您希望对象过期(要移除),因此在更改存储类时没有意义,因此 Amazon S3 在这些对象上选择过期操作。

例 3:导致冲突的生命周期操作的重叠的前缀

在本示例中,配置包含两个指定重叠前缀的规则,如下所示:

  • 规则 1 指定了一个空前缀 (指示所有对象)。

  • 规则 2 指定了一个键名前缀 (logs/),用于确定所有对象中的一部分。

对于带 logs/ 键名前缀的一部分对象,两个规则中的 S3 生命周期操作都适用。一个规则指示 Amazon S3 在对象创建 10 天后对其进行转换,另一个规则指示 Amazon S3 在对象创建 365 天后对其进行转换。

<LifecycleConfiguration> <Rule> <ID>Rule 1</ID> <Filter> <Prefix></Prefix> </Filter> <Status>Enabled</Status> <Transition> <StorageClass>STANDARD_IA<StorageClass> <Days>10</Days> </Transition> </Rule> <Rule> <ID>Rule 2</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <StorageClass>STANDARD_IA<StorageClass> <Days>365</Days> </Transition> </Rule> </LifecycleConfiguration>

在这种情况下,Amazon S3 将选择在对象创建 10 天后转换它们。

例 4:基于标签的筛选和随之出现的冲突的生命周期操作

假设您有包含两个规则(每个规则各指定一个标签筛选条件)的以下 S3 生命周期配置:

  • 规则 1 指定了基于标签的筛选条件 (tag1/value1)。此规则指示 Amazon S3 在对象创建 365 天后将其转换为 S3 Glacier Flexible Retrieval 存储类。

  • 规则 2 指定了基于标签的筛选条件 (tag2/value2)。此规则指示 Amazon S3 在对象创建 14 天后使其过期。

S3 生命周期配置如下所示。

<LifecycleConfiguration> <Rule> <ID>Rule 1</ID> <Filter> <Tag> <Key>tag1</Key> <Value>value1</Value> </Tag> </Filter> <Status>Enabled</Status> <Transition> <StorageClass>GLACIER<StorageClass> <Days>365</Days> </Transition> </Rule> <Rule> <ID>Rule 2</ID> <Filter> <Tag> <Key>tag2</Key> <Value>value2</Value> </Tag> </Filter> <Status>Enabled</Status> <Expiration> <Days>14</Days> </Expiration> </Rule> </LifecycleConfiguration>

如果对象有两个标签,那么 Amazon S3 必须决定要遵循哪个规则。在这种情况下,Amazon S3 将在对象创建 14 天后使其过期。该对象将被删除,因此转换操作不会起作用。

重要

当您在 S3 生命周期配置中有多个规则时,对象可能变得有资格执行多个 S3 生命周期操作。在这种情况下,Amazon S3 遵循以下一般规则:

  • 永久删除优先于转换。

  • 转换优先于删除标记的创建。

  • 当对象有资格进行 S3 Glacier Flexible Retrieval 和 S3 Standard-IA(或 S3 One Zone-IA)转换时,Amazon S3 将选择 S3 Glacier Flexible Retrieval 转换。

有关示例,请参阅示例 5:重叠的筛选条件、冲突的生命周期操作,以及 Amazon S3 如何处理非版本化的存储桶。

示例 6:为启用了版本控制的存储桶指定生命周期规则

假设您有一个启用了版本控制的存储桶,这意味着对于每个对象,您都有一个当前版本以及零个或零个以上的非当前版本。(有关 S3 版本控制的更多信息,请参阅 在 S3 存储桶中使用版本控制。) 在此示例中,您想要保留一年的历史记录,然后删除非当前版本。S3 生命周期配置支持保留任何对象的 1 至 100 个版本。

为了节省存储开销,您希望在非现行的版本成为非现行(假设这些非现行的对象是不需要实时访问的冷数据)后 30 天将非现行的版本移至 S3 Glacier Flexible Retrieval。此外,您还期望在对象创建 90 天后降低当前版本的访问频率,因此您可能会选择将这些对象移动到 S3 Standard-IA 存储类。

<LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Filter> <Prefix></Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>90</Days> <StorageClass>STANDARD_IA</StorageClass> </Transition> <NoncurrentVersionTransition> <NoncurrentDays>30</NoncurrentDays> <StorageClass>GLACIER</StorageClass> </NoncurrentVersionTransition> <NoncurrentVersionExpiration> <NewerNoncurrentVersions>5</NewerNoncurrentVersions> <NoncurrentDays>365</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>

示例 7:移除过期对象删除标记

已启用版本控制的存储桶的每个对象有一个当前版本,以及零个或多个非当前版本。在删除对象时,请注意以下几点:

  • 如果您在删除请求中未指定版本 ID,Amazon S3 将添加一个删除标记,而不是删除对象。当前对象版本将变为非当前版本,然后删除标记将变为当前版本。

  • 如果您在删除请求中指定了版本 ID,Amazon S3 将永久删除对象版本(不会创建删除标记)。

  • 包含零个非当前版本的删除标记称为过期对象删除标记

此示例演示了可在存储桶中创建过期对象删除标记的场景,以及如何使用 S3 生命周期配置指示 Amazon S3 删除过期对象删除标记。

假设您编写了一个 S3 生命周期配置,该配置使用 NoncurrentVersionExpiration 操作以在对象变为非当前版本 30 天之后移除这些非当前版本,并最多保留 10 个非当前版本,如下面的示例所示。

<LifecycleConfiguration> <Rule> ... <NoncurrentVersionExpiration> <NewerNoncurrentVersions>10</NewerNoncurrentVersions> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>

NoncurrentVersionExpiration 操作不应用于当前的对象版本。它只会移除非当前版本。

对于当前对象版本,您可以根据当前对象版本是否遵循了明确定义的生命周期,通过以下方式管理其生命周期:

  • 当前对象版本遵循明确定义的生命周期。

    在这种情况下,您可以将 S3 生命周期配置与 Expiration 操作结合使用,以指示 Amazon S3 移除当前版本,如以下示例所示。

    <LifecycleConfiguration> <Rule> ... <Expiration> <Days>60</Days> </Expiration> <NoncurrentVersionExpiration> <NewerNoncurrentVersions>10</NewerNoncurrentVersions> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>

    在此示例中,Amazon S3 将在每个当前对象版本创建 60 天之后通过为其添加删除标记来删除它们。这过程会使当前对象版本变为非当前版本,并使删除标记变为当前版本。有关更多信息,请参阅在 S3 存储桶中使用版本控制

    注意

    不能在同一规则中同时指定 DaysExpiredObjectDeleteMarker 标签。当您指定 Days 标记时,Amazon S3 将于删除标记过旧而无法满足年限条件时自动执行 ExpiredObjectDeleteMarker 清理。要在删除标记成为唯一版本时立刻清理,只能使用 ExpiredObjectDeleteMarker 标签创建单独的规则。

    同一 S3 生命周期配置中的 NoncurrentVersionExpiration 操作将在对象变为非当前对象 30 天后删除它们。因此,在此示例中,所有对象版本在对象创建 90 天后被永久删除。虽然您可以在此过程中创建过期的对象删除标记,但 Amazon S3 会为您检测并移除过期对象删除标记。

  • 当前对象版本没有明确定义的生命周期。

    在这种情况下,您可以在不需要对象时手动删除它们,从而创建具有一个或多个非当前版本的删除标记。如果使用 NoncurrentVersionExpiration 操作的 S3 生命周期配置删除了所有非当前版本,则您现在会获得过期对象删除标记。

    特别针对这种情况,S3 生命周期配置提供了 Expiration 操作,让您可以请求移除过期对象删除标记。

    <LifecycleConfiguration> <Rule> <ID>Rule 1</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Expiration> <ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker> </Expiration> <NoncurrentVersionExpiration> <NewerNoncurrentVersions>10</NewerNoncurrentVersions> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>

通过在 Expiration 操作中将 ExpiredObjectDeleteMarker 元素设为 true,您可以指示 Amazon S3 移除过期对象删除标记。

注意

当您使用 ExpiredObjectDeleteMarker S3 生命周期操作时,该规则无法指定基于标签的筛选条件。

示例 8:用于中止分段上传的生命周期配置

您可以使用 Amazon S3 的分段上传 REST API 操作来在分段中上载大型对象。有关分段上传的更多信息,请参阅 使用分段上传来上传和复制对象

利用 S3 生命周期配置,当分段上传在指定的启动后的天数内未完成时,您可以指示 Amazon S3 停止未完成的分段上传(通过在规则中指定的键名前缀确定)。当 Amazon S3 中止分段上传时,它将删除与分段上传关联的所有分段。此流程通过确保您没有包含存储在 Amazon S3 中的分段的未完成分段上传,从而帮助控制存储成本。

注意

当您使用 AbortIncompleteMultipartUpload S3 生命周期操作时,该规则无法指定基于标签的筛选条件。

下面是使用 AbortIncompleteMultipartUpload 操作指定规则的示例 S3 生命周期配置。此操作将指引 Amazon S3 在分段上传启动 7 天后停止未完成的分段上传。

<LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Filter> <Prefix>SomeKeyPrefix/</Prefix> </Filter> <Status>rule-status</Status> <AbortIncompleteMultipartUpload> <DaysAfterInitiation>7</DaysAfterInitiation> </AbortIncompleteMultipartUpload> </Rule> </LifecycleConfiguration>

例 9:使用基于大小的规则进行生命周期

您可以创建仅根据对象的大小转换对象的规则。您可以指定最小大小(ObjectSizeGreaterThan)或最大大小(ObjectSizeLessThan),也可以指定一个对象大小范围,单位为字节。当使用多个筛选条件(如前缀和大小规则)时,必须将筛选条件包装在 <And> 元素中。

<LifecycleConfiguration> <Rule> <ID>Transition with a prefix and based on size</ID> <Filter> <And> <Prefix>tax/</Prefix> <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan> </And> </Filter> <Status>Enabled</Status> <Transition> <Days>365</Days> <StorageClass>GLACIER</StorageClass> </Transition> </Rule> </LifecycleConfiguration>

当通过同时使用 ObjectSizeGreaterThanObjectSizeLessThan 元素指定范围时,最大对象大小必须大于最小对象大小。当使用多个筛选条件时,必须将筛选条件包装在 <And> 元素中。以下示例显示了如何指定范围在 500 到 64000 字节之间的对象。

<LifecycleConfiguration> <Rule> ... <And> <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan> <ObjectSizeLessThan>64000</ObjectSizeLessThan> </And> </Rule> </LifecycleConfiguration>

您还可以创建规则,专门使没有数据的非当前对象过期,包括在启用版本控制的存储桶中创建的非当前删除标记对象。以下示例使用 NoncurrentVersionExpiration 操作,在对象变为非当前版本 30 天之后删除这些非当前版本,并最多保留 10 个非当前的对象版本。它还使用该 ObjectSizeLessThan 元素只筛选没有数据的对象。

<LifecycleConfiguration> <Rule> <ID>Expire noncurrent with size less than 1 byte</ID> <Filter> <ObjectSizeLessThan>1</ObjectSizeLessThan> </Filter> <Status>Enabled</Status> <NoncurrentVersionExpiration> <NewerNoncurrentVersions>10</NewerNoncurrentVersions> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>