Amazon S3 如何处理生命周期配置中的冲突 - Amazon Simple Storage Service

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 天后使其过期。该对象将被删除,因此转换操作不会起作用。