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

Object Storage Service:最終変更時刻に基づいてライフサイクルルールを設定し、ストレージコストを削減

最終更新日:Dec 13, 2024

ビジネス要件に基づいて、コンプライアンス要件やアーカイブ要件のために、アクセス頻度の低いデータをObject Storage Service (OSS) バケットに長期間保持するか、不要になったデータを一括して削除する必要がある場合があります。 最終変更時刻に基づいてライフサイクルルールを設定し、コールドデータを適切なストレージクラスに移動したり、オブジェクトを削除してストレージコストを削減したりできます。

シナリオ

  • 医療機関はOSSに医療記録を保存します。 これらのオブジェクトは、アップロード後6か月以内にアクセスされることがあり、その後はほとんどアクセスされません。 この場合、データマネージャは、オブジェクトがアップロードされてから180日後にオブジェクトのストレージクラスをアーカイブに変換するライフサイクルルールを設定できます。

  • 企業は、顧客サービスホットラインの通話記録をOSSに保存します。 これらのオブジェクトは、最初の2か月以内に頻繁にアクセスされ、2か月後にアクセスされることもあり、6か月後にはほとんどアクセスされません。 2年後、オブジェクトを保存する必要がなくなりました。 この場合、データマネージャは、これらのオブジェクトのストレージクラスをアップロードから60日後に低頻度アクセス (IA) に、アップロードから180日後にアーカイブに変換し、アップロードから730日後に削除するようにライフサイクルルールを設定できます。

  • バケットからすべてのオブジェクトを削除します。 OSSでは、一度に最大1,000個のオブジェクトを手動で削除できます。 この場合、次の日にバケット内のすべてのオブジェクトを削除するようにライフサイクルルールを設定できます。

ストレージクラスの詳細については、「概要」をご参照ください。

制限事項

マッチ条件

ライフサイクルルールは、プレフィックスとタグに基づく照合のみをサポートします。 ワイルドカードマッチング、サフィックスマッチング、および正規表現マッチングはサポートされていません。

部品ライフサイクル

名前が重複するプレフィックスを持つオブジェクトに対して、部品ライフサイクルポリシーを含む2つ以上のライフサイクルルールを設定することはできません。 例:

  • 例 1

    バケットの部品ポリシーを含むライフサイクルルールを設定する場合、バケット内のオブジェクトの部品ポリシーを含む別のライフサイクルルールを設定することはできません。

  • 例 2

    バケット内のdir1プレフィックスを含むオブジェクトの部品ポリシーを含むライフサイクルルールを設定する場合、dir1/dir2など、名前に重複するプレフィックスを含むオブジェクトの部品ポリシーを含む別のライフサイクルルールを設定することはできません。

ストレージクラスの変換

  • 追加可能オブジェクトのストレージクラスをコールドアーカイブまたはディープコールドアーカイブに変換するライフサイクルルールを設定することはできません。

  • ライフサイクルルールを設定して、シンボリックリンクのストレージクラスをIA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換することはできません。

使用上の注意

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

バケットには最大1,000のライフサイクルルールを設定できます。 ライフサイクルルールには、最終変更時刻に基づくポリシーと最終アクセス時刻に基づくポリシーの両方を含めることができます。

上書きセマンティクス

PutBucketLifecycle操作は、バケットのライフサイクルルールの既存の設定を上書きします。 たとえば、Rule1という名前のライフサイクルルールがバケットに設定されていて、そのバケットにRule2という名前の別のライフサイクルルールを設定する場合は、次の操作を実行します。

  • GetBucketLifecycle操作を呼び出してRule1を照会します。

  • Rule1とRule2の両方をライフサイクルルール設定に追加します。

  • PutBucketLifecycle操作を呼び出して、バケットのRule1とRule2を作成します。

有効期間

OSSは、ルールが作成されてから24時間以内にライフサイクルルールを読み込みます。 ライフサイクルルールがロードされた後、OSSは毎日08:00:00 (UTC + 8) にルールを実行します。

オブジェクトの最終変更時刻とライフサイクルルールの実行時間の間隔は、24時間より長くする必要があります。 たとえば、アップロードしてから1日後にオブジェクトを削除するようにバケットのライフサイクルルールを設定した場合、7月20日2020日にアップロードされたオブジェクトは、オブジェクトがアップロードされた特定の時間に基づいて異なる日付で削除されます。

  • 7月20日の08:00:00 (UTC + 8) より前にアップロードされた2020は、2020年7月21日の08:00:00 (UTC + 8) から2020年7月22日の08:00:00 (UTC + 8) まで削除されます。

  • 7月20日の08:00:00 (UTC + 8) 以降にアップロードされた2020は、2020年7月22日の08:00:00 (UTC + 8) から2020年7月23日の08:00:00 (UTC + 8) まで削除されます。

重要

ライフサイクルルールを更新すると、その日にルールに基づいて実行される予定のタスクが中断されます。 ライフサイクルルールを頻繁に更新しないことを推奨します。

完了時間

タグを含まないライフサイクルルール

  • タグに基づいていないライフサイクルルールの場合、オブジェクトの削除、ストレージクラスの変換、部品の有効期限など、最大10億のライフサイクル管理アクションを、中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (張家口) 、中国 (ウランカブ) 、中国 (深セン) 、シンガポールで24時間以内に完了できます。 ライフサイクルルールに基づくライフサイクル管理アクションの数が10億を超える場合、アクションの完了に必要な時間は24時間を超える可能性があります。

  • タグに基づいていないライフサイクルルールの場合、他のリージョンで24時間以内に最大100万のライフサイクル管理アクションを完了できます。 ライフサイクルルールに基づくライフサイクル管理アクションの数が100万を超える場合、アクションの完了に必要な時間は24時間を超える可能性があります。

タグを含むライフサイクルルール

  • タグに基づくライフサイクルルールの場合、オブジェクトの削除、ストレージクラスの変換、部品の有効期限など、最大500万件のライフサイクル管理アクションを、中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (張家口) 、中国 (ウランカブ) 、中国 (深セン) 、シンガポールで24時間以内に完了できます。 ライフサイクルルールに基づくライフサイクル管理アクションの数が500万を超える場合、アクションの完了に必要な時間は24時間を超える可能性があります。

  • タグに基づくライフサイクルルールの場合、他のリージョンで24時間以内に最大50万のライフサイクル管理アクションを完了できます。 ライフサイクルルールに基づくライフサイクル管理アクションの数が50万を超える場合、アクションの完了に必要な時間は24時間を超える可能性があります。

説明

バケットのバージョン管理が有効になっている場合、バケット内の各オブジェクトバージョンに対するライフサイクル管理アクションは、該当する制限にカウントされます。

課金ルール

ライフサイクルルールを使用してオブジェクトストレージクラスを変換したり、オブジェクトを削除したりすると、リクエスト料金とストレージ料金が請求される場合があります。 詳細については、「ライフサイクルルールに関する料金」をご参照ください。

OSS-HDFSが有効になっているバケットのライフサイクルルール

  • OSSオブジェクトのライフサイクルルール

    OSS-HDFSが有効になっているバケット内のすべてのオブジェクトと一致するように最終変更時刻に基づいてライフサイクルルールを設定または変更するには、NOT要素を使用して、. dlsdata /ディレクトリに移動します。 これにより、ライフサイクルルールによるオブジェクトの削除やストレージクラスの変換アクションがOSS-HDFSデータに適用され、OSS-HDFSデータの読み取りおよび書き込み操作に影響を与えることがなくなります。

    p571593..jpeg

  • Hadoop分散ファイルシステム (HDFS) ファイルのライフサイクルルール

    たとえば、アクセス頻度の高いオブジェクトを標準ストレージクラスに保存し、アクセス頻度の低いオブジェクトをIA、アーカイブ、またはコールドアーカイブストレージクラスに保存します。 この場合、自動ストレージ階層化機能を使用するようにライフサイクルルールを設定できます。 詳細については、「OSS-HDFSの自動ストレージ階層化」をご参照ください。

ライフサイクルルール要素

マッチ条件

  • プレフィックスによる一致: オブジェクトとパーツはプレフィックスによって一致します。 複数のライフサイクルルールを作成して、異なるプレフィックスを指定できます。 各プレフィックスは一意である必要があります。 プレフィックスの命名規則は、オブジェクトの命名規則と同じです。 詳細については、「オブジェクト」をご参照ください。

  • タグによる一致: オブジェクトはタグキーとタグ値によって一致します。 1つのライフサイクルルールで複数のタグを指定できます。 ライフサイクルルールは、指定されたすべてのタグを持つオブジェクトにのみ適用されます。

    ライフサイクルルールに指定されたタグフィルター

    タグのオブジェクト

    ライフサイクルルールがオブジェクトに適用されるかどうか

    a:1、b:2

    a:1

    不可

    a:1、b:3

    不可

    a:1、b:2

    a:1、b:2、c:3

    説明

    OSSライフサイクルルールは、タグごとに部品を照合できません。

  • プレフィックスとタグによる一致: オブジェクトはプレフィックスとタグによって一致します。

  • バケットごとに一致: バケットに格納されているすべてのオブジェクトとパーツが一致します。

  • NOT要素: NOT要素は、特定のライフサイクルルールを有効にしたくないオブジェクトの名前プレフィックスとタグを指定します。 NOT要素の設定方法の詳細については、「NOT」をご参照ください。

    重要

    ライフサイクルルールに設定できるNOT要素は1つだけです。 NOT要素にはプレフィックスを1つだけ指定する必要があります。 さらに、ライフサイクルルールのNOT要素に最大1つのタグを設定できます。

オブジェクトの有効期間または有効期限と期限切れのオブジェクトに対するアクション

  • 有効期間: バージョン化されていないバケット内のオブジェクトとバージョン化されたバケット内のオブジェクトの現在のバージョンの有効期間を指定します。 オブジェクトの有効期限が切れた後にOSSで実行するアクションを指定します。 特定のライフサイクルルールに一致するオブジェクトは、オブジェクトが最後に変更された後、指定された有効期間にわたって保持されます。 指定されたアクションは、有効期限が切れるとこれらのオブジェクトに対して実行されます。

  • 有効期限: バージョン化されていないバケット内のオブジェクトとバージョン化されたバケット内のオブジェクトの現在のバージョンの有効期限を指定します。 有効期限が切れた後にこれらのオブジェクトに対してOSSで実行するアクションを指定します。 この日付より前に最後に変更されたすべてのオブジェクトは有効期限が切れ、有効期限が切れた後、これらのオブジェクトに対して指定されたアクションが実行されます。

  • 以前のバージョンのオブジェクトの有効期間: 以前のバージョンのオブジェクトの有効期間と、以前のバージョンの有効期限が切れた後にOSSで実行するアクションを指定します。 特定のライフサイクルルールに一致するオブジェクトは、オブジェクトが以前のバージョンになった後、指定された有効期間保持されます。 指定されたアクションは、有効期限が切れるとこれらのオブジェクトに対して実行されます。

ライフサイクルルールを設定して、期限切れオブジェクトのストレージクラスを変換したり、期限切れオブジェクトを削除したりできます。 詳細については、「構成要素」をご参照ください。

部品の有効期間または有効期限と期限切れ部品のアクション

  • 有効期間: パーツの有効期間を指定します。 特定のライフサイクルルールに一致する部品は、指定された有効期間内に保持され、部品の有効期限が切れた後に削除されます。

  • 有効期限: パーツの有効期限を指定します。 有効期限前に最後に変更されたパーツは削除されます。

マッチングロジック

異なるプレフィックス

たとえば、次のオブジェクトはバケットに保存されます。

logs/programl/log1.txt
logs/program2/log2.txt
logs/program3/log3.txt
doc/readme.txt

ライフサイクルルールで指定されたプレフィックスがlogs /の場合、ライフサイクルルールは、名前がlogs /プレフィックスを含む最初の3つのオブジェクトに対して有効になります。 ライフサイクルルールで指定されたプレフィックスがdoc/readme.txtの場合、ライフサイクルルールはdoc/readme.txtオブジェクトに対してのみ有効になります。

説明

接頭辞は漢字で始めることができます。

ライフサイクルルールに一致するオブジェクトに対してGetObjectまたはHeadObject操作を実行すると、x-oss-expirationヘッダーがレスポンスに含まれます。 ヘッダーには、オブジェクトの有効期限を示すexpiry-dateと、一致したライフサイクルルールのidを示すrule-IDの2つのパラメーターが含まれます。

複数のライフサイクルルールで同じプレフィックスとタグを指定

同じ名前のプレフィックスとタグを持つオブジェクトが同時に複数のライフサイクルルールに一致する場合、オブジェクトを削除するように設定されたライフサイクルルールは、オブジェクトのストレージクラスを変換するように設定されたライフサイクルルールよりも優先されます。 たとえば、次の表に示すrule1とrule2の両方が、名前にabcプレフィックスが含まれ、a=1タグが付いているオブジェクトに対して有効になります。 rule1は、最後に変更されてから20日後に一致するオブジェクトを削除するように設定されます。 rule2は、最後に変更されてから20日後に、一致したオブジェクトのストレージクラスをアーカイブに変換するように設定されます。 rule1とrule2が同時にバケットに設定されている場合、rule2は有効になりません。

ルール

プレフィックス

タグ

アクション

rule1

こんにちは

a=1

最後に変更されてから20日後に一致したオブジェクトを削除します。

rule2

こんにちは

a=1

一致したオブジェクトのストレージクラスを、最後に変更されてから20日後にアーカイブに変換します。

重複するプレフィックスと複数のライフサイクルルールで指定された同じタグ

たとえば、次の表に示すrule1は、a=1タグを持つオブジェクトのストレージクラスを、最後に変更されてから10日後にIAに変換します。 次の表に示すrule2は、名前にabcプレフィックスが含まれ、最後に変更されてから120日後にa=1タグが付いているオブジェクトを削除します。

ルール

プレフィックス

タグ

アクション

rule1

-

a=1

一致したオブジェクトのストレージクラスを最後に変更してから10日後にIAに変換します。

rule2

こんにちは

a=1

最後に変更されてから120日後に一致するオブジェクトを削除します。

次の表で説明するrule3は、a=1タグを持つオブジェクトのストレージクラスを、最後に変更されてから20日後にアーカイブに変換します。 次の表に示すrule4は、名前にabcプレフィックスが含まれ、a=1タグが付いているオブジェクトのストレージクラスを、最後に変更されてから30日後にIAに変換します。 rule3とrule4が同時にバケットに設定されている場合、名前にabcプレフィックスが含まれ、a=1タグが付いているオブジェクトのストレージクラスは、rule3に基づいて最後に変更されてから20日後にアーカイブに変換されます。 アーカイブオブジェクトをIAオブジェクトに変換することはできません。 したがって、rule4は有効になりません。

ルール

プレフィックス

タグ

アクション

rule3

-

a=1

一致したオブジェクトのストレージクラスを、最後に変更されてから20日後にアーカイブに変換します。

rule4

こんにちは

a=1

一致したオブジェクトのストレージクラスを最後に変更してから30日後にIAに変換します。

ではない

バケットに複数のライフサイクルルールを設定し、ライフサイクルルールの1つにNOT要素が含まれている場合、NOT要素を含むルールで指定されたアクションは、ルールに一致するオブジェクトに対してのみ実行されます。 例:

  • 例 1

    • ライフサイクルルールは、オブジェクトが最後に変更されてから100日後にexamplebucketバケット内のdir/ prefixを名前に含むオブジェクトを削除するように設定されています。

    • NOT要素を含む別のライフサイクルルールは、オブジェクトが最後に変更されてから50日後にexamplebucketバケット内の名前にdir /プレフィックスが含まれていないすべてのオブジェクトを削除するように設定されています。

    次の表に、前述のライフサイクルルールが適用された後のオブジェクトに対するアクションを示します。

    オブジェクト

    Action

    名前にdir /プレフィックスが含まれるオブジェクト

    最後に変更されてから100日後に一致するオブジェクトを削除します。

    名前にdir /プレフィックスが含まれないオブジェクト

    最後に変更されてから50日後に一致したオブジェクトを削除します。

  • 例 2

    • NOT要素を含むライフサイクルルールは、オブジェクトが最後に変更されてから30日後にexamplebucketバケット内のTagA (key1:value1) を持たないすべてのオブジェクトを削除するように設定されています。

    • 別のライフサイクルルールは、オブジェクトが最後に変更されてから50日後にexamplebucketバケット内のTagB (key2:value2) を持つオブジェクトを削除するように設定されています。

    次の表に、前述のライフサイクルルールが適用された後のオブジェクトに対するアクションを示します。

    オブジェクト

    Action

    TagAまたはTagBを持たないすべてのオブジェクト

    最後に変更されてから30日後に一致したオブジェクトを削除します。

    TagAのみを持つオブジェクト

    一致したオブジェクトは削除しないでください。

    TagBのみを持つオブジェクト

    最後に変更されてから30日後に一致したオブジェクトを削除します。

    TagAとTagBを持つオブジェクト

    最後に変更されてから50日後に一致したオブジェクトを削除します。

手順

OSSコンソールの使用

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、データ管理 > ライフサイクルを選択します。

  4. ライフサイクルページで、ルールの作成をクリックします。

    説明

    最終変更時刻に基づいてライフサイクルルールを作成する場合は、ライフサイクル ページで [アクセストラッキングの有効化] をオンにする必要はありません。 アクセス追跡には追加料金がかかります。 最終アクセス時刻に基づいてライフサイクルルールを作成するには、アクセス追跡を有効にする必要があります。 詳細については、「最終アクセス時間に基づくライフサイクルルール」をご参照ください。

  5. [ルールの作成] パネルで、パラメーターを設定します。 下表にパラメーターを示します。

    • 未バージョン化バケット

      セクション

      パラメーター

      説明

      基本設定

      ステータス

      ライフサイクルルールのステータスを指定します。 開始 または [無効] を選択できます。

      • ライフサイクルルールを有効にすると、ライフサイクルルールに基づいてオブジェクトのストレージクラスが変換されるか、オブジェクトが削除されます。

      • ライフサイクルルールを無効にすると、ライフサイクルルールのライフサイクルタスクが中断されます。

      ポリシー

      ライフサイクルルールを有効にするオブジェクトを指定します。 オブジェクトプレフィックス または バケット全体に適用 を選択できます。

      説明

      指定されたプレフィックスを持つオブジェクトを選択した場合、完全なプレフィックスを指定する必要があります。 たとえば、名前にsrc/dir1プレフィックスが含まれるオブジェクトにライフサイクルルールを適用する場合は、src/dir1と入力します。 dir1のみを入力した場合、ライフサイクルルールは必要な効果を生成しません。

      重複するプレフィックスを許可

      重複するプレフィックスを許可するかどうかを指定します。 デフォルトでは、各ライフサイクルルールのプレフィックスが重複するかどうかをチェックします。 たとえば、バケットに既存のライフサイクルルール (ルール1) があり、重複するプレフィックスを含む別のライフサイクルルール (ルール2) を設定する場合:

      • ルール1

        オブジェクトが最後に変更されてから180日後に、名前にdir1/ プレフィックスが含まれるすべてのオブジェクトをバケット内で削除します。

      • ルール2

        バケット内のdir1/dir2/ プレフィックスを名前に含むすべてのオブジェクトのストレージクラスを、オブジェクトが最後に変更されてから30日後にIAに変換し、最後に変更されてから60日後にオブジェクトを削除します。

      このチェックボックスをオンにしないと、dir1/dir2/ ディレクトリ内のオブジェクトが2つのライフサイクルルールに一致することを検出し、ルール2の作成を拒否し、[同じアクションタイプの有効期限] を返します。 エラーメッセージ。

      このチェックボックスをオンにすると、オブジェクトが最後に変更されてから30日後にdir1/dir2/ ディレクトリ内のオブジェクトのストレージクラスをIAに変換し、最後に変更されてから60日後に削除するルール2が作成されます。 dir1/ ディレクトリ内の他のオブジェクトは、オブジェクトが最後に変更されてから180日後に削除されます。

      説明

      バケットに複数のライフサイクルルールがあり、そのうちの1つがバケット全体に適用される場合、ライフサイクルルールには重複するプレフィックスがあります。

      接頭辞

      ライフサイクルルールを有効にするオブジェクトの名前にプレフィックスを指定します。

      • プレフィックスをimgに設定した場合、imgtest.pngやimg/example.jpgなど、名前にimgプレフィックスが含まれるすべてのオブジェクトがライフサイクルルールと一致します。

      • プレフィックスをimg/ に設定した場合、img/example.jpgやimg/test.jpgなど、名前にimg /プレフィックスが含まれるすべてのオブジェクトがライフサイクルルールと一致します。

      タグ

      タグを指定します。 このルールは、指定されたタグを持つオブジェクトに対してのみ有効です。

      • たとえば、ライフサイクルルールでタグを指定し、ライフサイクルルールでプレフィックスを指定しない場合、ライフサイクルルールはバケットにタグを持つすべてのオブジェクトに適用されます。

      • ライフサイクルルールでa=1タグとimgプレフィックスを指定した場合、ライフサイクルルールは、オブジェクト名にimgプレフィックスがあり、バケットにa=1タグがあるすべてのオブジェクトに適用されます。

      詳細については、「オブジェクトへのタグの追加」をご参照ください。

      ではない

      指定された名前プレフィックスとタグを持つオブジェクトに対してライフサイクルルールが有効にならないように指定します。

      重要
      • NOTをオンにすると、ライフサイクルルールにPrefixパラメーターとTagパラメーターの少なくとも1つを指定する必要があります。

      • NOTパラメーターに指定されたタグのキーは、タグパラメーターに指定されたキーと同じにすることはできません。

      • NOTをオンにすると、ライフサイクルルールに部品ポリシーを含めることはできません。

      ファイルサイズ

      ライフサイクルルールを有効にするオブジェクトのサイズを指定します。

      • 最小サイズ: 指定されたサイズより大きいサイズのオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 オブジェクトの最小サイズは、0 Bより大きく5テラバイト未満で指定できます。

      • 最大サイズ: 指定されたサイズより小さいサイズのオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 オブジェクトの最大サイズは、0 Bより大きく、5テラバイト以下で指定できます。

      重要

      同じライフサイクルルールで最小オブジェクトサイズと最大オブジェクトサイズを指定する場合は、次の項目に注意してください。

      • 最大オブジェクトサイズは、最小オブジェクトサイズより大きくなければなりません。

      • ライフサイクルルールに部品ポリシーを含めることはできません。

      • 削除マーカーを削除するポリシーを含めることはできません。

      オブジェクトに対するポリシー

      ファイル時間ポリシー

      オブジェクトの有効期限ポリシーを指定します。 [有効期間 (日)][有効期限] 、または 有効になっていません を選択できます。 有効になっていません を選択した場合、オブジェクトの有効期限ポリシーは設定されません。

      ライフサイクルベースのルール

      ライフサイクルルールを設定して、オブジェクトのストレージクラスを変換するか、期限切れのオブジェクトを削除します。 IAアーカイブコールドアーカイブディープコールドアーカイブ、またはオブジェクトの削除を選択できます。

      たとえば、ファイル時間ポリシー有効期限を選択し、有効期限として9月24日2023を指定し、オブジェクトの削除 (復元できません) を指定します。 この場合、9月24日2023前に最後に変更されたオブジェクトは自動的に削除され、復元できません。

      フラグメントに対するポリシー

      フラグメント期限切れポリシー

      部品ポリシーを指定します。 タグパラメーターを設定した場合、このパラメーターは使用できません。 [有効期間 (日)][有効期限] 、または 有効になっていません を選択できます。 有効になっていません を選択した場合、部品ポリシーは設定されません。

      重要

      ライフサイクルルールには、オブジェクト有効期限ポリシーと部品有効期限ポリシーの少なくとも1つが含まれている必要があります。

      フラグメントに対するルール

      パーツの有効期限を指定します。 有効期間または有効期限を指定できます。 期限切れのパーツは自動的に削除され、復元できません。

    • Versionedバケット

      基本設定 セクションと フラグメントに対するポリシー セクションのパラメーターを、バージョン化されていないバケットのパラメーターと同じ方法で設定します。 次の表では、バージョン化されていないバケットに設定したパラメーターとは異なるパラメーターのみを説明します。

      セクション

      パラメーター

      説明

      現在のバージョンのポリシー

      削除マーカーの削除

      バケットがバージョン管理されている場合、オブジェクトライフサイクルパラメーターに [削除マーカー] オプションが追加されます。 その他のパラメーターは、バージョン化されていないバケットに対して設定できるパラメーターと同じです。

      削除マーカーの削除を選択した場合、オブジェクトに削除マーカーであるバージョンが1つしかない場合、OSSは削除マーカーの有効期限が切れたと見なし、削除マーカーを削除します。 オブジェクトに複数のバージョンがあり、オブジェクトの現在のバージョンが削除マーカーの場合、OSSは削除マーカーを保持します。 削除マーカーの詳細については、「マーカーの削除」をご参照ください。

      重要

      一致したオブジェクトに以前のバージョンがある場合、ライフサイクルルールはオブジェクトの削除マーカーを削除しません。 不要になった以前のオブジェクトバージョンを削除し、マーカーを削除して、多数の削除マーカーによるリストのパフォーマンスの低下を防ぐことをお勧めします。

      以前のバージョンに対するポリシー

      ファイル時間ポリシー

      以前のバージョンの有効期限を指定します。 [有効期間 (日)] または 有効になっていません を選択できます。 有効になっていません を選択した場合、オブジェクトポリシーは設定されません。

      ライフサイクルベースのルール

      オブジェクトが以前のバージョンになってから保持できる日数を指定します。 有効期限が切れると、指定されたアクションは翌日以前のバージョンで実行されます。 たとえば、Validity Period (Days) パラメーターを30に設定した場合、2023年9月1日に以前のバージョンになったオブジェクトは、指定されたストレージクラスに移動されるか、2023年10月1日に削除されます。

      重要

      オブジェクトが以前のバージョンになるときは、それ以降のバージョンが生成された時刻に基づいて判断できます。

  6. クリックOK.

    ライフサイクルルールの作成後、ライフサイクルルールリストでルールを表示できます。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用してライフサイクルルールを設定する方法の例を示しています。 他のプログラミング言語でOSS SDKを使用してライフサイクルルールを設定するためのサンプルコードの詳細については、「概要」をご参照ください。

Java

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.LifecycleRule;
import com.aliyun.oss.model.SetBucketLifecycleRequest;
import com.aliyun.oss.model.StorageClass;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance. 
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Create a request by using SetBucketLifecycleRequest. 
            SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);

            // Specify the ID of the lifecycle rule. 
            String ruleId0 = "rule0";
            // Specify the prefix that you want the lifecycle rule to match. 
            String matchPrefix0 = "A0/";
            // Specify the tag that you want the lifecycle rule to match. 
            Map<String, String> matchTags0 = new HashMap<String, String>();
            // Specify the key and value of the tag. In the example, the key is set to owner and the value is set to John. 
            matchTags0.put("owner", "John");


            String ruleId1 = "rule1";
            String matchPrefix1 = "A1/";
            Map<String, String> matchTags1 = new HashMap<String, String>();
            matchTags1.put("type", "document");

            String ruleId2 = "rule2";
            String matchPrefix2 = "A2/";

            String ruleId3 = "rule3";
            String matchPrefix3 = "A3/";

            String ruleId4 = "rule4";
            String matchPrefix4 = "A4/";

            String ruleId5 = "rule5";
            String matchPrefix5 = "A5/";

            String ruleId6 = "rule6";
            String matchPrefix6 = "A6/";

            // Set the expiration time to three days after the last modified time. 
            LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
            rule.setTags(matchTags0);
            request.AddLifecycleRule(rule);

            // Specify that objects that are created before the specified date expire. 
            rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
            rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setTags(matchTags1);
            request.AddLifecycleRule(rule);

            // Specify that parts expire three days after they are last modified. 
            rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setExpirationDays(3);
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // Specify that parts that are created before the specific date expire. 
            rule = new LifecycleRule(ruleId3, matchPrefix3, LifecycleRule.RuleStatus.Enabled);
            abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // Specify that the storage classes of objects are changed to IA 10 days after they are last modified, and to Archive 30 days after they are last modified. 
            rule = new LifecycleRule(ruleId4, matchPrefix4, LifecycleRule.RuleStatus.Enabled);
            List<LifecycleRule.StorageTransition> storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.IA);
            storageTransition.setExpirationDays(10);
            storageTransitions.add(storageTransition);
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(30);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // Specify that the storage classes of objects that are last modified before October 12, 2022 are changed to Archive. 
            rule = new LifecycleRule(ruleId5, matchPrefix5, LifecycleRule.RuleStatus.Enabled);
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();

            storageTransition.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));

            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // Specify that rule6 is configured for versioning-enabled buckets. 
            rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
            // Specify that the storage classes of objects are changed to Archive 365 days after the objects are last modified. 
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(365);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            // Configure the lifecycle rule to automatically delete expired delete markers. 
            rule.setExpiredDeleteMarker(true);
            // Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
            // Specify that the storage classes of the previous versions of objects are changed to Archive 20 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
            // Specify that the previous versions of objects are deleted 30 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionExpiration noncurrentVersionExpiration = new LifecycleRule.NoncurrentVersionExpiration().withNoncurrentDays(30);
            List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitions = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
            noncurrentVersionStorageTransitions.add(noncurrentVersionStorageTransition2);
            rule.setStorageTransition(storageTransitions);
            rule.setNoncurrentVersionExpiration(noncurrentVersionExpiration);
            rule.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitions);
            request.AddLifecycleRule(rule);

            // Initiate a request to configure lifecycle rules. 
            ossClient.setBucketLifecycle(request);

            // Query the lifecycle rules that are configured for the bucket. 
            List<LifecycleRule> listRules = ossClient.getBucketLifecycle(bucketName);
            for(LifecycleRule rules : listRules){
                System.out.println("ruleId="+rules.getId()+", matchPrefix="+rules.getPrefix());
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

PHP

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
use OSS\Model\LifecycleConfig;
use OSS\Model\LifecycleRule;
use OSS\Model\LifecycleAction;

// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
$provider = new EnvironmentVariableCredentialsProvider();
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the name of the bucket. 
$bucket= "examplebucket";

// Specify the rule ID and the prefix contained in the names of the objects that match the rule. 
$ruleId0 = "rule0";
$matchPrefix0 = "A0/";
$ruleId1 = "rule1";
$matchPrefix1 = "A1/";

$lifecycleConfig = new LifecycleConfig();
$actions = array();
// Specify that objects expire three days after they are last modified. 
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3);
$lifecycleRule = new LifecycleRule($ruleId0, $matchPrefix0, "Enabled", $actions);
$lifecycleConfig->addRule($lifecycleRule);
$actions = array();
// Specify that the objects that are created before the specified date expire. 
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z');
$lifecycleRule = new LifecycleRule($ruleId1, $matchPrefix1, "Enabled", $actions);
$lifecycleConfig->addRule($lifecycleRule);
try {
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    $ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");

Node.js

const OSS = require('ali-oss')

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the bucket. 
  bucket: 'yourbucketname'
});

async function putBucketLifecycle(lifecycle) {
  try {
    const result = await client.putBucketLifecycle('yourbucketname', [
    lifecycle
  ]);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

const lifecycle1 = {
  id: 'rule1',
  status: 'Enabled',
  prefix: 'foo/',
  expiration: {
    // Specify that the current versions of objects expire three days after the objects are last modified. 
    days: 3 
  }
}
putBucketLifecycle(lifecycle1)

const lifecycle2 = {
  id: 'rule2',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // Specify that the objects that are created before the specified date expire. 
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle2)

const lifecycle3 = {
  id: 'rule3',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // Specify that parts expire in three days. 
    days: 3 
  },
}
putBucketLifecycle(lifecycle3)

const lifecycle4 = {
  id: 'rule4',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // Specify that parts created before the specified date expire. 
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle4)

const lifecycle5 = {
  id: 'rule5',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    // Specify that the storage classes of the current versions of objects are changed to Archive 20 days after the objects are last modified. 
    days: 20,
    storageClass: 'Archive'
  },
  expiration: {
    // Specify that the current versions of objects expire 21 days after the objects are last modified. 
    days: 21 
  },
}
putBucketLifecycle(lifecycle5)

const lifecycle6 = {
  id: 'rule6',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    //Specify that the storage classes of the objects that are created before the specified date are changed to Archive. 
    createdBeforeDate: '2023-02-19T00:00:00.000Z', 
    storageClass: 'Archive'
  },
  expiration: {
    // Specify that objects created before the specified date are deleted. 
    createdBeforeDate: '2023-01-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle6)

const lifecycle7 = {
  id: 'rule7',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // Specify that delete markers are automatically removed when they expire. 
    expiredObjectDeleteMarker: true 
  }
}
putBucketLifecycle(lifecycle7)

const lifecycle8 = {
  id: 'rule8',
  status: 'Enabled',
  prefix: 'foo/', 
  // Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. 
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  }
}
putBucketLifecycle(lifecycle8)

const lifecycle9 = {
  id: 'rule9',
  status: 'Enabled',
  prefix: 'foo/', 
  // Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. 
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  },
  // Specify the tags for objects that you want to match the rules. 
  tag: [{
    key: 'key1',
    value: 'value1'
  },
   {
     key: 'key2',
     value: 'value2'
   }]
}
putBucketLifecycle(lifecycle9)

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import datetime
from oss2.models import (LifecycleExpiration, LifecycleRule, 
                        BucketLifecycle,AbortMultipartUpload, 
                        TaggingRule, Tagging, StorageTransition,
                        NoncurrentVersionStorageTransition,
                        NoncurrentVersionExpiration)

# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"

# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Specify that objects expire three days after they are last modified. 
rule1 = LifecycleRule('rule1', 'tests/',
                      status=LifecycleRule.ENABLED,
                      expiration=LifecycleExpiration(days=3))

# Specify that objects created before the specified date expire. 
rule2 = LifecycleRule('rule2', 'tests2/',
                      status=LifecycleRule.ENABLED,
expiration = LifecycleExpiration(created_before_date=datetime.date(2023, 12, 12)))

# Specify that the parts expire three days after they are last modified. 
rule3 = LifecycleRule('rule3', 'tests3/',
                      status=LifecycleRule.ENABLED,
            abort_multipart_upload=AbortMultipartUpload(days=3))

# Specify that parts created before the specified date expire. 
rule4 = LifecycleRule('rule4', 'tests4/',
                      status=LifecycleRule.ENABLED,
                      abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2022, 12, 12)))

# Specify that the storage classes of objects are changed to Infrequent Access (IA) 20 days after they are last modified, and to Archive 30 days after they are last modified. 
rule5 = LifecycleRule('rule5', 'tests5/',
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(days=20,storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
                            StorageTransition(days=30,storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)])

# Specify the tag that you want the lifecycle rule to match. 
tagging_rule = TaggingRule()
tagging_rule.add('key1', 'value1')
tagging_rule.add('key2', 'value2')
tagging = Tagging(tagging_rule)

# Specify that the storage classes of objects are changed to Archive 365 days after they are last modified.  
# Compared with the preceding rules, rule6 includes the tag condition to match objects. The rule takes effect for objects whose tagging configurations are key1=value1 and key2=value2. 
rule6 = LifecycleRule('rule6', 'tests6/',
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(created_before_date=datetime.date(2022, 12, 12),storage_class=oss2.BUCKET_STORAGE_CLASS_IA)],
                      tagging = tagging)

# rule7 is a lifecycle rule that applies to a versioning-enabled bucket. 
# Specify that the storage classes of objects are changed to Archive 365 days after they are last modified. 
# Specify that delete markers are automatically removed when they expire. 
# Specify that the storage classes of objects are changed to IA 12 days after they become previous versions. 
# Specify that the storage classes of objects are changed to Archive 20 days after they become previous versions. 
# Specify that objects are deleted 30 days after they become previous versions. 
rule7 = LifecycleRule('rule7', 'tests7/',
              status=LifecycleRule.ENABLED,
              storage_transitions=[StorageTransition(days=365, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)], 
              expiration=LifecycleExpiration(expired_detete_marker=True),
              noncurrent_version_sotrage_transitions = 
                    [NoncurrentVersionStorageTransition(12, oss2.BUCKET_STORAGE_CLASS_IA),
                     NoncurrentVersionStorageTransition(20, oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
              noncurrent_version_expiration = NoncurrentVersionExpiration(30))

lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5, rule6, rule7])

bucket.put_bucket_lifecycle(lifecycle)

C#

using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the bucket name. Example: examplebucket. 
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";

// Create a ClientConfiguration instance and modify the default parameters based on your requirements.
var conf = new ClientConfiguration();

// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;

// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
    var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
    // Create the first lifecycle rule. 
    LifecycleRule lcr1 = new LifecycleRule()
    {
        ID = "delete obsoleted files",
        Prefix = "obsoleted/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 3,
        Tags = new Tag[1]
    };
    // Specify a tag for the rule. 
    var tag1 = new Tag
    {
        Key = "project",
        Value = "projectone"
    };

    lcr1.Tags[0] = tag1;

    // Create the second lifecycle rule. 
    LifecycleRule lcr2 = new LifecycleRule()
    {
        ID = "delete temporary files",
        Prefix = "temporary/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 20,
        Tags = new Tag[1]         
    };
    // Specify a tag for the rule. 
    var tag2 = new Tag
    {
        Key = "user",
        Value = "jsmith"
    };
    lcr2.Tags[0] = tag2;

    // Specify that parts expire 30 days after they are last modified. 
    lcr2.AbortMultipartUpload = new LifecycleRule.LifeCycleExpiration()
    {
        Days = 30
    };

    LifecycleRule lcr3 = new LifecycleRule();
    lcr3.ID = "only NoncurrentVersionTransition";
    lcr3.Prefix = "test1";
    lcr3.Status = RuleStatus.Enabled;
    lcr3.NoncurrentVersionTransitions = new LifecycleRule.LifeCycleNoncurrentVersionTransition[2]
    {
        // Specify that the storage classes of the previous versions of objects are converted to IA 90 days after they are last modified. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.IA,
            NoncurrentDays = 90
        },
        // Specify that the storage classes of the previous versions of objects are converted to Archive 180 days after they are last modified. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.Archive,
            NoncurrentDays = 180
        }
    };
    setBucketLifecycleRequest.AddLifecycleRule(lcr1);
    setBucketLifecycleRequest.AddLifecycleRule(lcr2);
    setBucketLifecycleRequest.AddLifecycleRule(lcr3);

    // Configure lifecycle rules. 
    client.SetBucketLifecycle(setBucketLifecycleRequest);
    Console.WriteLine("Set bucket:{0} Lifecycle succeeded ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}

Android-Java

PutBucketLifecycleRequest request = new PutBucketLifecycleRequest();
request.setBucketName("examplebucket");

BucketLifecycleRule rule1 = new BucketLifecycleRule();
// Specify the rule ID and the prefix contained in the names of the objects that match the rule. 
rule1.setIdentifier("1");
rule1.setPrefix("A");
// Specify whether to run the lifecycle rule. If this parameter is set to true, OSS periodically runs this rule. If this parameter is set to false, OSS ignores this rule. 
rule1.setStatus(true);
// Specify that objects expire 200 days after they are last modified. 
rule1.setDays("200");
// Specify that the storage classes of objects are converted to Archive 30 days after they are last modified.
rule1.setArchiveDays("30");
// Specify that parts expire three days after they fail to be uploaded. 
rule1.setMultipartDays("3");
// Specify that the storage classes of objects are converted to Infrequent Access (IA) 15 days after they are last modified. 
rule1.setIADays("15");

BucketLifecycleRule rule2 = new BucketLifecycleRule();
rule2.setIdentifier("2");
rule2.setPrefix("B");
rule2.setStatus(true);
rule2.setDays("300");
rule2.setArchiveDays("30");
rule2.setMultipartDays("3");
rule2.setIADays("15");

ArrayList<BucketLifecycleRule> lifecycleRules = new ArrayList<BucketLifecycleRule>();
lifecycleRules.add(rule1);
lifecycleRules.add(rule2);
request.setLifecycleRules(lifecycleRules);
OSSAsyncTask task = oss.asyncPutBucketLifecycle(request, new OSSCompletedCallback<PutBucketLifecycleRequest, PutBucketLifecycleResult>() {
    @Override
    public void onSuccess(PutBucketLifecycleRequest request, PutBucketLifecycleResult result) {
        OSSLog.logInfo("code::"+result.getStatusCode());

    }

    @Override
    public void onFailure(PutBucketLifecycleRequest request, ClientException clientException, ServiceException serviceException) {
        OSSLog.logError("error: "+serviceException.getRawMessage());

    }
});

task.waitUntilFinished();

Go

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Create an OSSClient instance. 
	// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify the actual endpoint. 
	// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Specify the version of the signature algorithm.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Specify the name of the bucket. 
	bucketName := "examplebucket"
	// Configure a lifecycle rule and set ID to rule1. Specify that the objects whose names contain the foo prefix in the bucket expire three days after the objects are last modified. 
	rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)

	// If an object in a bucket for which versioning is enabled is a delete marker and has no other versions, the delete marker is deleted. 
	deleteMark := true
	expiration := oss.LifecycleExpiration{
		ExpiredObjectDeleteMarker: &deleteMark,
	}

	// Specify that the previous versions of objects are deleted 30 days after they are last modified. 
	versionExpiration := oss.LifecycleVersionExpiration{
		NoncurrentDays: 30,
	}

	// Specify that the storage classes of the previous versions of objects are converted to Infrequent Access (IA) 10 days after the objects are last modified. 
	versionTransition := oss.LifecycleVersionTransition{
		NoncurrentDays: 10,
		StorageClass:   "IA",
	}

	// Configure a lifecycle rule and set ID to rule2. 
	rule2 := oss.LifecycleRule{
		ID:                   "rule2",
		Prefix:               "yourObjectPrefix",
		Status:               "Enabled",
		Expiration:           &expiration,
		NonVersionExpiration: &versionExpiration,
		NonVersionTransitions: []oss.LifecycleVersionTransition{
			versionTransition,
		},
	}

	// Configure a lifecycle rule and set ID to rule3. This rule takes effect for objects that have the tag whose key is tag1 and value is value1. These objects expire three days after the objects are last modified. 
	rule3 := oss.LifecycleRule{
		ID:     "rule3",
		Prefix: "",
		Status: "Enabled",
		Tags: []oss.Tag{
			oss.Tag{
				Key:   "tag1",
				Value: "value1",
			},
		},
		Expiration: &oss.LifecycleExpiration{Days: 3},
	}

	// Configure lifecycle rules. 
	rules := []oss.LifecycleRule{rule1, rule2, rule3}
	err = client.SetBucketLifecycle(bucketName, rules)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

C++

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize information about the account used to access OSS. */
    
    /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Specify the name of the bucket. Example: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize resources such as network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    SetBucketLifecycleRequest request(BucketName);
    std::string date("2022-10-12T00:00:00.000Z");

    /* Specify the tags of the objects that you want to match the rule. */
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));

    /* Specify a lifecycle rule. */
    auto rule1 = LifecycleRule();
    rule1.setID("rule1");
    rule1.setPrefix("test1/");
    rule1.setStatus(RuleStatus::Enabled);
    rule1.setExpiration(3);
    rule1.setTags(tagging.Tags());

    /* Specify the expiration date. */
    auto rule2 = LifecycleRule();
    rule2.setID("rule2");
    rule2.setPrefix("test2/");
    rule2.setStatus(RuleStatus::Disabled);
    rule2.setExpiration(date);

    /* Specify that rule3 is enabled for the bucket if versioning is enabled for the bucket. */
    auto rule3 = LifecycleRule();
    rule3.setID("rule3");
    rule3.setPrefix("test3/");
    rule3.setStatus(RuleStatus::Disabled);

    /* Specify that the storage classes of objects are changed to Archive 365 days after the objects are last modified. */  
    auto transition = LifeCycleTransition();  
    transition.Expiration().setDays(365);
    transition.setStorageClass(StorageClass::Archive);
    rule3.addTransition(transition);

    /* Specify that expired delete markers are automatically deleted. */
    rule3.setExpiredObjectDeleteMarker(true);

    /* Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. */
    auto transition1 = LifeCycleTransition();  
    transition1.Expiration().setDays(10);
    transition1.setStorageClass(StorageClass::IA);

    /* Specify that the storage classes of the previous versions of objects are changed to Archive 20 days after the objects are last modified. */
    auto transition2 = LifeCycleTransition();  
    transition2.Expiration().setDays(20);
    transition2.setStorageClass(StorageClass::Archive);

    /* Specify that previous versions are deleted 30 days after the versions are updated. */
    auto expiration  = LifeCycleExpiration(30);
    rule3.setNoncurrentVersionExpiration(expiration);

    LifeCycleTransitionList noncurrentVersionStorageTransitions{transition1, transition2};
    rule3.setNoncurrentVersionTransitionList(noncurrentVersionStorageTransitions);

    /* Configure the lifecycle rules. */
    LifecycleRuleList list{rule1, rule2, rule3};
    request.setLifecycleRules(list);
    auto outcome = client.SetBucketLifecycle(request);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release resources such as network resources. */
    ShutdownSdk();
    return 0;
}

C

#include "oss_api.h"
#include "aos_http_io.h"
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Specify the name of the bucket. Example: examplebucket. */
const char *bucket_name = "examplebucket";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Use a char* string to initialize aos_string_t. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Specify two additional parameters.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Specify whether to use CNAME to access OSS. A value of 0 indicates that CNAME is not used. */
    options->config->is_cname = 0;
    /* Specify network parameters, such as the timeout period. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Call the aos_http_io_initialize method in main() to initialize global resources, such as network resources and memory resources. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Create a memory pool to manage memory. aos_pool_t is equivalent to apr_pool_t. The code used to create a memory pool is included in the APR library. */
    aos_pool_t *pool;
    /* Create a memory pool. The value of the second parameter is NULL. This value indicates that the pool does not inherit other memory pools. */
    aos_pool_create(&pool, NULL);
    /* Create and initialize options. This parameter includes global configuration information such as endpoint, access_key_id, access_key_secret, is_cname, and curl. */
    oss_request_options_t *oss_client_options;
    /* Allocate memory resources in the memory pool to the options. */
    oss_client_options = oss_request_options_create(pool);
    /* Initialize oss_client_options. */
    init_options(oss_client_options);
    /* Initialize parameters. */
    aos_string_t bucket;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_list_t lifecycle_rule_list;   
    aos_str_set(&bucket, bucket_name);
    aos_list_init(&lifecycle_rule_list);
    /* Specify the validity period. */
    oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_days->id, "rule-1");
    /* Specify the prefix that is contained in the names of the objects that you want to match the rule. */
    aos_str_set(&rule_content_days->prefix, "dir1");
    aos_str_set(&rule_content_days->status, "Enabled");
    rule_content_days->days = 3;
    aos_list_add_tail(&rule_content_days->node, &lifecycle_rule_list);
    /* Specify the expiration date. */
    oss_lifecycle_rule_content_t *rule_content_date = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_date->id, "rule-2");
    aos_str_set(&rule_content_date->prefix, "dir2");
    aos_str_set(&rule_content_date->status, "Enabled");
    /* The expiration date is displayed in UTC. 
    aos_str_set(&rule_content_date->date, "2023-10-11T00:00:00.000Z");
    aos_list_add_tail(&rule_content_date->node, &lifecycle_rule_list);
    /* Configure the lifecycle rule. */
    resp_status = oss_put_bucket_lifecycle(oss_client_options, &bucket, &lifecycle_rule_list, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put bucket lifecycle succeeded\n");
    } else {
        printf("put bucket lifecycle failed, code:%d, error_code:%s, error_msg:%s, request_id:%s\n",
            resp_status->code, resp_status->error_code, resp_status->error_msg, resp_status->req_id);
    }
    /* Release the memory pool to release the memory resources allocated for the request. */
    aos_pool_destroy(pool);
    /* Release the allocated global resources. */
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Specify the bucket name. 
bucket = client.get_bucket('examplebucket')
# Configure lifecycle rules. 
bucket.lifecycle = [
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule1', :enable => true, :prefix => 'foo/', :expiry => 3),
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule2', :enable => false, :prefix => 'bar/', :expiry => Date.new(2016, 1, 1))
]

ossutilの使用

ossutilを使用してライフサイクルルールを設定できます。 詳細については、「ライフサイクルルールの作成または変更」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketLifecycle」をご参照ください。

よくある質問

StorageClass ArchiveのTransitionアクションのSet bucket lifecycleエラー、InvalidArgument、DaysがStorageClass IAのTransitionアクションよりも多くなければならない場合エラーメッセージが報告されますか?

ストレージクラス変換のストレージ期間要件が満たされていないため、エラーメッセージが表示されます。 オブジェクトのストレージクラスをIA、Archive、Cold Archive、およびDeep Cold Archiveに変換するライフサイクルルールを設定する場合、各ストレージクラスのストレージ期間は次の要件を満たす必要があります。

IAに変換するためのストレージ期間 <アーカイブに変換するためのストレージ期間 <コールドアーカイブに変換するためのストレージ期間 <ディープコールドアーカイブに変換するためのストレージ期間

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

バケットのライフサイクルルールは、ルールが作成される前に存在するオブジェクトと、ルールが作成された後に作成されるオブジェクトに適用されます。 たとえば、2023 10月7日に、最後に変更されてから30日後にオブジェクトを削除するライフサイクルルールを設定しました。 10月5日2023にアップロードされたオブジェクトは、2023年11月6日に削除されます。 10月8日2023にアップロードされたオブジェクトは、2023年11月9日に削除されます。

バケットの1つ以上のライフサイクルルールで設定項目を変更するにはどうすればよいですか。

たとえば、バケットにはRule1とRule2の2つのライフサイクルルールがあります。 Rule1の設定項目を変更するには、次の手順を実行します。

  1. GetBucketLifecycle操作を呼び出して、バケットに設定されているすべてのライフサイクルルールを照会します。 操作はライフサイクルルールRule1とRule2を返します。

  2. Rule1で目的の構成アイテムを変更します。

  3. PutBucketLifecycle操作を呼び出して、バケットのRule1とRule2を設定します。

バケットに設定されている1つ以上のライフサイクルルールを削除するにはどうすればよいですか。

DeleteBucketLifecycle操作を呼び出すと、バケットに設定されているすべてのライフサイクルルールが削除されます。 たとえば、バケットにはRule1とRule2の2つのライフサイクルルールがあります。 バケットに設定されているすべてのライフサイクルルールを削除するには、DeleteBucketLifecycle操作を呼び出します。 Rule1のみを削除するには、次の手順を実行します。

  1. GetBucketLifecycle操作を呼び出して、バケットに設定されているすべてのライフサイクルルールを照会します。 操作はライフサイクルルールRule1とRule2を返します。

  2. Rule1を削除します。

  3. PutBucketLifecycle操作を呼び出して、バケットのRule2を設定します。

オブジェクトのストレージクラスが変換されたとき、またはライフサイクルルールに基づいて期限切れのオブジェクトが削除されたときに、OSSはログを生成しますか?

はい。ライフサイクルルールに基づいて、オブジェクトのストレージクラスが変換されるか、期限切れのオブジェクトが削除されると、OSSはログを生成します。 ログには、次のフィールドが含まれます。

  • 操作

    • CommitTransition: IA、Archive、Cold Archiveなどに変換されるストレージクラスを示します。

    • ExpireObject: ライフサイクルルールに基づいて削除された期限切れのオブジェクトを示します。

  • Sync Request

    lifecycle: ライフサイクルルールによってトリガーされるストレージクラスの変換またはオブジェクトの削除アクションを示します。

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

オブジェクト削除マーカーを削除し、現在のオブジェクトバージョンを削除するライフサイクルルールを作成できますか?

いいえ、オブジェクト削除マーカーを削除し、現在のオブジェクトバージョンを削除するライフサイクルルールを作成することはできません。 ライフサイクルルールを作成して、削除マーカーを削除できます。 削除マーカーを削除した後、ライフサイクルルールを作成して、現在のバージョンのオブジェクトを削除できます。

オブジェクトの最後に変更された時間に基づいて、オブジェクトのストレージクラスをIAから標準に変換するライフサイクルルールを作成できますか?

いいえ、オブジェクトのストレージクラスをIAからStandardに変換するライフサイクルルールを作成することはできません。 次のいずれかのメソッドを使用して、オブジェクトのストレージクラスをIAからStandardに変換できます。

  • CopyObject操作の呼び出し

    CopyObject操作を呼び出して、オブジェクトのストレージクラスをIAからStandardに変換できます。

  • ossutil の使用

    ossutil set-metaコマンドでX-Oss-Storage-Classオプションを指定すると、1つ以上のオブジェクトのストレージクラスをIAからStandardに変換できます。 詳細については、「オブジェクトメタデータの設定または更新」をご参照ください。

関連ドキュメント

  • デフォルトでは、OSSはオブジェクトのアップロード時刻をオブジェクトの最終変更時刻として使用します。 特定の操作は、オブジェクトの最終変更時刻を更新します。 ただし、ライフサイクルルールに基づくストレージクラスの変換では、最終変更時刻は更新されません。 OSSオブジェクトのLastModified属性に影響する操作のリストについては、OSSオブジェクトのLastModified属性に影響を与える操作は何ですか。

  • IA、Archive、Cold Archive、またはDeep Cold Archiveオブジェクトのストレージクラスを変換し、最小ストレージ期間が終了する前にオブジェクトを削除した場合、最小ストレージ期間全体に対して課金されます。 詳細については、「ストレージ期間が最小ストレージ期間より短いオブジェクトに対して、どのように課金されますか? 」をご参照ください。

  • ライフサイクルルールを使用すると、バケット内の特定のプレフィックスを名前に含むすべてのオブジェクトまたはオブジェクトのストレージクラスを変換したり、そのようなオブジェクトを削除したりできます。 名前に特定の拡張子が含まれているオブジェクトを削除するには、ossutilでrmコマンドを実行します。 詳細は、「rm」をご参照ください。

  • OSSがデータアクセスパターンに基づいてホットデータとコールドデータを識別し、コールドデータをより費用対効果の高いストレージクラスに自動的に移動する場合は、最終アクセス時間に基づいてライフサイクルルールを設定できます。 詳細については、「最終アクセス時間に基づくライフサイクルルール」をご参照ください。

  • バケット内のすべてのオブジェクトのストレージクラスを照会する方法の詳細については、「オブジェクトのリスト」をご参照ください。