ライフサイクル設定の要素 - Amazon Simple Storage Service

ライフサイクル設定の要素

S3 ライフサイクル設定は、1 つ以上のライフサイクルルールで構成される XML として指定します。

<LifecycleConfiguration> <Rule> ... </Rule> <Rule> ... </Rule> </LifecycleConfiguration>

各ルールには次が含まれます。

  • ルール ID を含むルールメタデータと、ルールが有効か無効かを示すステータス。ルールが無効な場合、Amazon S3 はルールで指定されているアクションを実行しません。

  • ルールが適用されるオブジェクトを特定するフィルター。オブジェクトキーサイズ、オブジェクトキープレフィックス、あるいは 1 つ以上のオブジェクトタグ、またはフィルターの組み合わせを使用して、フィルターを指定できます。

  • 指定されたアクションを Amazon S3 に実行させる場合、オブジェクトの有効期間内の日付または期間が指定された 1 つ以上の移行または失効アクション。

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

ID 要素

S3 ライフサイクル設定には最大 1,000 個のルールを記述できます。この制限は調整できません。<ID> 要素は、ルールを一意に識別します。ID の長さは、255 文字に制限されています。

Status 要素

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

Filter 要素

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

オブジェクトは、キープレフィックス、オブジェクトタグ、またはそれらの組み合わせ (この場合、Amazon S3 は論理 AND を使用してフィルターを組み合わせます)により、オブジェクトをフィルターできます。次の例を考えます。

  • キープレフィックスを使用したフィルターの指定 – この例は、キー名プレフィックス (logs/) に基づいてオブジェクトのサブセットに適用される S3 ライフサイクルルールを示しています。たとえば、ライフサイクルルールはオブジェクト logs/mylog.txtlogs/temp1.txtlogs/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>

    オブジェクトキーの詳細については、「オブジェクトキー名の作成」を参照してください。

  • オブジェクトタグに基づくフィルターの指定 – 以下の例では、ライフサイクルルールはタグ (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 を実行します。以下の点に注意してください。

    • 各タグは、キーと値の両方に正確に一致する必要があります。

    • ルールは、ルールで指定されたすべてのタグが付与されたオブジェクトのサブセットに適用されます。オブジェクトに追加のタグが指定されていても、ルールは引き続き適用されます。

    注記

    フィルターで複数のタグを指定する場合、各タグキーは一意である必要があります。

  • プレフィックスと 1 つ以上のタグの両方に基づくフィルターの指定 – ライフサイクルルールでは、キープレフィックスと 1 つ以上のタグの両方に基づいてフィルターを指定できます。繰り返しになりますが、以下の <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) を指定するか、またはオブジェクトのサイズの範囲を指定できます。

    オブジェクトサイズの値はバイト単位です。フィルターの最大サイズは 5 TB です。一部のストレージクラスには、オブジェクトサイズの最小制限があります。詳細については、Amazon S3 ストレージクラスの比較 を参照してください。

    <LifecycleConfiguration> <Rule> <Filter> <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan> </Filter> <Status>Enabled</Status> transition/expiration actions. </Rule> </LifecycleConfiguration>

    オブジェクトサイズの範囲を指定する場合は、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>

ライフサイクルアクションを記述する要素

次の定義済みのアクションのうち 1 つ以上を S3 ライフサイクルルールに指定することで、オブジェクトの有効期間中に特定のアクションを実行するように Amazon S3 に指示することができます。これらのアクションの効果は、バケットのバージョニング状態によって異なります。

  • Transition アクションの要素 – オブジェクトを別のストレージクラスに移行するには、Transition アクションを指定します。オブジェクトの移行の詳細については、「サポートされている移行と関連する制約」を参照してください。オブジェクトの有効期間内の指定の日付または期間に到達すると、Amazon S3 は移行を実行します。

    バージョニング対応のバケット (バージョニングが有効なバゲットまたはバージョニングが停止されたバケット) の場合、Transition アクションは最新のオブジェクトバージョンに適用されます。以前のバージョンを管理する場合、Amazon S3 は NoncurrentVersionTransition アクション (以下で説明されます) を定義します。

  • 失効アクション要素Expiration アクションは、ルールで特定されたオブジェクトを有効期限切れにします。Amazon S3 のいずれかのストレージクラスの該当するオブジェクトに適用されます。ストレージクラスの詳細については、「Amazon S3 ストレージクラスを使用する」を参照してください。Amazon S3 により有効期限切れになったオブジェクトはいずれも使用できなくなります。オブジェクトが完全に削除されるかどうかは、バケットのバージョニング状態によって異なります。

    重要

    オブジェクトの有効期限を決定するライフサイクルポリシーでは、不完全なマルチパートアップロードは削除されません。不完全なマルチパートアップロードを削除するには、AbortIncompleteMultipartUpload というライフサイクル設定アクションを使用する必要があります。このアクションについては、このセクションで説明します。

    • バージョニング非対応のバケットExpiration アクションを実行すると、オブジェクトが Amazon S3 によって完全に削除されます。

    • バージョニング対応バケット – バージョニング対応バケット (つまり、バージョニングが有効であるかバージョニングが停止されている) の場合、Amazon S3 による Expiration アクションの処理方法を決める考慮事項がいくつかあります。詳細については、「S3 バケットでのバージョニングの使用」を参照してください。バージョニングの状態に関係なく、次のようになります。

      • Expiration アクションは、現在のバージョンにのみ適用されます (最新でないオブジェクトバージョンには影響を与えません)。

      • 1 つ以上のオブジェクトバージョンがあり、削除マーカーが最新バージョンである場合、Amazon S3 はアクションを実行しません。

      • 現在のオブジェクトバージョンが唯一のオブジェクトバージョンであり、削除マーカーでもある場合 (「期限切れオブジェクト削除マーカー」とも呼ばれます。すべてのオブジェクトバージョンが削除され、削除マーカーのみ残ります)、Amazon S3 は期限切れのオブジェクト削除マーカーを削除します。また、expiration アクションを使用して、期限切れオブジェクト削除マーカーをすべて削除するよう Amazon S3 に指示することもできます。例については、「例 7: 期限切れオブジェクト削除マーカーを削除する」を参照してください。

      有効期限を管理するために Amazon S3 をセットアップする場合は、次の点も考慮します。

      • バージョニングが有効なバケット

        現在のオブジェクトバージョンが削除マーカーではない場合、Amazon S3 は固有のバージョン ID を持つ削除マーカーを追加します。これにより、現在のバージョンが最新ではなくなり、削除マーカーが現バージョンになります。

      • バージョニングが停止されたバケット

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

さらに、Amazon S3 はバージョン対応のバケット (つまり、バージョニングが有効なバケットとバージョニングが停止されているバケット) で以前のオブジェクトバージョンを管理するために使用できる次のアクションを提供します。

  • NoncurrentVersionTransition アクションエレメント — このアクションを使用して、Amazon S3 オブジェクトを指定したストレージクラスに移行するタイミングを指定します。オブジェクトが最新でないため、この有効期限切れは特定の日数に基づいて行うことができます。日数に加えて、保持する最新でないバージョンの最大数を指定することもできます。最新でないバージョンの最大数を指定できるのは、オブジェクトが最新でない時点からの特定の日数に基づいて有効期限切れを設定している場合のみです。また、最新以外のバージョンを最大数指定できるよう、Filter エレメントを指定する必要があります。Filter エレメントを指定しなかった場合、最新以外のバージョンの最大数を指定すると、Simple Storage Service (Amazon S3) は InvalidRequest エラーを生成します。

    オブジェクトの移行の詳細については、「サポートされている移行と関連する制約」を参照してください。NoncurrentVersionTransition アクション中の日数を指定した日付を Amazon S3 が計算する方法の詳細については、ライフサイクルルール: オブジェクトの存在時間に基づく を参照してください。

  • NoncurrentVersionExpiration アクションエレメント — このアクションを使用して、Amazon S3 が最新でないオブジェクトを永続的に削除するタイミングを指定します。これらの削除されたオブジェクトは復元できません。オブジェクトが最新でないため、この有効期限切れは特定の日数に基づいて行うことができます。日数に加えて、保持する最新でないバージョンの最大数を指定することもできます。最新でないバージョンの最大数を指定できるのは、オブジェクトが最新でない時点からの特定の日数に基づいて有効期限切れを設定している場合のみです。また、最新以外のバージョンを最大数指定できるよう、Filter エレメントを指定する必要があります。Filter エレメントを指定しなかった場合、最新以外のバージョンの最大数を指定すると、Simple Storage Service (Amazon S3) は InvalidRequest エラーを生成します。

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

    NoncurrentVersionExpiration アクションの日数を指定した日付を Amazon S3 が計算する方法の詳細については、ライフサイクルルール: オブジェクトの存在時間に基づく を参照してください。

    重要

    オブジェクトの有効期限を決定するライフサイクルポリシーでは、不完全なマルチパートアップロードは削除されません。不完全なマルチパートアップロードを削除するには、AbortIncompleteMultipartUpload というライフサイクル設定アクションを使用する必要があります。このアクションについては、このセクションで説明します。

この移行アクションと失効アクションに加えて、以下のライフサイクル設定アクションを使用して、完了していないマルチパートアップロードを中止するように Amazon S3 に指示できます。

  • AbortIncompleteMultipartUpload アクション要素 – この要素は、マルチパートアップロードの進行を許可する最大時間 (日数) を指定する場合に使用します。該当するマルチパートアップロード (ライフサイクルルールで指定されているキー名の prefix で判断) が所定の期間内に正常に完了していない場合、Amazon S3 は完了していないマルチパートアップロードを中止します。詳細については、「マルチパートアップロードの中止」を参照してください。

    注記

    オブジェクトタグに基づいてフィルタを指定するルールでは、このライフサイクルアクションを指定できません。

  • ExpiredObjectDeleteMarker アクション要素 – バージョニングが有効なバケットでは、最新でないバージョンが 0 の削除マーカーは、期限切れオブジェクト削除マーカーと呼ばれます。このライフサイクルアクションを使用して、期限切れオブジェクト削除マーカーを削除するよう S3 に指示することもできます。例については、「例 7: 期限切れオブジェクト削除マーカーを削除する」を参照してください。

    注記

    オブジェクトタグに基づいてフィルタを指定するルールでは、このライフサイクルアクションを指定できません。

オブジェクトが最新でなくなってからの期間を Amazon S3 が計算する方法

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

S3 ライフサイクル設定を使用する場合のオブジェクトの以前のバージョンの復元

トピック「以前のバージョンの復元」で詳しく説明しているように、オブジェクトの以前のバージョンを取得するには次のいずれかの方法を使用できます。

  1. オブジェクトの以前のバージョンを同じバケットにコピーする方法。コピーされたオブジェクトはそのオブジェクトの最新バージョンになり、すべてのオブジェクトバージョンが維持されます。

  2. オブジェクトの最新バージョンを完全に削除する方法。最新のオブジェクトバージョンを削除すると、結果として、以前のバージョンがそのオブジェクトの最新バージョンになります。

バージョニングが有効なバケットを含む S3 ライフサイクル設定ルールを使用するときは、最初の方法を使用することをベストプラクティスとしてお勧めします。

S3 ライフサイクルは、結果整合性モデル下で動作します。最新バージョンが完全に削除されても、変更が伝達されるまで最新バージョンが表示される (Amazon S3 に削除が反映されない) 場合があります。一方で、以前のオブジェクトを有効期限切れにするように設定したライフサイクルルールは、復元したいオブジェクトを含む以前のオブジェクトを完全に削除する可能性があります。したがって、最初の方法で推奨したとおり、代替方法として古いバージョンをコピーした方が安全です。

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

ライフサイクルのアクションとバケットのバージョニング状態
アクション バージョニング非対応の (バージョニングが有効でない) バケット バージョニングが有効なバケット バージョニングが停止されたバケット

Transition

指定した日付またはオブジェクトの有効期間内の期間に達した場合.

Amazon S3 は、オブジェクトを指定されたストレージクラスに移行します。 Amazon S3 は、オブジェクトの最新バージョンを、指定されたストレージクラスに移行します。 バージョニングが有効なバケットと同じ動作。

Expiration

指定した日付またはオブジェクトの有効期間内の期間に達した場合.

Expiration はオブジェクトを削除し、削除されたオブジェクトは復元できません。 最新バージョンが削除マーカーでない場合、Amazon S3 は削除マーカーを作成し、それを最新バージョンにします。既存の最新バージョンは以前のバージョンとして保持されます。 ライフサイクルはバージョン ID が null の削除マーカーを作成し、それが最新バージョンになります。オブジェクトの最新バージョンのバージョン ID が nullの場合、Expiration アクションはこのバージョンを完全に削除します。それ以外の場合、最新バージョンは以前のバージョンとして保持されます。

NoncurrentVersionTransition

指定した日数の間、オブジェクトが最新ではないとして分類された場合、または保持する最新でないバージョンの指定した最大数を超えた場合。

NoncurrentVersionTransition は何も実行しません。

Amazon S3 は、オブジェクトの以前のバージョンを、指定されたストレージクラスに移行します。

バージョニングが有効なバケットと同じ動作。

NoncurrentVersionExpiration

指定した日数の間、オブジェクトが最新ではないとして分類された場合、または保持する最新でないバージョンの指定した最大数を超えた場合。

NoncurrentVersionExpiration は何も実行しません。 NoncurrentVersionExpiration アクションは、オブジェクトの以前のバージョンを削除し、削除されたオブジェクトは復元できません。 バージョニングが有効なバケットと同じ動作。

ライフサイクルルール: オブジェクトの存在時間に基づく

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

日数を S3 ライフサイクル設定の Transition アクションおよび Expiration アクションで指定する場合は、以下の点に注意してください。

  • アクションが実行される、オブジェクト作成からの日数です。

  • Amazon S3 は、ルールに指定された日数をオブジェクトの作成時間に加算し、得られた日時を翌日の午前 00:00 UTC (協定世界時) に丸めることで、時間を算出します。たとえば、あるオブジェクトが 2014 年 1 月 15 日午前 10 時 30 分 (UTC) に作成され、移行ルールに 3 日と指定した場合、オブジェクトの移行日は 2014 年 1 月 19 日 0 時 0 分 (UTC) となります。

注記

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

日数をライフサイクル設定の NoncurrentVersionTransition アクションおよび NoncurrentVersionExpiration アクションで指定する場合は、以下の点に注意してください。

  • これは、オブジェクトのバージョンが最新でなくなり (つまり、オブジェクトが上書きあるいは削除されたとき)、指定されたオブジェクトに対して Amazon S3 がアクションの実行を開始するまでの日数です。

  • Amazon S3 は、ルールに指定された日数をオブジェクトの次の新しいバージョンが作成された時間に加算し、得られた日時を翌日の午前 00:00 (UTC) に丸めることで、時間を算出します。たとえば、バケット内に 2014 年 1 月 1 日の午前 10 時半 (UTC) に作成されたオブジェクトの現行バージョンがあるとします。現行バージョンを置き換えるオブジェクトの新しいバージョンが 2014 年 1 月 15 日の午前 10 時半 (UTC) に作成され、3 日間の移行ルールを指定すると、オブジェクトの移行日は 2014 年 1 月 19 日の午前 0 時 (UTC) となります。

ライフサイクルルール: 特定の日付に基づく

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

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

重要

日付ベースのアクションは、1 回限りのアクションではありません。Amazon S3 は、日付が過ぎた後も、ルールのステータスが Enabled である限り、継続して日付ベースのアクションを適用します。

たとえば、すべてのオブジェクトを削除する日付ベースの Expiration アクションを指定してすべてのオブジェクトを削除するとします (ルールでフィルタは指定されないとします)。Amazon S3 は特定の日付に、バケットのすべてのオブジェクトを期限切れにします。S3 は、バケットで作成される新しいオブジェクトも継続して期限切れにします。ライフサイクルアクションを停止するには、ライフサイクル設定からアクションを削除する、ルールを無効にする、またはライフサイクル設定からルールを削除する必要があります。

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

注記

Amazon S3 コンソールでは日付ベースのライフサイクルルールを作成することはできませんが、そのようなルールの表示、無効化、削除は可能です。