オブジェクトのライフサイクル管理

サンプルに移動

Cloud Storage では、オブジェクトの有効期間(TTL)の設定、非現行バージョンの保持、コスト管理を容易にするためのストレージ クラスの「ダウングレード」など、一般的なユースケースをサポートするため、オブジェクトのライフサイクル管理機能を提供しています。

このページでは、この機能についてのほか、使用可能なオプションについても説明します。ライフサイクル構成ファイルの一般的な形式については、JSON のバケット リソース表現XML のライフサイクル構成形式をご覧ください。

はじめに

バケットにライフサイクル管理の構成を割り当てることができます。この構成には、バケット内に現在あるオブジェクトと今後追加されるオブジェクトに適用される一連のルールを含みます。オブジェクトがいずれかのルールの基準に一致すると、Cloud Storage はオブジェクトに対して指定された操作を自動的に行います次のようなユースケースが例として挙げられます。

  • 365 日以上経過したオブジェクトのストレージ クラスを Coldline Storage にダウングレードする。
  • 2013 年 1 月 1 日より前に作成されたオブジェクトを削除する。
  • バージョニングが有効になっているバケット内の各オブジェクトで、最新のバージョン 3 つのみを維持する。

ライフサイクルの構成

ライフサイクル管理の構成は一連のルールから構成されます。ルールを定義する場合、任意の操作に任意の条件を指定できます。1 つのルールに複数の条件を指定した場合、オブジェクトがすべての条件に一致しないと、操作は実行されません。同じ操作を含む複数のルールを指定した場合、オブジェクトがルールのいずれかの条件に一致すると、操作が実行されます。1 つのルールには 1 つの操作のみを設定します。

複数のルールが 1 つのオブジェクトに対して同時にそれらの条件を満たしている場合、Cloud Storage は次の考慮事項に基づいて、1 つのルールのみに関連付けられた操作を実行します。

  • Delete 操作は、どの SetStorageClass 操作よりも優先されます。
  • 保存時のストレージ料金が最も安いストレージ クラスにオブジェクトを切り替える SetStorageClass 操作が優先されます。

なんらかの操作が行われると、オブジェクトが再評価されてから、追加の操作が実行されます。

たとえば、オブジェクトを削除するルールとオブジェクトのストレージ クラスを変更するルールがあり、両方のルールに同一の条件が設定されていると、条件に一致したときに削除操作が常に実行されます。オブジェクト クラスを Nearline Storage に変更するルールと Coldline Storage に変更するルールがあり、両方のルールに同一の条件が設定されていると、条件に一致したときには、常に Coldline Storage へ変更されます。

ライフサイクル構成の使用例については、オブジェクトのライフサイクルの管理をご覧ください。

ライフサイクルの操作

ライフサイクル ルールでは、Delete アクションまたは SetStorageClass アクションのいずれかが指定されます。

Delete

Delete アクションを指定すると、オブジェクトがライフサイクル ルールで指定されたすべての条件を満たしている場合に、オブジェクトが削除されます。

例外: オブジェクトのバージョニングが有効になっているバケットでは、オブジェクトのライブ バージョンを削除すると非現行バージョンになりますが、非現行バージョンを削除すると、そのバージョンは完全に削除されます。オブジェクトのバージョニングとともに Delete アクションを使用する例については、オブジェクト削除の構成をご覧ください。

SetStorageClass

SetStorageClass アクションを指定すると、オブジェクトがライフサイクル ルールで指定されたすべての条件を満たしている場合、オブジェクトのストレージ クラスが変更されます。

SetStorageClass は、次のストレージ クラスの移行をサポートしています。

元のストレージ クラス 新しいストレージ クラス
Durable Reduced Availability(DRA)Storage Nearline Storage
Coldline Storage
Archive Storage
Multi-Regional Storage/Regional Storage1
Standard Storage、Multi-Regional Storage、Regional Storage Nearline Storage
Coldline Storage
Archive Storage
Nearline Storage Coldline Storage
Archive Storage
Coldline Storage Archive Storage

1 region 内のバケットの場合、新しいストレージ クラスを Multi-Regional Storage にすることはできません。マルチリージョンまたはデュアルリージョンのバケットの場合、新しいストレージ クラスを Regional Storage にすることはできません。

Cloud Storage では、ストレージ クラスの移行の正確性は検証されません。つまり、上記の表にないストレージ クラスの移行を指定することはできますが、移行は行われません。ライフサイクル ルールで、上記の表に掲載されているストレージ クラスの移行のいずれかが使用されていることを確認する必要があります。

ライフサイクルの条件

ライフサイクル ルールには、ルールで定義されたアクションがオブジェクトに適用される前に、オブジェクトが満たす必要がある条件が含まれています。ライフサイクル ルールでは、次の条件がサポートされています。

すべての条件は任意ですが、少なくとも 1 つの条件が必要です。存在しない操作や条件を指定するなど、無効なライフサイクル構成を行うと、400 Bad request エラーが返され、既存のライフサイクル構成はそのまま残ります。

Age

Age 条件は、オブジェクトの作成後に指定した日数を経過すると満たされます。Age は、オブジェクトが作成された時点から測定されます。たとえば、オブジェクトの作成時点が 2019/01/10 10:00 UTC で、Age 条件が 10 日であれば、2019/01/20 10:00 UTC の時点でオブジェクトの条件が満たされたことになります。これは、オブジェクトの作成後にバージョニングでオブジェクトが非現行バージョンになる場合にも当てはまります。

CreatedBefore

CreatedBefore 条件は、オブジェクトが UTC の指定された日付の午前 0 時より前に作成されていると満たされます。

CustomTimeBefore

CustomTimeBefore 条件は、オブジェクトの Custom-Time メタデータの日付がこの条件で指定された日付より早い場合に満たされます。この条件は、日付形式 YYYY-MM-DD を使用して設定されます。オブジェクトに Custom-Time メタデータが設定されないと、CustomTimeBefore が満たされることはありません。

DaysSinceCustomTime

DaysSinceCustomTime 条件は、オブジェクトの Custom-Time メタデータ フィールドに指定された日時から特定の日数が経過すると満たされます。たとえば、オブジェクトの Custom-Time2020-05-16T10:00:00ZDaysSinceCustomTime 条件が 10 日であれば、2020/05/26 10:00 UTC の時点でオブジェクトの条件が満たされたことになります。

オブジェクトに Custom-Time メタデータが設定されないと、DaysSinceCustomTime が満たされることはありません。

DaysSinceNoncurrentTime

DaysSinceNoncurrentTime 条件は通常、オブジェクトのバージョニングとともに使用されます。この条件は、ライブ バージョンが削除または置換されたために、オブジェクトが最新でなくたった時点から特定の日数が経過すると満たされます。たとえば、オブジェクトが 2020/07/08 15:00 UTC の時点で最新ではなくなり、DaysSinceNoncurrentTime 条件が 10 日であれば、2020/07/18 15:00 UTC の時点でオブジェクトの条件が満たされたことになります。

IsLive

IsLive 条件は通常、オブジェクトのバージョニングとともに使用されます。false に設定すると、この条件は、オブジェクトが非現行バージョンである場合に満たされるようになります。true に設定すると、この条件は、オブジェクトがライブ バージョンである場合に満たされるようになります。バージョニングを使用しない場合、IsLivetrue のときは、すべてのオブジェクトがライブ バージョンとみなされます。

MatchesStorageClass

MatchesStorageClass 条件は、バケット内のオブジェクトが、指定されたストレージ クラスとして保存されると満たされます。MatchesStorageClass には、STANDARDNEARLINECOLDLINEARCHIVEMULTI_REGIONALREGIONALDURABLE_REDUCED_AVAILABILITY の値を使用できます。

通常、Standard Storage オブジェクトで MatchesStorageClass 条件を使用する場合は、次のものも含める必要があります。

  • バケットがリージョンにある場合、条件に REGIONALDURABLE_REDUCED_AVAILABILITY を含めます。

  • バケットがマルチリージョンまたはデュアルリージョンにある場合は、条件に MULTI_REGIONALDURABLE_REDUCED_AVAILABILITY を含めます。

これらの追加クラスを追加すると、バケット内のレガシー ストレージ クラスに設定されている古いオブジェクトもライフサイクル ルールの対象となります。

NoncurrentTimeBefore

NoncurrentTimeBefore 条件は通常、オブジェクトのバージョニングとともに使用されます。オブジェクトが指定された日付よりも前の日付に最新ではなくなった場合にこの条件が成立します。条件は日付形式 YYYY-MM-DD を使用して設定されます。ライブ オブジェクトでは NoncurrentTimeBefore が満たされることはありません。

NumberOfNewerVersions

NumberOfNewerVersions 条件は通常、オブジェクトのバージョニングとともに使用されます。この条件の値が N に設定されている場合、オブジェクトのバージョンは、それよりも新しいバージョンが少なくとも N バージョン(ライブ バージョンを含む)存在する場合に条件を満たします。ライブ オブジェクト バージョンの場合、それよりも新しいバージョンの数は 0 とみなされます。最も新しい非現行バージョンの場合、それよりも新しいバージョンの数は 1 であり(ライブ オブジェクト バージョンがない場合は 0)、以降、同様に続きます。

オブジェクトのライフサイクル動作

  • Cloud Storage は、オブジェクトのライフサイクル管理が構成されたバケット内のすべてのオブジェクトを定期的に検査し、バケットのルールに従って適用されるすべての操作を行います。Cloud Storage は非同期で操作を行います。このため、条件が一致してから操作が行われるまでに時間差が生じる場合があります。

    たとえば、オブジェクトが削除の条件を満たしても、オブジェクトが直ちに削除されないことがあります。そのため、オブジェクトにライフサイクル アクションが実行されるまで、オブジェクトは表示されます。オブジェクトが存在している間、該当する料金が適用されます。例外はありません。オブジェクトが Delete アクションの対象である場合、Age 条件だけが含まれるルールによって、保存時のストレージ コストがかからなくなります。

  • ライフサイクル構成に対する更新が反映されるまでに、最大で 24 時間かかります。したがって、ライフサイクル管理の構成を変更してから 24 時間が経過するまでは、古い構成で操作が実行される可能性があります。

    たとえば、Age 条件を 10 日から 20 日に変更した場合、最大 24 時間、古い構成に基づいて、11 日目のオブジェクトがオブジェクトのライフサイクル管理に基づいて削除される可能性があります。

  • オブジェクトにオブジェクト保留が設定されている場合、あるいは保持ポリシーがまだ処理されていない場合、オブジェクト ライフサイクルの Delete アクションはオブジェクトに適用されません。オブジェクト保留が設定されている場合、または保持ポリシーの制限がある場合、オブジェクトに対する制限が解除された後に Delete アクションが実行されます。

  • オブジェクト ライフサイクルの SetStorageClass アクションは、オブジェクト保留や保持ポリシーの影響を受けません。

SetStorageClass のコスト面でのメリット

オブジェクトのストレージ クラスを手動で変更する場合と異なり、オブジェクトのライフサイクル管理では、オブジェクトのストレージ クラスが変更されても、オブジェクトのリライトを行いません。これで、オブジェクトのライフサイクル管理に一定の料金上のメリットがもたらされます。

  • オブジェクトが最初に Nearline Storage または Coldline Storage に設定されていても、ストレージ クラスの変更に関連する取得料金や早期削除料金は発生しません。

  • 元のストレージ クラスで設定されたオブジェクトの時間は、新しいストレージ クラスに適用される最小保存期間に対してカウントされます。

たとえば、オブジェクトを Nearline Storage としてアップロードし、20 日後にライフサイクルの構成でオブジェクトのストレージ クラスを Coldline Storage に変更したとします。この変更で取得料金や早期削除料金は発生しません。ストレージ クラスの変更から 60 日後にオブジェクトを削除した場合、Coldline Storage の最低保存期間は 90 日で、オブジェクトの作成から合計 80 日経過しているため、10 日分の早期削除料金が発生します。

また、オブジェクトを Nearline Storage としてアップロードし、20 日後にリライト操作でストレージ クラスを変更したとします(Coldline Storage に戻したとします)。この変更で、取得料金と 10 日間の早期削除料金のどちらも発生します。リライトから 60 日後にオブジェクトを削除すると、30 日の早期削除料金が発生します。

有効期限のメタデータ

Delete 処理が Age 条件でバケットに指定されている場合(および matchesStorageClass 以外の条件なし)、一部のオブジェクトに有効期限メタデータがタグ付けされることがあります。オブジェクトの有効期限は、オブジェクトがオブジェクトのライフサイクル管理による削除の対象となる(または対象となった)日時を示します。バケットのライフサイクル構成または保持ポリシーが変更されると、有効期限が変更される可能性があります。

有効期限のメタデータが存在しない場合、必ずしもオブジェクトが削除されないことを意味するわけではなく、削除の有無や削除の時期について判断する十分な情報がないことを意味します。 たとえば、オブジェクトの作成時点が 2020/01/10 10:00 UTC で、Age 条件が 10 日であれば、オブジェクトの有効期限は 2020/01/20 10:00 UTC になります。ただし、次の場合はオブジェクトに有効期限は使用できません。

  • Delete ルールにその他の条件が指定されている(matchesStorageClass を除く)。

  • オブジェクトのストレージ クラスを含まない matchesStorageClass 条件を使用している。

  • Cloud Storage は保留の解除を確認できないため、オブジェクトは保留状態になります。

オブジェクトがすぐに削除されない場合であっても、有効期限後にストレージの料金が発生することはありません。削除される前のオブジェクトにはひき続きアクセスでき、ストレージ以外の料金(リクエスト、ネットワーク帯域幅)が発生します。オブジェクトの有効期限が利用できない場合、オブジェクトが削除されるまでストレージの料金が発生します。

有効期限を設定する際は、次の点に注意してください。

  • バケットに保持ポリシーが設定されている場合、オブジェクト ライフサイクル管理の Age 条件を満たし、オブジェクトが保存ポリシーで指定された保持期間を満了する時間が有効期限になります。

  • 異なるライフサイクル管理ルールにより、オブジェクトに適用される有効期限が複数存在し、それらが矛盾する場合は、最も早い有効期限が使用されます。

ライフサイクルの処理を追跡するためのオプション

Cloud Storage が行うライフサイクル管理の処理を追跡するには、次のオプションのいずれかを使用します。

  • Cloud Storage の使用状況ログを使用します。この機能は、処理と処理を行ったユーザーの両方をログに記録します。ログエントリの cs_user_agent フィールドの値が GCS Lifecycle Management の場合、ライフサイクルの構成に応じて、Cloud Storage が処理を実行しています。

  • バケット用の Cloud Storage の Pub/Sub 通知を有効にします。この機能は、指定された操作が行われたときに、選択した Pub/Sub トピックに通知を送信します。この機能では、処理を行ったユーザーは記録されないので注意してください。

次のステップ