Amazon S3 如何处理生命周期配置中的冲突
通常,Amazon S3 生命周期会针对成本进行优化。例如,如果两个过期策略重叠,将采用较短的过期策略,以便数据存储不会超过预期时间。同样,如果两个转换策略重叠,S3 生命周期将对象转换为较低成本的存储类。
在这两种情况下,S3 生命周期尝试选择最便宜的路径。该一般规则的一个例外情况是 S3 Intelligent-Tiering 存储类。S3 生命周期更青睐 S3 Intelligent-Tiering 而非任何其它存储类,但 S3 Glacier 和 S3 Glacier Deep Archive 存储类除外。
当您在 S3 生命周期配置中有多个规则时,对象可能变得符合条件可在同一天执行多个 S3 生命周期操作。在这种情况下,Amazon S3 遵循以下一般规则:
-
永久删除优先于转换。
-
转换优先于删除标记的创建。
-
当对象符合条件可进行 S3 Glacier Flexible Retrieval 和 S3 Standard-IA(或 S3 One Zone-IA)转换时,Amazon S3 将选择 S3 Glacier Flexible Retrieval 转换。
重叠的筛选条件和冲突的生命周期操作的示例
您可能会指定一个在其中指定了重叠的前缀或操作的 S3 生命周期配置。以下示例说明 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 天后使其过期。该对象将被删除,因此转换操作不会起作用。