本指南不再进行更新。有关当前信息和说明,请参阅新的 Amazon S3 用户指南。
生命周期配置的示例
此部分提供 S3 生命周期配置的示例。每个示例演示如何在各个示例方案中指定 XML。
主题
示例 1:指定筛选条件
每个 S3 生命周期规则都包含一个筛选条件,该筛选条件可用于确定存储桶中适用生命周期规则的一部分对象。以下 S3 生命周期配置显示了如何指定筛选条件的示例。
-
在此生命周期配置规则中,筛选条件指定了一个键前缀 (
tax/
)。因此,此规则应用于带键名前缀tax/
的对象,例如tax/doc1.txt
和tax/doc2.txt
。此规则指定两个指示 Amazon S3 完成以下任务的操作:
-
在对象创建 365 天(一年)后将其转换为 S3 Glacier 存储类。
-
在对象创建 3650 天(10 年)后将其删除(
Expiration
操作)。
<LifecycleConfiguration> <Rule> <ID>Transition and Expiration Rule</ID> <Filter> <Prefix>tax/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>365</Days> <StorageClass>S3 Glacier</StorageClass> </Transition> <Expiration> <Days>3650</Days> </Expiration> </Rule> </LifecycleConfiguration>
您可以为每个操作指定一个日期,而不用以创建后的天数的形式指定对象期限。但是,您不能在同一规则中同时使用
Date
和Days
。 -
-
如果希望生命周期规则应用于存储桶中的所有对象,请指定一个空前缀。在以下配置中,该规则指定了一个
Transition
操作,该操作指示 Amazon S3 在对象创建 0 天后将其转换为 S3 Glacier 存储类,在这种情况下,对象都有资格在创建后的午夜 UTC 存档到 Amazon S3 Glacier。<LifecycleConfiguration> <Rule> <ID>Archive all object same-day upon creation</ID> <Filter> <Prefix></Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>0</Days> <StorageClass>S3 Glacier</StorageClass> </Transition> </Rule> </LifecycleConfiguration>
-
您可以在筛选条件中指定零或一个键名前缀以及零或多个对象标签。以下示例代码将生命周期规则应用于带
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> ...
-
您可以仅基于标签筛选对象。例如,以下生命周期规则应用于具有两个指定标签的对象(该规则未指定任何前缀)。
... <Filter> <And> <Tag> <Key>key1</Key> <Value>value1</Value> </Tag> <Tag> <Key>key2</Key> <Value>value2</Value> </Tag> </And> </Filter> ...
当您在 S3 生命周期配置中有多个规则时,对象可能变得有资格执行多个生命周期操作。在这种情况下,Amazon S3 遵循以下一般规则:
-
永久删除优先于转换。
-
转换优先于删除标记的创建。
-
当对象有资格进行 S3 Glacier 和 S3 标准 – IA(或 S3 单区 – IA)转换时,Amazon S3 将选择 S3 Glacier 转换。
有关示例,请参阅 示例 5:重叠的筛选条件、冲突的生命周期操作以及 Amazon S3 的功能 。
示例 2:禁用生命周期规则
您可以临时禁用生命周期规则。以下生命周期配置指定了两个规则:
-
规则 1 指示 Amazon S3 在带
logs/
前缀的对象创建后立即将其转换为 S3 Glacier 存储类。 -
规则 2 指示 Amazon S3 在带
documents/
前缀的对象创建后立即将其转换为 S3 Glacier 存储类。
在策略中,启用了规则 1 并禁用了规则 2。Amazon S3 不会对已禁用规则执行任何操作。
<LifecycleConfiguration> <Rule> <ID>Rule1</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>0</Days> <StorageClass>S3 Glacier</StorageClass> </Transition> </Rule> <Rule> <ID>Rule2</ID> <Prefix>documents/</Prefix> <Status>Disabled</Status> <Transition> <Days>0</Days> <StorageClass>S3 Glacier</StorageClass> </Transition> </Rule> </LifecycleConfiguration>
示例 3:在对象的生命周期内逐步将存储类降级
在本示例中,您使用生命周期配置在对象的生命周期内逐步将存储类降级。级别降低可帮助减少存储成本。有关定价的更多信息,请参阅 Amazon S3 定价
以下 S3 生命周期配置指定了应用于带键名前缀 logs/
的对象的规则。该规则指定了以下操作:
-
两个转换操作:
-
在对象创建 30 天后将其转换为 S3 标准 – IA 存储类。
-
在对象创建 90 天后将其转换为 S3 Glacier 存储类。
-
-
一个过期操作,指示 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>
如果所有生命周期操作都应用于同一组对象(由筛选条件标识),您可以使用一个规则来描述这些操作。或者,您也可以添加多个规则,每个规则指定一个不同的筛选条件。
示例 4:指定多个规则
如果您希望不同的对象有不同的生命周期操作,则可以指定多个规则。以下生命周期配置有两个规则:
-
规则 1 应用于带键名前缀
classA/
的对象。它指示 Amazon S3 在对象创建一年后将其转换为 S3 Glacier 存储类,并在对象创建 10 年后使它们过期。 -
规则 2 应用于带键名前缀
classB/
的对象。它指示 Amazon S3 在对象创建 90 天后将其转换为 S3 标准 – 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>
示例 5:重叠的筛选条件、冲突的生命周期操作以及 Amazon S3 的功能
您可能会指定一个在其中指定了重叠的前缀或操作的 S3 生命周期配置。
通常,Amazon S3 生命周期会针对成本进行优化。例如,如果两个过期策略重叠,将采用较短的过期策略,以便数据存储不会超过预期时间。
同样,如果两个转换策略重叠,S3 生命周期将对象转换为较低成本的存储类。在这两种情况下,S3 生命周期尝试选择最便宜的路径。该一般规则的一个例外情况是 S3 智能分层存储类。S3 生命周期希望采用 S3 智能分层而不是任何其他存储类,但 S3 Glacier 和 S3 Glacier Deep Archive 存储类除外。
以下示例说明 Amazon S3 如何选择以解决潜在的冲突。
例 1:重叠的前缀(无冲突)
以下示例配置包含两个规则,它们指定了如下所示的重叠前缀:
-
第一个规则指定了一个空筛选条件,指示存储桶中的所有对象。
-
第二个规则指定了一个键名前缀
logs/
,指示仅一部分对象。
规则 1 请求 Amazon S3 在所有对象创建一年后删除这些对象。规则 2 请求 Amazon S3 在创建 30 天后将对象子集转换为 S3 标准 – 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>
例 2:冲突的生命周期操作
本示例配置中有两个规则,它们指示 Amazon S3 在对象的生命周期中同时对同一组对象执行两个不同的操作:
-
两个规则指定了相同的键名前缀,因此两个规则都应用于同一组对象。
-
当应用两个规则时,它们指定了相同的“对象创建后的 365 天”。
-
一个规则指示 Amazon S3 将对象转换为 S3 标准 – 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/
键名前缀的一部分对象,两个规则中的生命周期操作都适用。一个规则指示 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 存储类。 -
规则 2 指定了基于标签的筛选条件 (
tag2/value2
)。此规则指示 Amazon S3 在对象创建 14 天后使其过期。
生命周期配置如下所示。
<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:为启用了版本控制的存储桶指定生命周期规则
假设您有一个启用了版本控制的存储桶,这意味着对于每个对象,您都有一个当前版本以及零个或零个以上的非当前版本。您想要保留一年的历史记录,然后删除非当前版本。有关 S3 版本控制的更多信息,请参阅对象版本控制。
您还希望在对象变为非当前版本 30 天后通过将非当前版本移动到 S3 Glacier(作为您不需要其实时访问权限的冷数据)来节省存储成本。此外,您还期望在对象创建 90 天后降低当前版本的访问频率,因此您可能会选择将这些对象移动到 S3 标准 – 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>S3 Glacier</StorageClass> </NoncurrentVersionTransition> <NoncurrentVersionExpiration> <NoncurrentDays>365</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>
示例 7:移除过期对象删除标记
已启用版本控制的存储桶的每个对象有一个当前版本,以及零个或多个非当前版本。在删除对象时,请注意以下几点:
-
如果您在删除请求中未指定版本 ID,Amazon S3 将添加一个删除标记,而不是删除对象。当前对象版本将变为非当前版本,然后删除标记将变为当前版本。
-
如果您在删除请求中指定了版本 ID,Amazon S3 将永久删除对象版本(不会创建删除标记)。
-
包含零个非当前版本的删除标记称为过期对象删除标记。
此示例演示了可在存储桶中创建过期对象删除标记的场景,以及如何使用 S3 生命周期配置指示 Amazon S3 删除过期对象删除标记。
假设您编写了一个生命周期策略,该策略指定 NoncurrentVersionExpiration
操作以在对象变为非当前版本 30 天之后删除这些非当前版本,如下所示。
<LifecycleConfiguration> <Rule> ... <NoncurrentVersionExpiration> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>
NoncurrentVersionExpiration
操作不应用于当前的对象版本。只会删除非当前版本。
对于当前对象版本,您可以根据当前对象版本是否遵循了明确定义的生命周期,通过以下方式管理其生命周期:
-
当前对象版本遵循明确定义的生命周期。
在这种情况下,您可以将生命周期策略与
Expiration
操作一起使用以指示 Amazon S3 删除当前版本,如以下示例所示。<LifecycleConfiguration> <Rule> ... <Expiration> <Days>60</Days> </Expiration> <NoncurrentVersionExpiration> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>
Amazon S3 将在每个当前对象版本创建 60 天之后通过为其添加删除标记来删除它们。这会使当前对象版本变为非当前版本,并使删除标记变为当前版本。有关更多信息,请参阅 使用版本控制。
注意 此规则将在受版本控制的存储桶中自动执行
ExpiredObjectDeleteMarker
清理,因此不需要包含ExpiredObjectDeleteMarker
标签。同一生命周期配置中的
NoncurrentVersionExpiration
操作将在对象变为非当前对象 30 天后删除它们。因此,在此示例中,所有对象版本在对象创建 90 天后被永久删除。您将具有过期对象删除标记,但 Amazon S3 会为您检测并删除过期对象删除标记。 -
当前对象版本没有明确定义的生命周期。
在这种情况下,您可以在不需要对象时手动删除它们,从而创建具有一个或多个非当前版本的删除标记。如果使用
NoncurrentVersionExpiration
操作的生命周期配置删除了所有非当前版本,则您现在会获得过期对象删除标记。特别针对这种情况,Amazon S3 生命周期配置提供了
Expiration
操作,让您可以请求 Amazon S3 删除过期对象删除标记。<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>
通过在 ExpiredObjectDeleteMarker
操作中将 Expiration
元素设为 true,您可以指示 Amazon S3 移除过期对象删除标记。
当指定 ExpiredObjectDeleteMarker
生命周期操作时,该规则无法指定基于标签的筛选条件。
示例 8:用于中止分段上传的生命周期配置
您可以使用分段上传 API 来分段上传大型对象。有关分段上传的更多信息,请参阅分段上传概述。
利用 S3 生命周期配置,当分段上传在指定的启动后的天数内未完成时,您可以指示 Amazon S3 停止未完成的分段上传(通过在规则中指定的键名前缀确定)。当 Amazon S3 中止分段上传时,它将删除与分段上传关联的所有分段。这将确保您没有包含存储在 Amazon S3 中的分段的未完成分段上传,从而不必为这些分段支付任何存储费用。
当指定 AbortIncompleteMultipartUpload
生命周期操作时,该规则无法指定基于标签的筛选条件。
下面是使用 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>