

# 将筛选条件添加到生命周期规则
<a name="intro-lifecycle-filters"></a>

筛选条件是一个可选的生命周期规则元素，可用于指定规则适用于哪些对象。

以下元素可用于筛选对象：

**键前缀**  
可以基于前缀来筛选对象。如果要将生命周期操作应用于具有不同前缀的对象子集，请为每个操作创建单独的规则。

**对象标签**  
可以基于一个或多个标签来筛选对象。每个标签必须与键和值完全匹配，如果您指定多个标签，每个标签键必须是唯一的。具有多个对象标签的筛选条件应用于已指定了所有标签的对象子集。如果某个对象指定了其它标签，则该筛选条件仍将适用。  
如果您只指定 `Key` 元素而未指定 `Value` 元素，则该规则将仅应用于与标签键匹配而未指定值的对象。

**最小或最大对象大小**  
可以基于大小来筛选对象。可以指定最小大小 (`ObjectSizeGreaterThan`) 或最大大小 (`ObjectSizeLessThan`)，也可以在同一个筛选条件中指定一系列对象大小。对象大小值以字节为单位。最大筛选条件大小为 50TB。Amazon S3 对生命周期配置应用默认的最小对象大小。有关更多信息，请参阅 [示例：支持转换小于 128 KB 的对象](lifecycle-configuration-examples.md#lc-small-objects)。

可以组合不同的筛选元素，在这种情况下，Amazon S3 使用逻辑 `AND`。

## 筛选示例
<a name="filter-examples"></a>

以下示例说明如何使用不同的筛选元素：
+ **使用键前缀指定筛选条件** – 此示例显示一个 S3 生命周期规则，此规则基于键名前缀（`logs/`）应用于一部分对象。例如，此生命周期规则应用于对象 `logs/mylog.txt`、`logs/temp1.txt` 和 `logs/test.txt`。此规则不应用于对象 `example.jpg`。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
             <Prefix>logs/</Prefix>
          </Filter>
          transition/expiration actions
           ...
      </Rule>
      ...
  </LifecycleConfiguration>
  ```
**注意**  
 如果您有一个或多个前缀以相同的字符开头，则可以通过在筛选条件中指定不带尾部斜杠 (`/`) 的部分前缀，来将所有这些前缀包含在规则中。例如，假设您有以下前缀：  

  ```
  sales1999/
                  sales2000/
                  sales2001/
  ```
要在规则中包含所有三个前缀，请在生命周期规则中指定 `sales` 作为前缀。

  如果您要基于不同的键名称前缀将生命周期操作应用于一部分对象，可指定单独的规则。在每个规则中，指定基于前缀的筛选条件。例如，要描述具有键前缀 `projectA/` 和 `projectB/` 的对象的生命周期操作，可指定两个规则，如下所示：

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
             <Prefix>projectA/</Prefix>
          </Filter>
          transition/expiration actions
           ...
      </Rule>
  
      <Rule>
          <Filter>
             <Prefix>projectB/</Prefix>
          </Filter>
          transition/expiration actions
           ...
      </Rule>
  </LifecycleConfiguration>
  ```

  有关对象键的更多信息，请参阅 [为 Amazon S3 对象命名](object-keys.md)。
+ **指定基于对象标签的筛选条件** – 在以下示例中，此生命周期规则指定基于标签（`key`）和值（`value`）的筛选条件。随后，此规则仅应用于具有特定标签的一部分对象。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
             <Tag>
                <Key>key</Key>
                <Value>value</Value>
             </Tag>
          </Filter>
          transition/expiration actions
          ...
      </Rule>
  </LifecycleConfiguration>
  ```

  您可以指定基于多个标签的筛选条件。您必须在 `<And>` 元素中包含标签，如以下示例所示。此规则指示 Amazon S3 对具有两个标签（带特定的标签键和值）的对象执行生命周期操作。

  ```
  <LifecycleConfiguration>
      <Rule>
        <Filter>
           <And>
              <Tag>
                 <Key>key1</Key>
                 <Value>value1</Value>
              </Tag>
              <Tag>
                 <Key>key2</Key>
                 <Value>value2</Value>
              </Tag>
               ...
            </And>
        </Filter>
        transition/expiration actions
      </Rule>
  </Lifecycle>
  ```

  此生命周期规则应用于具有指定的两个标签的对象。Amazon S3 执行逻辑 `AND`。请注意以下几点：
  + 每个标签的键和值*都* 必须完全匹配。如果您只指定 `<Key>` 元素而不指定 `<Value>` 元素，则该规则将仅应用于与标签键匹配而*未* 指定值的对象。
  + 此规则应用于具有规则中指定的所有标签的一部分对象。如果某个对象指定了其他标签，则该规则仍将适用。
**注意**  
当您在筛选条件中指定多个标签时，每个标签键必须是唯一的。
+ **指定基于前缀和一个或多个标签的筛选条件** – 在生命周期规则中，您可以指定基于键前缀和一个或多个标签的筛选条件。同样，您必须在 `<And>` 元素中包含所有这些筛选条件元素，如下所示：

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
            <And>
               <Prefix>key-prefix</Prefix>
               <Tag>
                  <Key>key1</Key>
                  <Value>value1</Value>
               </Tag>
               <Tag>
                  <Key>key2</Key>
                  <Value>value2</Value>
               </Tag>
                ...
            </And>
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```

  Amazon S3 使用逻辑 `AND` 组合这些筛选条件。也就是说，该规则应用于具有指定键前缀和指定标签的对象子集。一个筛选条件只能有一个前缀以及零个或多个标签。
+ **指定空筛选条件** – 可以指定空筛选条件，在此情况下，规则应用于存储桶中的所有对象。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```
+ **指定对象大小筛选条件** – 要按对象大小来筛选规则，可以指定最小大小 (`ObjectSizeGreaterThan`) 或最大大小 (`ObjectSizeLessThan`)，也可以指定一系列对象大小。

  对象大小值以字节为单位。最大筛选条件大小为 50TB。某些存储类具有最小对象大小限制。有关更多信息，请参阅 [比较 Amazon S3 存储类](storage-class-intro.md#sc-compare)。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
              <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan>   
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```
**注意**  
`ObjectSizeGreaterThan` 和 `ObjectSizeLessThan` 筛选条件不包含所指定的值。例如，如果您将大小为 128 KB 到 1024 KB 的对象设置为从 S3 Standard 存储类移到 S3 Standard-IA 存储类，则大小精确为 1024 KB 和 128 KB 的对象将不会转换到 S3 Standard-IA。相反，该规则将仅适用于大小大于 128 KB 且小于 1024 KB 的对象。

  如果要指定对象大小范围，`ObjectSizeGreaterThan` 整数必须小于 `ObjectSizeLessThan` 值。当使用多个筛选条件时，必须将筛选条件包装在 `<And>` 元素中。以下示例显示了如何指定范围在 500 字节到 64000 字节之间的对象。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
              <And>
                  <Prefix>key-prefix</Prefix>
                  <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan>
                  <ObjectSizeLessThan>64000</ObjectSizeLessThan>
              </And>    
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```