

# ライフサイクルルールへのフィルタの追加
<a name="intro-lifecycle-filters"></a>

フィルタはオプションのライフサイクルルール要素であり、ルールが適用されるオブジェクトを指定するために使用できます。

オブジェクトをフィルタリングするには、次の要素を使用できます。

**キープレフィックス**  
プレフィックスに基づいてオブジェクトをフィルタリングできます。異なるプレフィックスを持つオブジェクトのサブセットにライフサイクルアクションを適用する場合は、アクションごとに個別のルールを作成します。

**オブジェクトタグ**  
1 つ以上のタグに基づいてオブジェクトをフィルタリングできます。各タグはキーと値の両方に正確に一致する必要があります。複数のタグを指定する場合、各タグキーは一意である必要があります。複数のオブジェクトタグを持つフィルタは、すべてのタグが指定されているオブジェクトのサブセットに適用されます。オブジェクトに追加のタグが指定されていても、フィルタは引き続き適用されます。  
`Key` 要素のみを指定し、`Value` 要素を指定しない場合、ルールはタグキーと一致し、値が指定されていないオブジェクトにのみ適用されます。

**最小または最大オブジェクトサイズ**  
サイズに基づいてオブジェクトをフィルタリングできます。最小サイズ (`ObjectSizeGreaterThan`)、または最大サイズ (`ObjectSizeLessThan`) を指定するか、同じでフィルタでオブジェクトサイズの範囲を指定することができます。オブジェクトサイズの値はバイト単位です。フィルターの最大サイズは 50 TB です。Amazon S3 は、ライフサイクル設定にデフォルトの最小オブジェクトサイズを適用します。詳細については、「[例: 128 KB 未満のオブジェクトの移行を許可する](lifecycle-configuration-examples.md#lc-small-objects)」を参照してください。

さまざまなフィルタ要素を組み合わせることができます。その場合、Amazon S3 は論理 `AND` を使用します。

## フィルタ例
<a name="filter-examples"></a>

次の例は、さまざまなフィルタ要素を使用する方法を示しています。
+ **キープレフィックスを使用したフィルターの指定** – この例は、キー名のプレフィックス (`logs/`) に基づいてオブジェクトのサブセットに適用される S3 ライフサイクルルールを示しています。例えば、ライフサイクルルールはオブジェクト `logs/mylog.txt`、`logs/temp1.txt`、`logs/test.txt` に適用されます。このルールは、オブジェクト `example.jpg` には適用されません。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
             <Prefix>logs/</Prefix>
          </Filter>
          transition/expiration actions
           ...
      </Rule>
      ...
  </LifecycleConfiguration>
  ```
**注記**  
 同じ文字で始まるプレフィックスが 1 つ以上ある場合は、末尾のスラッシュ (`/`) を除外した部分的なプレフィックスをフィルターで指定することで、これらのプレフィックスをすべてルールに含めることができます。例えば、次のようなプレフィックスがあるとします。  

  ```
  sales1999/
                  sales2000/
                  sales2001/
  ```
ルールに 3 つのプレフィックスをすべて含めるには、ライフサイクルルールで `sales` をプレフィックスとして指定します。

  異なるキー名のプレフィックスに基づいてオブジェクトのサブセットにライフサイクルアクションを適用する場合は、別のルールを指定します。各ルールでは、プレフィックスベースのフィルタを指定します。例えば、キープレフィックスが `projectA/` と `projectB/` のオブジェクトのライフサイクルアクションを作成するには、次のとおり 2 つのルールを指定します。

  ```
  <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>` 要素でタグを囲む必要があります。ルールは、2 つのタグ (特定のタグキーと値を持つ) が付与されたオブジェクトでライフサイクルアクションを実行するように 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` を使用してこのようなフィルターを組み合わせます。つまり、ルールは指定したキープレフィックスと特定のタグを持つオブジェクトのサブセットに適用されます。フィルタのプレフィックスは最大 1 個、タグは 0 個以上にします。
+ **空のフィルタを指定** – 空のフィルタを指定できます。その場合、ルールはオブジェクト内のすべてのバケットに適用されます。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```
+ **オブジェクトサイズフィルタを指定** – オブジェクトサイズでルールをフィルタリングするには、最小サイズ (`ObjectSizeGreaterThan`) または最大サイズ (`ObjectSizeLessThan`) を指定するか、またはオブジェクトのサイズの範囲を指定できます。

  オブジェクトサイズの値はバイト単位です。フィルターの最大サイズは 50 TB です。ストレージクラスによっては、オブジェクトサイズに最小制限があります。詳細については、「[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` フィルターは、指定された値を除外します。例えば、S3 Standard ストレージクラスから S3 Standard-IA ストレージクラスに移動するためにオブジェクトのサイズを 128 KB から 1024 KB に設定した場合、1024 KB ちょうどのオブジェクトと 128 KB ちょうどのオブジェクトは S3 Standard-IA に移動されません。代わりに、このルールは 128 KB より大きく 1024 KB よりも小さいサイズのオブジェクトにのみ適用されます。

  オブジェクトサイズの範囲を指定する場合は、`ObjectSizeGreaterThan` 整数は `ObjectSizeLessThan` 値未満にする必要があります。複数のフィルタを使用する場合は、`<And>` エレメントのフィルタを包む必要があります。次の例は、500 バイトから 64,000 バイトの範囲でオブジェクトを指定する方法を示しています。

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