Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

生命周期配置的示例

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

示例 1:指定筛选条件

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

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

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

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

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

    Copy
    <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>

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

  • 如果希望生命周期规则应用于存储桶中的所有对象,请指定一个空前缀。在以下配置中,该规则指定了一个 Transition 操作,该操作指示 Amazon S3 在对象创建 0 天后将其转换为 GLACIER 存储类,在这种情况下,对象都有资格在创建后的午夜 UTC 存档到 Amazon Glacier。

    Copy
    <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>
  • 您可以在筛选条件中指定零或一个键名称前缀以及零或多个对象标签。以下示例代码将生命周期规则应用于带 tax/ 键前缀的一部分对象以及包含具有特定键和值的两个标签的对象。请注意,在指定多个筛选条件时,您必须按下面所示包含 AND (Amazon S3 会应用逻辑 AND 以将指定筛选条件组合起来)。

    Copy
    ... <Filter> <And> <Prefix>tax/</Prefix> <Tag> <Key>key1</Key> <Value>value1</Value> </Tag> <Tag> <Key>key2</Key> <Value>value2</Value> </Tag> </And> </Filter> ...
  • 您可以仅基于标签筛选对象。例如,以下生命周期规则应用于具有两个指定标签的对象 (该规则未指定任何前缀):

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

重要

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

  • 永久删除优先于转换。

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

  • 当对象有资格进行 GLACIER 和 STANDARD_IA 转换时,Amazon S3 将选择 GLACIER 转换。

有关示例,请参阅示例 5:重叠的筛选条件、冲突的生命周期操作以及 Amazon S3 的功能

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

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

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

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

在策略中,启用了规则 1 并禁用了规则 2。Amazon S3 不会对已禁用规则执行任何操作。

Copy
<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> <Prefix>documents/</Prefix> <Status>Disabled</Status> <Transition> <Days>0</Days> <StorageClass>GLACIER</StorageClass> </Transition> </Rule> </LifecycleConfiguration>

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

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

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

  • 两个转换操作:

    • 在对象创建 30 天后将其转换为 STANDARD_IA 存储类。

    • 在对象创建 90 天后将其转换为 GLACIER 存储类。

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

Copy
<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>

注意

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

示例 4:指定多个规则

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

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

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

Copy
<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>

示例 5:重叠的筛选条件、冲突的生命周期操作以及 Amazon S3 的功能

您可能会指定一个在其中指定了重叠的前缀或操作的生命周期配置。以下示例显示了 Amazon S3 如何选择解决潜在冲突。

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

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

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

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

规则 1 请求 Amazon S3 在对象创建一年后将其全部删除,规则 2 请求 Amazon S3 在对象创建 30 天后将其中一部分转换为 STANDARD_IA 存储类。

Copy
<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>

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

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

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

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

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

Copy
<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/ 键名称前缀的一部分对象,两个规则中的生命周期操作都适用。一个规则指示 Amazon S3 在对象创建 10 天后对其进行转换,另一个规则指示 Amazon S3 在对象创建 365 天后对其进行转换。

Copy
<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: 基于标签的筛选和随之出现的冲突的生命周期操作

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

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

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

生命周期配置如下所示:

Copy
<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>value1</Value> </Tag> </Filter> <Status>Enabled</Status> <Expiration> <Days>14</Days> </Expiration> </Rule> </LifecycleConfiguration>

该策略很有用,但如果存在带有这两个标签的对象,则 S3 必须决定如何操作。也就是说,两个规则都将应用于对象,您实际上在指示 Amazon S3 执行冲突的操作。在这种情况下,Amazon S3 将在对象创建 14 天后使其过期。该对象将被删除,因此转换操作不会起作用。

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

假设您有一个启用了版本控制的存储桶,这意味着对于每个对象,您都有一个当前版本以及零个或零个以上的非当前版本。您想要保留一年的历史记录,然后删除非当前版本。有关版本控制的更多信息,请参阅对象版本控制

您还希望在对象变为非当前版本 30 天后通过将非当前版本移动到 GLACIER 来节省存储成本 (担任您不需要其实时访问权限的冷数据)。此外,您还期望在对象创建 90 天后降低当前版本的访问频率,因此您可能会选择将这些对象移动到 STANDARD_IA 存储类。

Copy
<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> <NoncurrentDays>365</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>

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

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

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

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

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

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

假设您编写了一个生命周期策略,该策略指定 NoncurrentVersionExpiration 操作以在对象变为非当前版本 30 天之后删除这些非当前版本,如下所示:

Copy
<LifecycleConfiguration> <Rule> ... <NoncurrentVersionExpiration> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>

请注意,NoncurrentVersionExpiration 操作不会应用于当前对象版本,而只会删除非当前版本。

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

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

    在这种情况下,您可以将生命周期策略与 Expiration 操作一起使用以指示 Amazon S3 移除当前版本,如以下示例所示:

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

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

    同一生命周期配置中的 NoncurrentVersionExpiration 操作将在对象变为非当前对象 30 天后删除它们。这样,所有对象版本都会删除,您将获得过期对象删除标记,但 Amazon S3 会为您检测并移除过期对象删除标记。

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

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

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

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

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

注意

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

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

您可以使用分段上传 API 来分段上传大型对象。有关分段上传的更多信息,请参阅分段上传概述。利用生命周期配置,当分段上传在指定的启动后的天数内未完成时,您可以指示 Amazon S3 中止未完成的分段上传 (通过在规则中指定的键名称前缀确定)。当 Amazon S3 中止分段上传时,它将删除与分段上传关联的所有分段。这将确保您没有包含存储在 Amazon S3 中的分段的未完成分段上传,从而不必为这些分段支付任何存储费用。下面是使用 AbortIncompleteMultipartUpload 操作指定规则的示例生命周期配置。此操作将请求 Amazon S3 在分段上传启动 7 天后中止未完成的分段上传。

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

注意

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