すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ライフサイクル

最終更新日:Apr 01, 2026

OSS に保存されたデータのアクセス頻度は、通常、時間の経過とともに低下します。高コストの標準ストレージクラスでコールドデータを保存することは、経済的ではありません。また、大量のログファイルやバックアップを手動でクリーンアップすることも非効率です。ライフサイクル管理では、自動化されたルールを作成できます。これらのルールにより、指定された期間(例:30 日)が経過した後、オブジェクトを低コストのストレージクラス(例:低頻度アクセス、アーカイブ)へ自動的にトランジションさせることができます。また、オブジェクトの削除も可能です。これにより、データのライフサイクル全体を知的かつ低コストで管理できます。

仕組み

ライフサイクル管理では、ユーザーが定義したルールを使用して、バケット内のオブジェクトに対して自動操作を実行します。OSS では、ライフサイクルルールを作成後、最大 24 時間以内にそのルールを読み込みます。ルールが読み込まれると、OSS は毎日固定時刻(通常は翌日の 00:00 (UTC) 以降、すなわち UTC + 08:00 の 08:00)に、該当するルールをスキャンし、実行します。

ライフサイクルルールは、以下の 3 つの主要な構成要素からなります:

  1. 対象オブジェクト: ルールを適用するオブジェクトを定義します。対象オブジェクトは、オブジェクトプレフィックス (Prefix)オブジェクトタグ (Tag)、または オブジェクトサイズ (ObjectSize) を基準にフィルター処理できます。

    ライフサイクルルールでは、ワイルドカード、サフィックスマッチング、正規表現はサポートされていません。
  2. 実行アクション: フィルター処理されたオブジェクトに対して実行する操作を定義します。主なアクションは以下のとおりです:

    • ストレージクラスのトランジション (Transition): オブジェクトを低コストのストレージクラス(例:低頻度アクセス、アーカイブ、コールドアーカイブストレージ)へトランジションさせます。

    • 有効期限切れおよび削除 (Expiration): 指定されたライフサイクル期間が経過した後にオブジェクトを削除します。

    • マルチパートアップロードのフラグメントクリーンアップ (AbortMultipartUpload): 指定された時間経過後に、未完了のマルチパートアップロードからパーツを自動的に削除します。

  3. トリガーポリシー: フィルター処理されたオブジェクトに対してアクションを実行する条件を定義します:

    • 最終更新日時 (Last-Modified-Time): オブジェクトの最終更新日時を基準に、トランジションまたは削除を実行します。これは、ログやバックアップなど、明確なライフサイクルを持つデータに適しています。ストレージクラスの自動トランジションやオブジェクトの自動削除により、コストを削減できます。

    • 最終アクセス日時 (Last-Access-Time): アクセス追跡 機能を有効化した後、オブジェクトの最終アクセス日時を基準に、ストレージクラスを知的に切り替えることができます。これは、素材ライブラリなど、アクセスパターンが予測できないシナリオに有用です。データがコールド化するとストレージクラスがダウングレードされ、アクセス時に自動的に復元されます。

ライフサイクルポリシーの設定方法について詳しくは、「ライフサイクル設定要素」をご参照ください。

バケットで ObjectWorm が有効になっている場合、ライフサイクルルールにおけるストレージクラスのトランジション (Transition) 操作には影響しませんが、保持期間中のオブジェクトはライフサイクルルールによる自動削除 (Expiration) の対象になりません。

適用範囲/利用シーン

期限切れのログファイルを自動的にクリーンアップ

サーバーは毎日多数のログを生成し、指定ディレクトリにアップロードします。最終更新日時を基準としたライフサイクルルールを設定することで、指定日数経過後にバケット内のすべてのオブジェクトを削除できます。これにより、ストレージ容量が解放され、ストレージコストが削減されます。

ホットデータおよびコールドデータ向けの自動ストレージ階層化

ウェブサイトの画像、オンライン動画、文書など、アクセス頻度が不確かなデータに対しては、アクセス追跡機能を有効化できます。その後、最終アクセス日時を基準としたライフサイクルルールを用いて、インテリジェントなデータ階層化を実装できます。システムは、実際のアクセスパターンに基づき、コールドデータを低頻度アクセス、アーカイブ、またはコールドアーカイブストレージへ自動的にトランジションさせます。これにより、インテリジェントな階層化とコスト最適化が実現されます。

以前のバージョンを自動的にクリーンアップ

バージョン管理を有効化すると、データに対する上書きおよび削除操作は以前のバージョンとして保存されます。バケットに多数の以前のバージョンや期限切れの削除マーカーが蓄積された場合、最終更新日時を基準としたライフサイクルルールとバージョン管理を併用して、ストレージコストを削減できます。オブジェクトは指定時間経過後に自動的に削除されるため、ストレージコストの削減およびオブジェクト一覧表示のパフォーマンス向上が図れます。

マルチパートアップロードのフラグメントを自動的にクリーンアップ

大規模ファイルのマルチパートアップロードが中断された場合、システムは未結合のパーツを保持し続け、それらに対して課金が継続されます。ライフサイクルルールを設定することで、指定時間経過後に未完了のパーツを自動的にクリーンアップし、不要なリソース使用を回避できます。

上記のシナリオに加えて、さらに詳細なデータ管理ポリシーを実装できます。詳しくは、「ライフサイクル設定の例」をご参照ください。必要に応じて、複数のルールを組み合わせることで、バケット内のデータを細かく制御できます。

複数のライフサイクルルール

複数のライフサイクルルールが期待通りに有効になるようにするには、以下の 2 つのコアメカニズムを理解しておく必要があります:ルール実行優先度 および 構成上書きメカニズム

ルール実行優先度

同一バケットに対して複数のライフサイクルルールを設定できます。各ルールは独立しているため、同一オブジェクトが複数のルールに一致する可能性があります。最終的なアクションは、すべての該当ルールの結果に基づいて決定されます。

同一オブジェクトに複数のルールが同時に一致した場合、以下の優先順位で実行されます:オブジェクトの削除 > ディープコールドアーカイブストレージへのトランジション > コールドアーカイブストレージへのトランジション > アーカイブストレージへのトランジション > 低頻度アクセスへのトランジション > 標準ストレージへのトランジション。

重要

削除アクションは、常にストレージクラスのトランジションよりも高い優先度を持ちます。削除ルールの有効期間は、トランジションルールの有効期間より長く設定してください。これにより、トランジションが完了する前にオブジェクトが削除されるのを防げます。

実行例

以下のような 2 つのライフサイクルルールを指定し、両方とも同一オブジェクトに一致すると仮定します。

  • ルール 1:最終更新日時から 365 日以上経過したオブジェクトを低頻度アクセスストレージクラスへトランジションさせる。

  • ルール 2:最終更新日時から 365 日以上経過したオブジェクトを削除する。

結果:該当オブジェクトは、最終更新日時から 365 日以上経過後に削除されます。

構成上書きメカニズム

コンソールを使用する場合は、構成の上書きを心配する必要はありません。ルールを追加または変更するたびに、コンソールは現在の構成を自動的に読み取り、変更内容をマージして結果を送信します。これにより、既存のルールが誤って失われるのを防ぎます。ただし、ossutil、SDK、または API を直接呼び出してライフサイクルルールを設定する場合は注意が必要です。各 PutBucketLifecycle 呼び出しは、バケットの既存のすべてのライフサイクル構成を完全に上書きします。既存のルールを含めずに新しいルールのみを送信すると、既存のルールは削除され、無効になります。

既存のルールに新しいルールを追加する場合、以下の手順を実行します:

  1. 取得:現在有効なすべてのライフサイクルルール(例:ルール 1)を取得します。

  2. 追加:新しいルール(例:ルール 2)を追加します。

  3. 再送信:すべてのルール(ルール 1 + ルール 2)を含む完全な構成を再送信します。

注:既存のルール(ルール 1)を含めずに新しいルール(ルール 2)のみの構成を送信すると、ルール 1 は削除され、無効になります。

本番環境に適用

本番環境でライフサイクル管理を安全かつ効率的に活用するには、以下の点を推奨します:

  • 導入前にテスト: 最初にテスト用バケットでルールを作成し、本番バケットに適用する前に、その動作が期待通りであることを確認します。

  • 削除ルールは慎重に使用: 有効期限切れおよび削除を設定するルールでは、プレフィックスを正確に設定してください。これにより、ルールの適用範囲が広がり、重要なデータが誤って削除されるのを防げます。

  • 保護措置としてバージョン管理を有効化: 重要な業務データについては、バケットに対してバージョン管理機能を有効化してください。これにより、ライフサイクルルールによって現在のバージョンのオブジェクトが誤って削除された場合でも、以前のバージョンからデータを復元できます。

  • 追加料金を回避するための階層化トランジション: ストレージクラスのトランジションポリシーを設計する際は、後段のステップのトリガー時間が、前段のステップのトリガー時間とそのストレージクラスの最低保存期間の合計より後になるよう設定してください。これにより、早期トランジションによる追加料金を回避できます。

    • 誤った例: 標準 30 日 → 低頻度アクセス 40 日 → アーカイブストレージ。この設定では、オブジェクトが IA ストレージクラスに 10 日間(< 30 日)しか保存されないため、追加料金が発生します。

    • 正しい例: 標準 30 日 → 低頻度アクセス 90 日 → アーカイブストレージ。(オブジェクトは 30 日後に IA ストレージクラスへトランジションされ、その後 60 日間 IA ストレージクラスに残り、合計 90 日後にアーカイブストレージへトランジションされます)。

課金

ライフサイクルルールの設定自体は無料です。ルールが実行され、その結果としてストレージ状態が変更された際にのみ課金されます。

  1. リクエスト料金: ライフサイクルルールがストレージクラスのトランジション、オブジェクトの削除、またはパーツの削除を実行すると、システムは Put 型リクエストを開始します。リクエスト料金は、リクエスト数に応じて課金されます。課金ルールの詳細については、「ライフサイクル料金の説明」をご参照ください。

    多数の小規模ファイルを含むバケットでは、この料金が高額になる可能性があります。ルールを設定する前に、事前に評価してください。
  2. ストレージ料金: オブジェクトが新しいストレージクラスへトランジションされた後は、その新しいクラスの単位価格で課金されます。

    重要

    低頻度アクセス、アーカイブ、コールドアーカイブストレージなどのストレージクラスには、最低保存期間 の要件があります(例:低頻度アクセスは 30 日、アーカイブは 60 日)。ライフサイクルルールにより、最低保存期間を満たさないままオブジェクトが削除またはトランジションされた場合、残りの保存期間分の料金を支払う必要があります。トランジションまたは削除による、指定期間未満の保存に対する条件付き容量料金 を回避するには、「指定期間未満の保存に対する容量料金を回避する方法」をご参照ください。トランジションまたは削除を実行する前に、最低保存期間が満たされていることを確認してください。

  3. データ取得料金: ライフサイクルルール自体はデータ取得料金を発生させません。ただし、低頻度アクセスまたはアーカイブなどのストレージクラスへトランジションされたオブジェクトにアクセスした場合、対応するデータ取得料金が発生します。

    • 低頻度アクセス (IA) オブジェクトを直接読み取ると、データ取得料金が発生します。

    • アーカイブオブジェクトを直接読み取ると、リアルタイムアクセス用のデータ取得容量料金が発生します。

    • アーカイブオブジェクトを復元すると、Put 型リクエスト料金およびデータ取得容量料金が発生します。

    • コールドアーカイブまたはディープコールドアーカイブオブジェクトを復元すると、取得リクエスト料金、取得容量料金、および一時復元容量料金が発生します。

    重要

    コールドアーカイブおよびディープコールドアーカイブオブジェクトの場合、選択した復元優先度に応じて料金が異なります。優先度が高いほど、料金も高くなります。

よくある質問

最終更新日時を基準とするライフサイクルルールと最終アクセス日時を基準とするライフサイクルルールの違いは何ですか?

最終更新日時を基準とするポリシーと最終アクセス日時を基準とするポリシーの違いは以下のとおりです:

ポリシー

最終更新日時を基準

最終アクセス日時を基準

シナリオ

アクセスパターンが固定または予測可能なデータシナリオに適しています。

アクセスパターンが不定または予測不可能なデータシナリオに適しています。

オブジェクトの削除をサポート

サポートされています。

番号

削除後のオブジェクト復元

  • バージョン管理が無効の場合、削除されたオブジェクトは復元できません。

  • バージョン管理 が有効の場合、ライフサイクルルールによって現在のバージョンのオブジェクトが削除されると、それは以前のバージョンとなり、復元可能です。ただし、ライフサイクルルールによって以前のバージョンのオブジェクトが削除された場合は、復元できません。

最終アクセス日時を基準とするポリシーでは、削除後のオブジェクト復元は関係ありません。

ストレージクラストランジションの可逆性

不可逆です。たとえば、オブジェクトが標準ストレージクラスから低頻度アクセスストレージクラスへトランジションされた後は、自動的に標準ストレージクラスへ戻すことはできません。詳細については、「ストレージクラスのトランジション」をご参照ください。

オブジェクトが低頻度アクセス、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスへトランジションされた場合、最低課金サイズ、最低保存期間、データ取得料金などの問題が発生します。詳細については、「ストレージクラスのトランジション」をご参照ください。

可逆です。オブジェクトが標準ストレージクラスから低頻度アクセスストレージクラスへ自動的にトランジションされた場合、アクセス時に標準ストレージクラスへ戻すことも選択できます。

重要

オブジェクトが「アクセスされた」とみなされるのは、GetObject API 呼び出しを通じてアクセスされた場合のみです。その他の API 呼び出しは含まれません。

このシナリオでも、最低課金サイズ、最低保存期間、データ取得料金などの問題が発生します。詳細については、「最終アクセス日時を基準とするライフサイクルルール」をご参照ください。

ライフサイクルルールが動作しないのはなぜですか?

以下の項目を確認してください:

  1. 有効時間: ルールは作成後 24 時間以上経過していますか? 新しいルールは読み込みに時間がかかります。

  2. プレフィックスマッチング: ルール内のプレフィックスは正しく設定されていますか? たとえば、フォルダの場合は logs/ ではなく logs と設定しないでください。

  3. 時間条件: オブジェクトの最終更新日時または最終アクセス日時は、指定された日数を実際に満たしていますか?

  4. 前提機能: 最終アクセス日時を基準とするルールを使用している場合、バケットに対してアクセス追跡機能は有効化されていますか?

バージョン管理を有効化した後にオブジェクトを削除しましたが、ストレージ使用量が減少しません。なぜですか?

バージョン管理が有効化されているため、削除操作は削除マーカーを作成するだけです。元のオブジェクトは以前のバージョンとなり、引き続きストレージ容量を占有します。以前のバージョンをクリーンアップするための追加ライフサイクルルールを作成する必要があります。

ライフサイクルルールを削除しても、トランジション済みのオブジェクトは元に戻りますか?

いいえ、元に戻りません。 ルールを削除しても、すでに実行済みのアクションの結果には影響しません。トランジション済みのオブジェクトを元のストレージクラスへ戻すには、手動で復元する必要があります。

バージョン管理を有効化した後、削除されたオブジェクトが依然として容量を占有するのはなぜですか?

バージョン管理を有効化すると、削除操作は削除マーカーを作成します。元のオブジェクトは以前のバージョンとなり、引き続き容量を占有します。以前のバージョンを削除するためのルールを設定する必要があります。

Set bucket lifecycle error, InvalidArgument, Days in the Transition action for StorageClass Archive must be more than the Transition action for StorageClass IA」というエラーが表示された場合、どうすればよいですか?

このエラーは、異なるストレージクラスのトランジション時間が要件を満たしていないために発生します。バケットで設定されたトランジション期間は、以下の条件を満たす必要があります:低頻度アクセス < アーカイブ < コールドアーカイブ < ディープコールドアーカイブストレージ。

OSS のライフサイクル機能は、ファイル拡張子によるマッチングでデータ階層化または削除操作を実行できますか?

ライフサイクルルールは、バケット内の既存のオブジェクトにも適用されますか?

はい。ライフサイクルルールは、ルール設定前に保存されたオブジェクトおよび設定後にアップロードされたオブジェクトを含む、すべてのオブジェクトに適用されます。たとえば、10 月 7 日に 30 日後の削除を設定したルールがある場合、10 月 5 日にアップロードされたオブジェクトは 11 月 6 日に削除され、10 月 8 日にアップロードされたオブジェクトは 11 月 9 日に削除されます。

1 つまたは複数のライフサイクルルールの構成を変更するにはどうすればよいですか?

バケットにルール 1 およびルール 2 の 2 つのライフサイクルルールが設定されており、ルール 1 の構成項目を変更したいと仮定します。以下の操作を行います。

  1. GetBucketLifecycle API を呼び出して、バケットに現在設定されているすべてのライフサイクルルール(ルール 1 およびルール 2)を取得します。

  2. ルール 1 のライフサイクルルールの構成項目を変更します。

  3. PutBucketLifecycle API を呼び出して、ルール 1 + ルール 2 のライフサイクルルールを更新します。

ライフサイクルルールによるストレージクラスのトランジションおよび有効期限切れによる削除のログレコードはありますか?

はい。ライフサイクルルールによるすべての成功したストレージクラスのトランジションおよび有効期限切れによる削除はログに記録されます。ログフィールドは以下のとおりです:

  • 操作

    • CommitTransition:ストレージクラスをトランジションします。

    • ExpireObject:有効期限が切れたオブジェクトを削除します。

  • 同期リクエスト

    lifecycle:トリガーされたトランジションおよび削除操作。

OSS のログフィールドの詳細については、「ログフィールドの詳細」をご参照ください。ログ照会の課金については、「課金」をご参照ください。

1 つのライフサイクルルールで、オブジェクトの削除マーカーと現在のバージョンのオブジェクトを同時にクリーンアップできますか?

いいえ、できません。削除マーカーをクリーンアップするためのルールと、現在のバージョンのオブジェクトを削除するためのルールをそれぞれ別に作成する必要があります。

ライフサイクルルールを用いて、バケット内のすべてのファイルを迅速にクリーンアップする方法

バージョン管理が無効なバケット

バージョン管理が無効なバケットでは、すべてのファイルおよび未完了のマルチパートアップロードのパーツを自動的かつ迅速にクリーンアップするために、1 つのライフサイクルルールを設定するだけで十分です。

  1. OSS コンソールにログインし、バケット一覧 ページに移動して、対象のバケットを見つけます。

  2. 左側のナビゲーションウィンドウで、データセキュリティ > バージョン管理 を選択し、バケットのバージョン管理が無効であることを確認します。

    未开启版本控制

  3. 左側のナビゲーションウィンドウで、データ管理 > ライフサイクル を選択します。バケット内のすべてのファイルを最終更新日時から1 日後に自動的に削除するライフサイクルルールを設定します。また、作成から1 日以上経過した未完了のマルチパートアップロードのパーツを自動的にクリーンアップします。

    screenshot_2025-07-01_17-59-32

バージョン管理が有効なバケット

バケットでバージョン管理が有効になると、現在のバージョンのオブジェクト、以前のバージョンのオブジェクト、未完了のマルチパートアップロードのパーツ、および削除マーカーが生成されます。これらすべてを自動的かつ迅速にクリーンアップするには、1 つのライフサイクルルールを設定するだけで十分です。

  1. OSS コンソールにログインし、バケット一覧 ページに移動して、対象のバケットを見つけます。

  2. 左側のナビゲーションウィンドウで、データセキュリティ > バージョン管理 を選択し、バケットのバージョン管理が有効であることを確認します。

    screenshot_2025-07-02_10-58-23

  3. 左側のナビゲーションウィンドウで、データ管理 > ライフサイクル を選択します。バケット内のすべての現在および以前のバージョンのオブジェクトを最終更新日時から1 日後に自動的に削除するライフサイクルルールを設定します。また、作成から1 日以上経過した未完了のマルチパートアップロードのパーツを自動的にクリーンアップします。このルールは削除マーカーのクリーンアップも行います。

    screenshot_2025-07-02_10-58-23

同じプレフィックスを持つオブジェクトに対して、最終更新日時を基準とするライフサイクルルールと最終アクセス日時を基準とするライフサイクルルールの 2 つを作成した場合、どちらのルールが適用されますか?

たとえば、対象バケット examplebucket に対して 2 つのライフサイクルルールを作成したとします。ルール 1 では、プレフィックス doc を持つすべてのオブジェクトを最終更新日時から 30 日後に削除するよう指定しています。ルール 2 では、プレフィックス doc を持つすべてのオブジェクトを最終アクセス日時から 30 日後に低頻度アクセスストレージクラスへトランジションさせるよう指定しています。

OSS は、ユーザーのコストを最小限に抑えるという原則に基づいてライフサイクルルールを実行します。したがって、適用されるのはルール 1 のみです。これは、ルール 1 が 30 日後にオブジェクトを削除することで、すべての課金を停止するためです。一方、ルール 2 はオブジェクトを低頻度アクセスストレージクラスへトランジションさせるため、関連するストレージ料金やデータ取得料金が引き続き発生します。

設定済みのライフサイクルルールを変更した場合、その変更はいつ有効になりますか? また、元のルールでマッチしたデータはどのように扱われますか?

たとえば、プレフィックス er を持つオブジェクトに対してライフサイクルルールを設定したとします。このルールでは、最終アクセス日時から 30 日後にオブジェクトを低頻度アクセスストレージクラスへトランジションし、さらに 30 日後にアクセスされた場合に標準ストレージクラスへ戻すよう指定しています。しかし、オブジェクトの最終アクセス日時から 35 日後に、ライフサイクルルールのプレフィックスを er から re に変更したため、オブジェクトは低頻度アクセスストレージクラスへトランジションされますが、標準ストレージクラスへ戻すアクションは有効になりません。更新されたルールにマッチするオブジェクトについては、最終アクセス日時はバケットに対してアクセス追跡機能が有効化された時点から計算されます。

バージョン管理が有効なバケットでは、インテリジェントティアリングが異なるオブジェクトバージョンのストレージクラスにどのような影響を与えますか?

バージョン管理が有効なバケットでは、各オブジェクトバージョンには一意のバージョン ID があり、それぞれが独立したオブジェクトとして扱われます。したがって、あるオブジェクトの以前のバージョンは低頻度アクセスストレージクラスにある一方で、同じオブジェクトの現在のバージョンは標準ストレージクラスにあることがあります。