

# ライフサイクル設定の要素
<a name="intro-lifecycle-rules"></a>

S3 ライフサイクル設定は、Amazon S3 がオブジェクトの有効期間中に実行するアクションを記述するさまざまな要素を含むライフサイクルルールで構成されます。各 S3 バケットには、最大 1,000 個のルールを含む 1 つのライフサイクル設定を割り当てることができます。Amazon S3 ライフサイクル設定を XML として指定します。これは 1 つ以上のライフサイクルルールで構成され、各ルールは 1 つ以上の要素で構成されます。

```
<LifecycleConfiguration>
    <Rule>
         <Element>
    </Rule>
    <Rule>
         <Element>
         <Element>
    </Rule>
</LifecycleConfiguration>
```

各ルールには次が含まれます。
+ ルール ID とルールが有効か無効かを示すステータスを含むルールメタデータ。ルールが無効な場合、Amazon S3 はルールで指定されているアクションを実行しません。
+ ルールが適用されるオブジェクトを特定するフィルター。フィルターを指定するには、オブジェクトサイズ、オブジェクトキープレフィックス、単一または複数のオブジェクトタグ、またはフィルターの組み合わせを使用できます。
+ 指定されたアクションを Amazon S3 に実行させる場合、オブジェクトの有効期間内の日付または期間が指定された 1 つ以上の移行または失効アクション。

**Topics**
+ [ID 要素](#intro-lifecycle-rule-id)
+ [Status 要素](#intro-lifecycle-rule-status)
+ [Filter 要素](#intro-lifecycle-rules-filter)
+ [ライフサイクルアクションを記述する要素](#intro-lifecycle-rules-actions)
+ [ライフサイクルルールへのフィルタの追加](intro-lifecycle-filters.md)

以下のセクションでは、S3 ライフサイクル設定における XML 要素について説明します。設定例については、「[S3 ライフサイクル設定の例](lifecycle-configuration-examples.md)」を参照してください。

## ID 要素
<a name="intro-lifecycle-rule-id"></a>

ライフサイクル設定はバケットレベルで設定され、各バケットには独自のライフサイクル設定があります。S3 ライフサイクル設定には、バケットあたり最大 1,000 個のルールを記述できます。この制限は調整できません。`<ID>` 要素は、バケットのライフサイクル設定内のルールを一意に識別します。ID の長さは、255 文字に制限されています。

## Status 要素
<a name="intro-lifecycle-rule-status"></a>

`<Status>` 要素の値は、`Enabled` または `Disabled` のいずれかです。ルールが無効な場合、Amazon S3 はルールで定義されたアクションを実行しません。

## Filter 要素
<a name="intro-lifecycle-rules-filter"></a>

S3 ライフサイクルルールは、ルールで指定した `<Filter>` 要素に基づいて、バケット内のすべてのオブジェクトまたはオブジェクトのサブセットに適用できます。

オブジェクトは、キープレフィックス、オブジェクトタグ、またはそれらの組み合わせ (この場合、Amazon S3 は論理 `AND` を使用してフィルタを組み合わせます）により、オブジェクトをフィルタできます。フィルターの例と詳細については、「[ライフサイクルルールへのフィルタの追加](intro-lifecycle-filters.md)」を参照してください。
+ **キープレフィックスを使用したフィルターの指定** – この例は、キー名のプレフィックス (`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>
  ```

  異なるキー名のプレフィックスに基づいてオブジェクトのサブセットにライフサイクルアクションを適用する場合は、別のルールを指定します。各ルールでは、プレフィックスベースのフィルタを指定します。例えば、キープレフィックスが `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>
  ```
+ [**object size**] によりルールをフィルタリングするには、最小サイズ、(`ObjectSizeGreaterThan`) または最大サイズ (`ObjectSizeLessThan`) を指定するか、またはオブジェクトのサイズの範囲を指定できます。

  オブジェクトサイズの値はバイト単位です。デフォルトでは、128 KB 未満のオブジェクトは、最小サイズ (`ObjectSizeGreaterThan`) または最大サイズ (`ObjectSizeLessThan`) を指定しない限り、どのストレージクラスにも移行されません。詳細については、「[例: 128 KB 未満のオブジェクトの移行を許可する](lifecycle-configuration-examples.md#lc-small-objects)」を参照してください。

  ```
                      <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>
  ```

## ライフサイクルアクションを記述する要素
<a name="intro-lifecycle-rules-actions"></a>

次の定義済みのアクションのうち 1 つ以上を S3 ライフサイクルルールに指定することで、オブジェクトの有効期間中に特定のアクションを実行するように Amazon S3 に指示することができます。これらのアクションの効果は、バケットのバージョニング状態によって異なります。
+ **`Transition` アクション要素** – オブジェクトを別のストレージクラスに移行するには、`Transition` アクションを指定します。オブジェクトの移行の詳細については、「[サポートされている移行](lifecycle-transition-general-considerations.md#lifecycle-general-considerations-transition-sc)」を参照してください。オブジェクトの有効期間内の指定の日付または期間に到達すると、Amazon S3 は移行を実行します。

  バージョニング対応のバケット (バージョニングが有効なバケットまたはバージョニングが停止されたバケット) の場合、`Transition` アクションは最新のオブジェクトバージョンに適用されます。以前のバージョンを管理する場合、Amazon S3 は `NoncurrentVersionTransition` アクション (以下で説明されます) を定義します。
+ **`Expiration` アクション要素** – `Expiration` アクションは、ルールで特定されたオブジェクトを期限切れにします。これは、Amazon S3 のいずれかのストレージクラスの該当するオブジェクトに適用されます。ストレージクラスの詳細については、「[Amazon S3 ストレージクラスの理解と管理](storage-class-intro.md)」を参照してください。Amazon S3 により有効期限切れになったオブジェクトはいずれも使用できなくなります。オブジェクトが完全に削除されるかどうかは、バケットのバージョニング状態によって異なります。
  + **バージョニング非対応のバケット** – `Expiration` アクションを実行すると、Amazon S3 はオブジェクトを完全に削除します。
  + **バージョニング対応バケット** – バージョニング対応バケット (つまり、バージョニングが有効であるかバージョニングが停止されている) の場合、Amazon S3 による `Expiration` アクションの処理方法を決める考慮事項がいくつかあります。バージョニングが有効なバケットまたはバージョニングが停止されたバケットには、以下が適用されます。
    + `Expiration` アクションは、最新のバージョンにのみ適用されます (最新以外のバージョンには影響しません)。
    + 1 つ以上のオブジェクトバージョンがあり、削除マーカーが最新バージョンである場合、Amazon S3 はアクションを実行しません。
    + 現在のオブジェクトバージョンが唯一のオブジェクトバージョンであり、削除マーカーでもある場合 (「*期限切れオブジェクト削除マーカー*」とも呼ばれます。すべてのオブジェクトバージョンが削除され、削除マーカーのみ残ります)、Amazon S3 は期限切れのオブジェクト削除マーカーを削除します。また、expiration アクションを使用して、期限切れオブジェクト削除マーカーをすべて削除するよう Amazon S3 に指示することもできます。例については、「[バージョニングが有効なバケットで期限切れのオブジェクト削除マーカーを削除する](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7)」を参照してください。

    詳細については、「[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md)」を参照してください。

    有効期限を管理するために Amazon S3 をセットアップする場合は、次の点も考慮します。
    + **バージョニングが有効なバケット** 

      現在のオブジェクトバージョンが削除マーカーではない場合、Amazon S3 は固有のバージョン ID を持つ削除マーカーを追加します。これにより、最新のバージョンが最新以外のバージョンとなり、削除マーカーが最新バージョンになります。
    + **バージョニングが停止されたバケット** 

      バージョニングを停止したバケットでは、有効期限切れアクションにより Amazon S3 がバージョン ID として `null` を使用する削除マーカーを作成します。この削除マーカーは、バージョン階層においてあらゆるオブジェクトバージョンをバージョン ID null に置き換えるため、オブジェクトが効率的に削除されます。

さらに、Amazon S3 はバージョン対応のバケット (つまり、バージョニングが有効なバケットとバージョニングが停止されているバケット) で以前のオブジェクトバージョンを管理するために使用できる次のアクションを提供します。
+ **`NoncurrentVersionTransition` アクション要素** – このアクションを使用して、Amazon S3 がオブジェクトを指定したストレージクラスに移行するタイミングを指定します。この有効期限切れは、オブジェクトが最新でなくなった以降の特定の日数 (`<NoncurrentDays>`) に基づいて設定できます。日数以外にも、保持する最新以外のバージョンの最大数 (`<NewerNoncurrentVersions>`) (1～100 の間) を指定することもできます。この値は、Amazon S3 が特定のバージョンに移行する前に、最新でないバージョンがいくつ必要かを決定します。Amazon S3 は、保持すると指定された数を超える最新でないバージョンをすべて移行します。移行を実行するには、`<NoncurrentDays>` **および** `<NewerNoncurrentVersions>` の両方の値を超える必要があります。

  保持する最新以外のバージョンの数を指定するには、`<Filter>` 要素も指定する必要があります。`<Filter>` 要素を指定しないで保持する最新以外のバージョンの数を指定すると、Amazon S3 で `InvalidRequest` エラーが発生します。

  オブジェクトの移行の詳細については、「[サポートされている移行](lifecycle-transition-general-considerations.md#lifecycle-general-considerations-transition-sc)」を参照してください。`NoncurrentVersionTransition` アクション中の日数を指定した日付を Amazon S3 が計算する方法の詳細については、[ライフサイクルルール: オブジェクトの存在時間に基づく](#intro-lifecycle-rules-number-of-days) を参照してください。
+ **`NoncurrentVersionExpiration` アクション要素** – Amazon S3 に最新以外のオブジェクトのバージョンを完全に削除することを指示するには、このアクションを使用します。このように削除されたオブジェクトは復元することはできません。この有効期限切れは、オブジェクトが最新でなくなった以降の特定の日数 (`<NoncurrentDays>`) に基づいて設定できます。日数以外にも、保持する最新以外のバージョンの最大数 (`<NewerNoncurrentVersions>`) (1～100 の間) を指定することもできます。この値は、Amazon S3 が特定のバージョンを期限切れにする前に、最新でないバージョンがいくつ必要かを指定します。Amazon S3 は、保存すると指定された数を超える最新でないバージョンをすべて完全に削除します。削除が行われるには、`<NoncurrentDays>` **および** `<NewerNoncurrentVersions>` の両方の値を超える必要があります。

  保持する最新以外のバージョンの数を指定するには、`<Filter>` 要素も指定する必要があります。`<Filter>` 要素を指定しないで保持する最新以外のバージョンの数を指定すると、Amazon S3 で `InvalidRequest` エラーが発生します。

  以前のオブジェクトをこのように遅れて削除すると、誤って削除または上書きを修正する必要がある場合に役立ちます。たとえば、最新以外のバージョンになってから 5 日後に削除する有効期間ルールを設定できます。例えば、2014 年 1 月 1 日 10:30 AM (UTC) に、`photo.gif` (バージョン ID 111111) というオブジェクトを作成したとします。2014 年 1 月 2 日 11:30 AM (UTC) に、`photo.gif` (バージョン ID 111111) を誤って削除したとします。これにより、新しいバージョン ID (バージョン ID 4857693 など) の削除マーカーが作成されます。この場合、完全な削除が行われるまでの 5 日間は、元のバージョンの `photo.gif` (バージョン ID 111111) を復元することができます。2014 年 1 月 8 日 00:00 (UTC) に、有効期限切れのライフサイクルルールが実行され、`photo.gif` (バージョン ID 111111) は完全に削除されます。これは、このバージョンが最新バージョンでなくなってから 5 日後です。

  `NoncurrentVersionExpiration` アクションの日数を指定した日付を Amazon S3 が計算する方法の詳細については、[ライフサイクルルール: オブジェクトの存在時間に基づく](#intro-lifecycle-rules-number-of-days) を参照してください。
**注記**  
オブジェクトの有効期限切れを決定するライフサイクル設定では、不完全なマルチパートアップロードは削除されません。不完全なマルチパートアップロードを削除するには、`AbortIncompleteMultipartUpload` というライフサイクル設定アクションを使用する必要があります。このアクションについては、このセクションの後半で説明します。

この移行アクションと有効期限切れアクション以外にも、次のライフサイクル設定アクションを使用して、不完全なマルチパートアップロードを停止するか、有効期限切れのオブジェクト削除マーカーを削除するように Amazon S3 に指示できます。
+ **`AbortIncompleteMultipartUpload` アクション要素** – この要素を使用すると、マルチパートアップロードの進行を許可する最大時間 (日数) を指定できます。対象となるマルチパートアップロード (ライフサイクルルールで指定されているキー名の `prefix` で特定) が所定の期間内に正常に完了していない場合、Amazon S3 は不完全なマルチパートアップロードを中止します。詳細については、「[マルチパートアップロードの中止](abort-mpu.md)」を参照してください。
**注記**  
このライフサイクルアクションは、オブジェクトタグを使用するフィルターが含まれるルールでは指定できません。
+ **`ExpiredObjectDeleteMarker` アクション要素** – バージョニングが有効になっているバケットでは、最新以外のバージョンが 0 の削除マーカーは、**期限切れオブジェクト削除マーカーと呼ばれます。このライフサイクルアクションを使用して、期限切れオブジェクト削除マーカーを削除するように S3 に指示できます。例については、[バージョニングが有効なバケットで期限切れのオブジェクト削除マーカーを削除する](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7)を参照してください。
**注記**  
このライフサイクルアクションは、オブジェクトタグを使用するフィルターが含まれるルールでは指定できません。

### オブジェクトが最新でなくなってからの期間を Amazon S3 が計算する方法
<a name="non-current-days-calculations"></a>

バージョニングが有効なバケットで、オブジェクトの複数のバージョンを所持することができます。最新バージョンが常に 1 個、最新以外のバージョンが 0 個以上存在します。オブジェクトをアップロードするたびに、最新バージョンは以前のバージョンとして保持され、新しく追加されたバージョンがその代わりに最新バージョンになります。オブジェクトが最新でなくなってからの日数を知るために、Amazon S3 はその次の最新バージョンがいつ作成されたかを調べます。Amazon S3 は、オブジェクトの次の最新バージョンが作成されてからの日数を、オブジェクトが最新でなくなってからの日数として使用します。

**S3 ライフサイクル設定を使用する場合のオブジェクトの以前のバージョンの復元**  
「[以前のバージョンの復元](RestoringPreviousVersions.md)」で説明したとおり、次の 3 つの方法のいずれかを使用して、オブジェクトの以前のバージョンを取得できます。  
**方法 1 – オブジェクトの最新以外のバージョンを同じバケットにコピーします。**コピーされたオブジェクトはそのオブジェクトの最新バージョンになり、すべてのオブジェクトバージョンが維持されます。
**方法 2 – オブジェクトの現在のバージョンを完全に削除します。**最新のオブジェクトバージョンを削除すると、結果として、以前のバージョンがそのオブジェクトの最新バージョンになります。
バージョニングが有効になっているバケットで S3 ライフサイクル設定ルールを使用している場合は、ベストプラクティスとして、方法 1 を使用することをお勧めします。  
S3 ライフサイクルは、結果整合性モデル下で動作します。最新バージョンが完全に削除されても、変更がすべての Amazon S3 システムに反映されるまで消えない場合があります。(このため、Amazon S3 はこのような削除を一時的に認識しない場合があります)。一方で、以前のオブジェクトを有効期限切れにするように設定したライフサイクルルールは、復元したいオブジェクトを含む以前のオブジェクトを完全に削除する可能性があります。つまり、方法 1 でお勧めしたとおり、代替方法として古いバージョンをコピーする方が安全です。

### ライフサイクルのアクションとバケットのバージョニング状態
<a name="lifecycle-actions-bucket-versioning-state"></a>

次の表では、オブジェクトを含むバケットのバージョニングの状態に関連した、オブジェクトに対する S3 ライフサイクル設定ルールアクションの動作をまとめています。


| Action | バージョニング非対応の (バージョニングが有効でない) バケット | バージョニングが有効なバケット | バージョニングが停止されたバケット | 
| --- | --- | --- | --- | 
|  `Transition` 指定した日付またはオブジェクトの有効期間内の期間に達した場合。  | Amazon S3 は、オブジェクトを指定されたストレージクラスに移行します。 | Amazon S3 は、オブジェクトの最新バージョンを、指定されたストレージクラスに移行します。 | バージョニングが有効なバケットと同じ動作。 | 
|  `Expiration` 指定した日付またはオブジェクトの有効期間内の期間に達した場合。  | Expiration アクションは、オブジェクトを削除します。削除されたオブジェクトは復元できません。 | S3 は削除マーカーを作成します。これが最新バージョンとなり、既存の最新バージョンは最新以外のバージョンとして保持されます。 | このライフサイクルアクションは、バージョン ID null を持つ削除マーカーを作成し、これが最新バージョンになります。オブジェクトの最新バージョンのバージョン ID が null の場合、Expiration アクションはこのバージョンを完全に削除します。それ以外の場合、最新バージョンは以前のバージョンとして保持されます。 | 
|  `NoncurrentVersionTransition` バージョニングが有効になっているかバージョニングが一時停止されているバケット内の最新以外のバージョンの場合、S3 ライフサイクルは、オブジェクトが最新でなくなってからの日数が、ルールで **[オブジェクトが現行バージョンでなくなってからの日数]** (`<NoncurrentDays>`) で指定された値を超え、**さらに**バージョン数がルールで **[保持する新しいバージョンの数]** (`<NewerNoncurrentVersions>`) で指定された値を超えた場合にオブジェクトを移行します。  | NoncurrentVersionTransition は何も実行しません。 |  Amazon S3 は、オブジェクトの以前のバージョンを、指定されたストレージクラスに移行します。  | バージョニングが有効なバケットと同じ動作。 | 
|  `NoncurrentVersionExpiration` バージョニングが有効になっているかバージョニングが一時停止されているバケット内の最新以外のバージョンの場合、S3 ライフサイクルは、オブジェクトが最新でなくなってからの日数が、ルールで **[オブジェクトが現行バージョンでなくなってからの日数]** (`<NoncurrentDays>`) で指定された値を超え、**さらに**バージョン数がルールで **[保持する新しいバージョンの数]** (`<NewerNoncurrentVersions>`) で指定された値を超えた場合にオブジェクトを期限切れにします。  | NoncurrentVersionExpiration は何も実行しません。 | NoncurrentVersionExpiration アクションは、オブジェクトの最新でないバージョンを完全に削除します。削除されたオブジェクトは復元できません。 | バージョニングが有効なバケットと同じ動作。 | 

### ライフサイクルルール: オブジェクトの存在時間に基づく
<a name="intro-lifecycle-rules-number-of-days"></a>

Amazon S3 が指定したアクションを実行できる期間は、オブジェクトの作成 (または変更) からの日数で指定できます。

日数を S3 ライフサイクル設定の `Transition` アクションおよび `Expiration` アクションで指定する場合は、以下の点に注意してください。
+ 指定する値は、オブジェクトの作成からアクションが発生するまでの日数です。
+ Amazon S3 は、ルールで指定された日数をオブジェクト作成時刻に加え、その結果の時刻を翌日の UTC 午前 0 時に切り上げて時刻を算出します。例えば、あるオブジェクトが 2014 年 1 月 15 日 10:30 AM (UTC) に作成され、移行ルールで 3 日と指定した場合、オブジェクトの移行日は 2014 年 1 月 19 日 00:00 (UTC) となります。

**注記**  
Amazon S3 は、各オブジェクトの最終更新日のみを維持します。例えば、Amazon S3 コンソールでは、オブジェクトの **[プロパティ]** ペインに **[最終更新日時]** が表示されています。新しいオブジェクトを最初に作成する際は、この日付はオブジェクトの作成日を表示します。オブジェクトを置き換えた場合、日付はそれに応じて変わります。つまり、オブジェクトの作成日と **[最終更新日時]** は同期しています。

日数をライフサイクル設定の `NoncurrentVersionTransition` アクションおよび `NoncurrentVersionExpiration` アクションで指定する場合は、以下の点に注意してください。
+ 指定する値は、オブジェクトのバージョンが最新ではなくなった日時 (つまり、オブジェクトが上書きまたは削除された日時) から、Amazon S3 が指定したオブジェクトに対してアクションを実行するまでの日数です。
+ Amazon S3 は、オブジェクトの次の最新バージョンが作成された時刻にルールで指定された日数を加算して、その結果の時刻を翌日の UTC 午前 0 時に切り上げて時刻を算出します。例えば、バケット内に 2014 年 1 月 1 日の 10:30 AM (UTC) に作成されたオブジェクトの最新バージョンがあるとします。この最新バージョンを置き換えるオブジェクトの新しいバージョンが 2014 年 1 月 15 日の 10:30 AM (UTC) に作成され、移行ルールで 3 日を指定した場合、オブジェクトの移行日は 2014 年 1 月 19 日 00:00 (UTC) と算出されます。

### ライフサイクルルール: 特定の日付に基づく
<a name="intro-lifecycle-rules-date"></a>

S3 ライフサイクルルールでアクションを指定する際に、Amazon S3 がアクションを実行する日付を指定できます。特定の日付になると、Amazon S3 は (フィルタ条件に基づいて) すべての対象オブジェクトにアクションに適用します。

過去の日付を使用して S3 ライフサイクルアクションを指定すると、すべての対象オブジェクトは、直ちにそのライフサイクルアクションの対象となります。

**重要**  
日付ベースのアクションは、1 回限りのアクションではありません。Amazon S3 は、日付が過ぎた後も、ルールのステータスが `Enabled` である限り、継続して日付ベースのアクションを適用します。  
例えば、すべてのオブジェクトを削除する日付ベースの `Expiration` アクションを指定するとします (このルールにはフィルターが指定されていないと仮定します)。Amazon S3 は特定の日付に、バケットのすべてのオブジェクトを期限切れにします。Amazon S3 は、バケット内に作成した新しいオブジェクトも続けて有効期限切れにします。ライフサイクルアクションを停止するには、ライフサイクルルールからアクションを削除するか、ルールを無効にするか、ライフサイクル設定からルールを削除する必要があります。

日付の値は、ISO 8601 形式に従う必要があります。この時刻は常に午前 0 時 (UTC) となります。

**注記**  
Amazon S3 コンソールを使用して日付ベースのライフサイクルルールを作成することはできません。ただし、このようなルールを表示、無効化、または削除することはできます。

# ライフサイクルルールへのフィルタの追加
<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>
  ```