此部分提供 S3 生命周期配置的示例。每个示例演示如何在各个示例方案中指定 XML。
主题
在创建后的一天内归档所有对象
每个 S3 生命周期规则都包含一个筛选条件,该筛选条件可用于确定存储桶中适用 S3 生命周期规则的一部分对象。以下 S3 生命周期配置显示了如何指定筛选条件的示例。
-
在此 S3 生命周期配置规则中,筛选条件指定了一个键前缀 (
tax/
)。因此,此规则应用于带键名前缀tax/
的对象,例如tax/doc1.txt
和tax/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>
您可以为每个操作指定一个日期,而不用以创建后的天数的形式指定对象期限。但是,您不能在同一规则中同时使用
Date
和Days
。 -
-
如果希望 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 转换。
有关示例,请参阅 重叠的筛选条件和冲突的生命周期操作的示例。
临时禁用生命周期规则
可以使用 status
元素临时禁用 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>
在对象的生命周期内逐步将存储类降级
在本示例中,您使用 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 转换。
有关示例,请参阅 重叠的筛选条件和冲突的生命周期操作的示例。
指定多个规则
如果您希望不同的对象有不同的 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 转换。
有关示例,请参阅 重叠的筛选条件和冲突的生命周期操作的示例。
为启用了版本控制的存储桶指定生命周期规则
假设您有一个启用了版本控制的存储桶,这意味着对于每个对象,您都有一个当前版本以及零个或零个以上的非当前版本。(有关 S3 版本控制的更多信息,请参阅 使用 S3 版本控制保留对象的多个版本。)
在下面的示例中,您想要保留一年的历史记录,然后保留 5 个非当前版本。S3 生命周期配置支持保留任何对象的 1 至 100 个版本。请注意,在 Amazon S3 可以使给定版本到期之前,必须存在超过 5 个较新的非当前版本。Amazon S3 将永久删除超过要保留的指定数量的任何其它非当前版本。要进行删除,必须同时超过 NoncurrentDays
和 NewerNoncurrentVersions
的值。
为了节省存储开销,您希望在非现行的版本成为非现行(假设这些非现行的对象是不需要实时访问的冷数据)后 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>
在启用了版本控制的存储桶中移除到期对象删除标记
已启用版本控制的存储桶的每个对象有一个当前版本,以及零个或多个非当前版本。在删除对象时,请注意以下几点:
-
如果您在删除请求中未指定版本 ID,Amazon S3 将添加一个删除标记,而不是删除对象。当前对象版本将变为非当前版本,然后删除标记将变为当前版本。
-
如果在删除请求中指定了版本 ID,Amazon S3 将永久删除对象版本(不会创建删除标记)。
-
包含零个非当前版本的删除标记称为过期对象删除标记。
此示例演示了可在存储桶中创建过期对象删除标记的场景,以及如何使用 S3 生命周期配置指示 Amazon S3 删除过期对象删除标记。
假设您编写了一个 S3 生命周期配置,该配置使用 NoncurrentVersionExpiration
操作以在对象变为非当前版本 30 天之后移除这些非当前版本,并保留 10 个非当前版本,如下面的示例所示。请注意,在 Amazon S3 可以使给定版本到期之前,必须存在超过 10 个较新的非当前版本。Amazon S3 将永久删除超过要保留的指定数量的任何其它非当前版本。要进行删除,必须同时超过 NoncurrentDays
和 NewerNoncurrentVersions
的值。
<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 版本控制保留对象的多个版本。
注意
不能在同一规则中同时指定
Days
和ExpiredObjectDeleteMarker
标签。当您指定Days
标记时,Amazon S3 将于删除标记过旧而无法满足年限条件时自动执行ExpiredObjectDeleteMarker
清理。要在删除标记成为唯一版本时立刻清理,只能使用ExpiredObjectDeleteMarker
标签创建单独的规则。同一 S3 生命周期配置中的
NoncurrentVersionExpiration
操作将在对象变为非当前对象 30 天后删除它们。因此,在此示例中,所有对象版本在对象创建 90 天后被永久删除。请注意,在此示例中,在 Amazon S3 可以使给定版本到期之前,必须存在超过 10 个较新的非当前版本。Amazon S3 将永久删除超过要保留的指定数量的任何其它非当前版本。要进行删除,必须同时超过NoncurrentDays
和NewerNoncurrentVersions
的值。虽然您可以在此过程中创建过期的对象删除标记,但 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 生命周期操作时,该规则无法指定基于标签的筛选条件。
用于中止分段上传的生命周期配置
您可以使用 Amazon S3 的分段上传 REST API 操作来在分段中上载大型对象。有关分段上传的更多信息,请参阅 在 Amazon S3 中使用分段上传来上传和复制对象。
通过使用 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>
使没有数据的非当前对象到期
您可以创建仅根据对象的大小转换对象的规则。您可以指定最小大小(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>
当通过同时使用 ObjectSizeGreaterThan
和 ObjectSizeLessThan
元素指定范围时,最大对象大小必须大于最小对象大小。当使用多个筛选条件时,必须将筛选条件包装在 <And>
元素中。以下示例显示了如何指定范围在 500 字节到 64000 字节之间的对象。指定范围时,ObjectSizeGreaterThan
和 ObjectSizeLessThan
筛选条件不包含所指定的值。有关更多信息,请参阅 Filter 元素。
<LifecycleConfiguration>
<Rule>
...
<And>
<ObjectSizeGreaterThan>500</ObjectSizeGreaterThan>
<ObjectSizeLessThan>64000</ObjectSizeLessThan>
</And>
</Rule>
</LifecycleConfiguration>
您还可以创建规则,专门使没有数据的非当前对象过期,包括在启用版本控制的存储桶中创建的非当前删除标记对象。以下示例使用 NoncurrentVersionExpiration
操作,在对象变为非当前版本 30 天之后移除这些非当前版本,并保留 10 个非当前对象版本。本示例还使用 ObjectSizeLessThan
元素来只筛选没有数据的对象。
请注意,在 Amazon S3 可以使给定版本到期之前,必须存在超过 10 个较新的非当前版本。Amazon S3 将永久删除超过要保留的指定数量的任何其它非当前版本。要进行删除,必须同时超过 NoncurrentDays
和 NewerNoncurrentVersions
的值。
<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>
示例:支持转换小于 128 KB 的对象
Amazon S3 对生命周期配置应用默认行为,来防止将小于 128 KB 的对象转换到任何存储类。可以通过向配置中添加最小大小 (ObjectSizeGreaterThan
) 或最大大小 (ObjectSizeLessThan
) 筛选条件来指定更小的大小,从而支持转换更小的对象。以下示例支持将任何小于 128 KB 的对象转换到 S3 Glacier Instant Retrieval 存储类:
<LifecycleConfiguration>
<Rule>
<ID>Allow small object transitions</ID>
<Filter>
<ObjectSizeGreaterThan>1</ObjectSizeGreaterThan>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER_IR</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
注意
2024 年 9 月,Amazon S3 更新了小对象的默认转换行为,如下所示:
更新了默认转换行为 — 从 2024 年 9 月起,默认行为禁止将小于 128 KB 的对象转换到任何存储类。
之前的默认转换行为 — 在 2024 年 9 月之前,默认行为仅支持将小于 128 KB 的对象转换到 S3 Glacier 和 S3 Glacier Deep Archive 存储类。
2024 年 9 月之前创建的配置将保留之前的转换行为,除非您对其进行修改。也就是说,如果您创建、编辑或删除规则,则配置的默认转换行为会更改为更新的行为。如果用例需要,则可以更改默认转换行为,以便小于 128 KB 的对象将转换到 S3 Glacier 和 S3 Glacier Deep Archive。为此,请在 PutBucketLifecycleConfiguration 请求中使用可选 x-amz-transition-object-size-minimum-default
标头。
以下示例说明如何在 PutBucketLifecycleConfiguration 请求中使用 x-amz-transition-object-size-minimum-default
标头,来将 varies_by_storage_class
默认转换行为应用于 S3 生命周期配置。此行为支持将小于 128 KB 的对象转换到 S3 Glacier 或 S3 Glacier Deep Archive 存储类。默认情况下,所有其它存储类都将阻止小于 128 KB 的转换。您仍然可以使用自定义筛选条件来更改任何存储类的最小转换大小。自定义筛选条件始终优先于默认转换行为:
HTTP/1.1 200
x-amz-transition-object-size-minimum-default: varies_by_storage_class
<?xml version="1.0" encoding="UTF-8"?>
...