S3 生命周期配置的示例
此部分提供 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 版本控制保留对象的多个版本。) 在此示例中,您想要保留一年的历史记录,然后删除非当前版本。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>
在启用了版本控制的存储桶中移除到期对象删除标记
已启用版本控制的存储桶的每个对象有一个当前版本,以及零个或多个非当前版本。在删除对象时,请注意以下几点:
-
如果您在删除请求中未指定版本 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 版本控制保留对象的多个版本。
注意
不能在同一规则中同时指定
Days
和ExpiredObjectDeleteMarker
标签。当您指定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 生命周期操作时,该规则无法指定基于标签的筛选条件。
用于中止分段上传的生命周期配置
您可以使用 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>
使没有数据的非当前对象到期
您可以创建仅根据对象的大小转换对象的规则。您可以指定最小大小(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
元素只筛选没有数据的对象。
<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
默认转换行为应用于生命周期配置。此行为支持将小于 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"?> ...