

# Amazon S3 如何处理生命周期配置中的冲突
<a name="lifecycle-conflicts"></a>

通常，Amazon S3 生命周期会针对成本进行优化。例如，如果两个过期策略重叠，将采用较短的过期策略，以便数据存储不会超过预期时间。同样，如果两个转换策略重叠，S3 生命周期将对象转换为较低成本的存储类。

在这两种情况下，S3 生命周期尝试选择最便宜的路径。该一般规则的一个例外情况是 S3 Intelligent-Tiering 存储类。S3 生命周期希望采用 S3 Intelligent-Tiering 而不是任何其他存储类，但 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 存储类除外。

当您在 S3 生命周期配置中有多个规则时，对象可能变得符合条件可在同一天执行多个 S3 生命周期操作。在这种情况下，Amazon S3 遵循以下一般规则：
+ 永久删除优先于转换。
+ 转换优先于[删除标记](DeleteMarker.md)的创建。
+ 当对象符合条件可进行 S3 Glacier Flexible Retrieval 和 S3 Standard-IA（或 S3 One Zone-IA）转换时，Amazon S3 将选择 S3 Glacier Flexible Retrieval 转换。

## 重叠的筛选条件和冲突的生命周期操作的示例
<a name="lifecycle-config-conceptual-ex5"></a>

您可能会指定一个在其中指定了重叠的前缀或操作的 S3 生命周期配置。以下示例说明 Amazon S3 如何解决潜在的冲突。

**Example 1：重叠的前缀（无冲突）**  
以下示例配置包含两个规则，它们指定了如下所示的重叠前缀：  
+ 第一个规则指定了一个空筛选条件，指示存储桶中的所有对象。
+ 第二个规则指定了一个键名前缀 (`logs/`)，指示仅一部分对象。
规则 1 请求 Amazon S3 在所有对象创建一年后删除这些对象。规则 2 请求 Amazon S3 在创建 30 天后将对象子集转换为 S3 Standard-IA 存储类。  

```
 1. <LifecycleConfiguration>
 2.   <Rule>
 3.     <ID>Rule 1</ID>
 4.     <Filter>
 5.     </Filter>
 6.     <Status>Enabled</Status>
 7.     <Expiration>
 8.       <Days>365</Days>
 9.     </Expiration>
10.   </Rule>
11.   <Rule>
12.     <ID>Rule 2</ID>
13.     <Filter>
14.       <Prefix>logs/</Prefix>
15.     </Filter>
16.     <Status>Enabled</Status>
17.     <Transition>
18.       <StorageClass>STANDARD_IA</StorageClass>
19.       <Days>30</Days>
20.     </Transition>
21.    </Rule>
22. </LifecycleConfiguration>
```
由于在这种情况下没有冲突，因此 Amazon S3 将在创建 30 天后将带有 `logs/` 前缀的对象转换为 S3 Standard-IA 存储类。当任何对象在创建一年后到达时，它将被删除。

**Example 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 在这些对象上选择过期操作。

**Example 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 天后转换它们。

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



