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

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

最終更新日:Nov 22, 2025

Object Storage Service (OSS) にアップロードされたすべてのデータが頻繁にアクセスされるわけではありません。一部のデータは、コンプライアンスやアーカイブの目的で保持する必要があります。また、不要になったバケット内のデータを削除したい場合もあります。最終更新時間に基づいてライフサイクルルールを設定できます。これらのルールは、オブジェクトを定期的にコールドなストレージクラスに移行したり、オブジェクトを削除したりして、ストレージコストを削減します。

シナリオ

  • 医療機関の記録は、OSS にアップロードされてから 6 か月以内に時々アクセスされます。6 か月が経過すると、ほとんどアクセスされなくなります。アップロード後 180 日で医療記録をアーカイブストレージに移行するライフサイクルルールを設定できます。

  • ある会社のコールセンターの録音は、OSS にアップロードされてから 2 か月以内にデータ分析と検証に使用されます。2 か月後には時々アクセスされます。6 か月後にはほとんどアクセスされません。2 年後にはデータは不要になります。60 日後に録音を低頻度アクセス (IA) に、180 日後にアーカイブストレージに移行し、730 日後に削除するライフサイクルルールを設定できます。

  • バケット内の多数のファイルを削除するには、バケット全体に一致するライフサイクルルールを設定して、1 日後にすべてのファイルを削除できます。

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

制限事項

一致条件

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

フラグメントの有効期限切れに関する制限

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

  • 例 1

    バケットにパートポリシーを含むライフサイクルルールを設定した場合、そのバケット内のどのオブジェクトに対してもパートポリシーを含む別のライフサイクルルールを設定することはできません。

  • 例 2

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

ストレージクラスの移行に関する制限

注意事項

ルール数

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

上書きセマンティクス

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

  1. Rule1 を取得できます。

  2. 設定に Rule2 を追加します。

  3. 更新されたルールは Rule 1 と Rule 2 を組み合わせたものになります。

有効時間

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

ライフサイクルルールが特定の日数の後にアクションを指定する場合、時間はオブジェクトの最終更新時間から計算されます。アクションは 08:00 (UTC + 08:00) に実行されます。たとえば、ルールがオブジェクトが最後に変更されてから 1 日後に削除されることを指定している場合、2020 年 7 月 20 日に最後に変更されたオブジェクトの削除時間は次のようになります:

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

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

ライフサイクルルールを更新すると、当日のライフサイクルタスクが中止される場合があります。ライフサイクルルールを頻繁に更新しないでください。

完了時間

  • ルールが有効になると、オブジェクトの削除、ストレージクラスの変換、期限切れパートの削除などのライフサイクル関連の操作は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深圳)、およびシンガポールリージョンでは最大 10 億オブジェクトに対して通常 24 時間以内に完了します。他のリージョンでは、これらの操作は最大 1 億オブジェクトに対して通常 24 時間以内に完了します。

  • スキャンされるオブジェクトが多い、ライフサイクルルールによって処理されるオブジェクトが多い、使用されるタグが多い、オブジェクトに多くの履歴バージョンがある、またはライフサイクルタスクの実行中に多くの新しいオブジェクトが書き込まれる場合、タスクの完了に 24 時間以上、場合によっては数日から数週間かかることがあります。

    説明

    バケットでバージョン管理が有効になっている場合、オブジェクトの各バージョンに対する操作は 1 つの操作として記録されます。

課金の説明

ライフサイクルルールを使用してオブジェクトのストレージクラスを移行したり、オブジェクトを削除したりする際に発生する可能性のあるストレージおよびリクエスト料金の詳細については、「ライフサイクルルール関連の料金」をご参照ください。

OSS-HDFS が有効なバケットのライフサイクルルールを設定する

  • OSS-HDFS が有効なバケット内の OSS ファイルに基づいてライフサイクルルールを設定する

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

    p571593..jpeg

  • OSS-HDFS が有効なバケット内の HDFS ファイルに基づいてライフサイクルルールを設定する

    頻繁にアクセスされるデータを標準オブジェクトとして保存し、あまりアクセスされないデータを低頻度アクセス、アーカイブ、またはコールドアーカイブオブジェクトとして保存するには、ライフサイクルルールに基づく階層型ストレージ機能を使用できます。詳細については、「階層型ストレージを使用する」をご参照ください。

構成要素

一致要素

  • プレフィックスで一致: 指定されたプレフィックスでオブジェクトとフラグメントを一致させます。複数のルールを作成して、異なるプレフィックスに一致させることができます。プレフィックスは重複できません。プレフィックスの命名規則はオブジェクトと同じです。詳細については、「オブジェクト」をご参照ください。

  • タグで一致: 指定されたタグキーと値でオブジェクトを一致させます。1 つのルールに複数のタグを設定できます。ライフサイクルルールは、オブジェクトが指定されたすべてのタグを含む場合にのみ実行されます。

    ライフサイクルルールで設定されたタグ

    オブジェクトのタグ

    ライフサイクルルールはオブジェクトに適用されますか?

    a:1,b:2

    a:1

    いいえ

    a:1,b:3

    いいえ

    a:1,b:2

    はい

    a;1,b:2,c:3

    はい

    説明

    タグベースの一致ルールはフラグメントには適用されません。

  • プレフィックスとタグで一致: 指定されたプレフィックスとタグフィルターに基づいてオブジェクトを一致させます。

  • バケット全体に適用: バケット全体のすべてのオブジェクトとフラグメントに一致します。

  • NOT 要素: ライフサイクルルールでプレフィックスとタグに一致するオブジェクトを処理し、他のオブジェクトをスキップしたい場合は、NOT 要素を使用してスキップするオブジェクトのプレフィックスとタグを指定できます。NOT 要素の設定例については、「NOT の例」をご参照ください。

    重要
    • ライフサイクルルールは複数の NOT 要素をサポートするようになりました。この機能は招待プレビュー中であり、すべてのユーザーが利用できるわけではありません。この機能を使用するには、テクニカルサポートにお問い合わせください。

    • 1 つのバケット内の NOT 要素の総数は 1,000 を超えることはできません。1 つのルール内の NOT 要素の数は 100 を超えることはできません。すべてのルール内の Prefix 要素の総数は 2,000 を超えることはできません。

    • 複数の NOT 要素を使用した後は、コンソールで後続のライフサイクルルール操作を管理してください。

オブジェクトの有効期限とアクション

  • 日数による有効期限切れ: 日数 N と、期限切れのオブジェクトに対して実行するアクションを指定します。これは、バージョン管理されていないバケット内のすべてのオブジェクトと、バージョン管理されているバケット内の現行バージョンのオブジェクトに適用されます。オブジェクトは最終更新時間から N 日後に期限切れになり、指定されたアクションが実行されます。

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

  • 非現行バージョンになってからの日数: 日数 N と、期限切れの非現行バージョンのオブジェクトに対して実行するアクションを指定します。オブジェクトは非現行バージョンになってから N 日後に期限切れになり、指定されたアクションが実行されます。

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

フラグメントの有効期限とアクション

  • 日数による有効期限切れ: 日数 N を指定できます。ファイルフラグメントは最終更新時間から N 日後に削除されます。

  • 特定の日付での有効期限切れ: 有効期限日を指定します。この日付より前に最終更新されたすべてのファイルフラグメントは削除されます。

ルールの説明

異なるプレフィックス

たとえば、バケットには次のオブジェクトが含まれています:

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

ライフサイクルルールがプレフィックス `logs/` を指定する場合、`logs/` で始まるオブジェクトにのみ適用されます。プレフィックスが `doc/readme.txt` の場合、ルールは `doc/readme.txt` にのみ適用されます。

説明

ライフサイクルルールに中国語のプレフィックスを指定できます。

有効期限ポリシーに一致するオブジェクトに対して GET または HEAD 操作を実行すると、OSS は応答に x-oss-expiration ヘッダーを追加します。expiry-date はオブジェクトの有効期限日を示します。rule-id は一致するルールの ID を示します。

同じプレフィックスとタグ

同じプレフィックスとタグを持つオブジェクトに異なるライフサイクルルールが適用される場合、削除アクションはストレージクラスの移行アクションよりも優先されます。次の例では、rule1 はプレフィックスが `abc` でタグが `a=1` のすべてのオブジェクトを 20 日後に削除するように指定しています。Rule2 は有効になりません。

ルール

プレフィックス

タグ

アクション

rule1

abc

a=1

20 日後に削除

rule2

abc

a=1

20 日後にアーカイブに移行

重複するプレフィックスと同じタグ

次の例では、rule1 はタグ `a=1` を持つすべてのオブジェクトを 10 日後に低頻度アクセス (IA) に移行するように指定しています。Rule2 は、プレフィックスが `abc` でタグが `a=1` のオブジェクトを 120 日後に削除するように指定しています。

ルール

プレフィックス

タグ

アクション

rule1

-

a=1

10 日後に IA に移行

rule2

abc

a=1

120 日後に削除

次の例では、rule3 はタグ `a=1` を持つすべてのオブジェクトを 20 日後にアーカイブに移行するように指定しています。アーカイブオブジェクトは IA に移行できないため、プレフィックスが `abc` でタグが `a=1` のオブジェクトを 30 日後に IA に移行するように指定する rule4 は有効になりません。

ルール

プレフィックス

タグ

アクション

rule3

-

a=1

20 日後にアーカイブに移行

rule4

abc

a=1

30 日後に IA に移行

NOT

同じバケットに複数のライフサイクルルールを設定し、そのうちの 1 つのルールに NOT 要素が含まれている場合、NOT 要素で指定された動作はその特定のルールにのみ適用されます。以下の例で詳細を説明します:

  • 例 1

    • ライフサイクルルール 1 は、`examplebucket` 内のプレフィックス `dir/` を持つオブジェクトを 100 日後に削除するように指定します。

    • ライフサイクルルール 2 は、NOT 要素を使用して、`examplebucket` 内のプレフィックス `dir/` を持つオブジェクトを除くすべてのオブジェクトを 50 日後に削除するように指定します。

    ライフサイクルルールが有効になった時点から、`examplebucket` 内のオブジェクトの削除動作は次のようになります:

    オブジェクト

    削除動作

    プレフィックス `dir/` を持つオブジェクト

    100 日後に削除

    プレフィックス `dir/` を持たないオブジェクト

    50 日後に削除

  • 例 2

    • ライフサイクルルール 1 は、NOT 要素を使用して、`examplebucket` 内のタグ `key1:value1` を持つオブジェクトを除くすべてのオブジェクトを 30 日後に削除するように指定します。

    • ライフサイクルルール 2 は、`examplebucket` 内のタグ `key2:value2` を持つすべてのオブジェクトを 50 日後に削除するように指定します。

    ライフサイクルルールが有効になった時点から、`examplebucket` 内のオブジェクトの削除動作は次のようになります:

    オブジェクト

    削除動作

    上記のタグを持たないすべてのオブジェクト

    30 日後に削除

    タグ `key1:value1` のみを持つオブジェクト

    削除されない

    タグ `key2:value2` のみを持つオブジェクト

    30 日後に削除

    タグ `key1:value1` と `key2:value2` の両方を持つオブジェクト

    50 日後に削除

方法

OSS コンソールを使用する

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

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

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

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

    説明

    最終更新時間に基づいてライフサイクルルールを作成するだけでよい場合は、ライフサイクル ページの [アクセス追跡を有効にする] スイッチをオンにする必要はありません。アクセス追跡を有効にすると、追加料金が発生します。アクセス追跡は、最終アクセス時間に基づいてライフサイクルルールを作成するために使用されます。詳細については、「最終アクセス時間に基づくライフサイクルルール」をご参照ください。

  5. [ライフサイクルルールの作成] パネルで、次の表の説明に従ってライフサイクルルールを設定します。

    • バケットでバージョン管理が無効になっている

      エリア

      設定項目

      説明

      基本設定

      ステータス

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

      • ライフサイクルルールを有効にすると、ルールに従ってデータストレージクラスが移行されるか、データが削除されます。

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

      ポリシー

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

      説明

      [プレフィックスで一致] を選択した場合は、プレフィックスの完全なパスを入力する必要があります。たとえば、ルールを `src/dir1` の下のすべてのファイルにのみ適用する場合は、プレフィックスを `src/dir1` に設定します。プレフィックスを `dir1` に設定すると、ルールは意図したとおりに有効になりません。

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

      デフォルトでは、OSS は異なるライフサイクルルールのプレフィックスが重複しているかどうかをチェックします。たとえば、重複するプレフィックスを持つ次の 2 つのライフサイクルルールを設定します:

      • ルール 1

        バケット内のプレフィックス dir1/ を持つすべてのオブジェクトを、最終更新時間から 180 日後に削除するように指定します。

      • ルール 2

        バケット内のプレフィックス dir1/dir2/ を持つすべてのオブジェクトを、最終更新時間から 30 日後に低頻度アクセスストレージクラスに移行し、60 日後に削除するように指定します。

      ルール 2 の設定時にこのオプションを選択しない場合、システムは dir1/dir2/ ディレクトリ内のオブジェクトが 2 つの削除ルールに一致することを検出します。その結果、ルール 2 を設定できず、エラーメッセージ Overlap for same action type Expiration. が報告されます。

      ルール 2 の設定時にこのオプションを選択した場合、dir1/dir2/ の下のオブジェクトは 30 日後に低頻度アクセスストレージクラスに移行され、60 日後に削除されます。dir1/ の下の他のオブジェクトは 180 日後に削除されます。

      説明

      複数のルールを設定し、そのうちの 1 つがバケット全体に適用される場合、それは重複プレフィックスのケースと見なされます。

      接頭辞

      ルールが一致するべきオブジェクト名のプレフィックスを入力します。

      • プレフィックスを img に設定すると、ルールは `imgtest.png` や `img/example.jpg` など、名前が `img` で始まるすべてのオブジェクトに一致します。

      • プレフィックスを img/ に設定すると、ルールは `img/example.jpg` や `img/test.jpg` など、名前が `img/` で始まるすべてのオブジェクトに一致します。

      タグ

      ライフサイクルルールは、指定されたタグを持つオブジェクトにのみ適用されます。

      • プレフィックスを設定せず、キーが `a` で値が `1` のタグを設定した場合、ルールはバケット内のタグ `a=1` を持つすべてのオブジェクトに一致します。

      • プレフィックスを `img` に設定し、キーが `a` で値が `1` のタグも設定した場合、ルールはバケット内の名前が `img` で始まり、タグ `a=1` を持つすべてのオブジェクトに一致します。

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

      NOT

      NOT オプションは、ライフサイクルルールが指定されたプレフィックスとタグを持つオブジェクトに適用されないようにするために使用されます。

      重要
      • NOT オプションを有効にする場合は、少なくともプレフィックスまたはタグを指定する必要があります。プレフィックスとタグの両方、またはプレフィックスまたはタグのみを指定できます。

      • NOT セマンティクスで定義されたタグのキーは、タグ 設定項目で定義されたキーと同じにすることはできません。

      • NOT オプションを有効にした後、フラグメントの有効期限ポリシーを設定することはできません。

      ファイルサイズ

      ライフサイクルルールを適用するファイルサイズを指定します。

      • 最小サイズ: ライフサイクルルールは、この値より大きいファイルに適用されます。値は 0 B より大きく、5 TB 未満でなければなりません。

      • 最大サイズ: ライフサイクルルールは、この値より小さいファイルに適用されます。値は 0 B より大きく、5 TB 以下でなければなりません。

      重要

      同じライフサイクルルールで最小ファイルサイズと最大ファイルサイズの両方を指定する場合:

      • 最大ファイルサイズが最小ファイルサイズより大きいことを確認してください。

      • フラグメント実行ポリシーを設定することはできません。

      • 削除マーカーをクリアするポリシーを設定することはできません。

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

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

      オブジェクトの有効期限ポリシーを選択します。[日数を指定][日付を指定]、または 有効になっていません を選択できます。有効になっていません を選択した場合、ファイルの有効期限ポリシーは有効になりません。

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

      オブジェクトのストレージクラスを移行したり、期限切れのオブジェクトを削除したりするルールを設定します。[低頻度アクセス][アーカイブストレージ][コールドアーカイブストレージ][ディープコールドアーカイブストレージ]、および [データの削除] を選択できます。

      たとえば、オブジェクトのライフサイクル[日付を指定] に設定し、日付を 2023 年 9 月 24 日に設定した場合、2023 年 9 月 24 日より前に最終更新されたオブジェクトは自動的に削除され、回復できません。

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

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

      フラグメント実行ポリシーを設定します。タグ チェックボックスを選択している場合、このオプションは設定できません。フラグメントの有効期限ポリシーを [日数を指定] または [日付を指定] で実行するか、フラグメントの有効期限ポリシーに 有効になっていません を選択できます。有効になっていません を選択した場合、フラグメントの有効期限ポリシーは有効になりません。

      重要

      ライフサイクルルールには、少なくともファイルの有効期限ポリシーまたはフラグメントの有効期限ポリシーが含まれている必要があります。

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

      フラグメントの有効期限ポリシーで選択した日数または日付に基づいて、フラグメントがいつ期限切れになるかを設定します。期限切れのフラグメントは自動的に削除され、回復できません。

    • バケットでバージョン管理が有効になっている

      基本設定 および フラグメントに対するポリシー エリアの設定項目は、バージョン管理が無効になっているバケットの場合と同じ方法で設定されます。次の表では、バージョン管理が有効になっている場合の設定項目の違いのみを説明します。

      重要

      ライフサイクルルールを設定する前に、次の点に注意してください: バケットでバージョン管理が有効になっており、クロスリージョンレプリケーションの宛先として機能する場合、ソースバケットから同期された削除マーカーは、宛先バケット内の同名のオブジェクトを現在のバージョンから以前のバージョンに変更します。したがって、意図しないデータ削除を避けるために、以前のバージョンのクリーンアップルールを設定する際には注意が必要です。

      エリア

      設定項目

      説明

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

      オブジェクト削除マーカーのクリーンアップ

      バージョン管理を有効にすると、クリーンアップポリシーに [オブジェクト削除マーカーのクリーンアップ] オプションが追加されます。その他のオプションは、バージョン管理が無効になっている場合と同じです。

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

      重要

      このルールは、以前のバージョンが存在する場合、オブジェクトの削除マーカーをクリーンアップしません。したがって、オブジェクトの削除マーカーと不要な以前のバージョンを速やかにクリーンアップしてください。そうしないと、バケットにあまりにも多くの削除マーカーを保存すると、List のパフォーマンスが低下する可能性があります。

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

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

      以前のバージョンのファイルの有効期限ポリシーを設定します。[日数を指定] または 有効になっていません を選択できます。有効になっていません を選択した場合、ファイルの有効期限ポリシーは有効になりません。

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

      N 日の有効期限を設定します。以前のバージョンのオブジェクトは、以前のバージョンになってから N 日後に期限切れになり、翌日に指定されたアクションが実行されます。たとえば、期間を 30 日に設定した場合、2023 年 9 月 1 日に以前のバージョンになったオブジェクトは、2023 年 10 月 1 日に指定されたストレージクラスに移行されるか、削除されます。

      重要

      オブジェクトがいつ以前のバージョンになったかは、オブジェクトの次のバージョンの最終更新時間を確認することで判断できます。

  6. OK をクリックします。

    ライフサイクルルールが保存されると、設定されたルールをポリシーリストで表示できます。

Alibaba Cloud SDK を使用する

以下のセクションでは、一般的な SDK を使用してライフサイクルルールを設定するためのコード例を示します。他の SDK を使用したコード例については、「SDK」をご参照ください。

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
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 {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際の エンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // SetBucketLifecycleRequest を使用してリクエストを作成します。
            SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);

            // ライフサイクルルールの ID を指定します。
            String ruleId0 = "rule0";
            // ライフサイクルルールに一致させたいプレフィックスを指定します。
            String matchPrefix0 = "A0/";
            // ライフサイクルルールに一致させたいタグを指定します。
            Map<String, String> matchTags0 = new HashMap<String, String>();
            // タグのキーと値を指定します。この例では、キーは owner に、値は 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/";

            // 有効期限を最終更新後 3 日に設定します。
            LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
            rule.setTags(matchTags0);
            request.AddLifecycleRule(rule);

            // 指定された日付より前に作成されたオブジェクトが期限切れになるように指定します。
            rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
            rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setTags(matchTags1);
            request.AddLifecycleRule(rule);

            // パートが最終更新後 3 日で期限切れになるように指定します。
            rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setExpirationDays(3);
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // 特定の日付より前に作成されたパートが期限切れになるように指定します。
            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);

            // オブジェクトのストレージクラスが最終更新後 10 日で IA に、最終更新後 30 日でアーカイブに変更されるように指定します。
            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);

            // 2022 年 10 月 12 日より前に最終更新されたオブジェクトのストレージクラスがアーカイブに変更されるように指定します。
            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);

            // rule6 がバージョン管理が有効なバケット用に設定されていることを指定します。
            rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
            // オブジェクトのストレージクラスが最終更新後 365 日でアーカイブに変更されるように指定します。
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(365);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            // 期限切れの削除マーカーを自動的に削除するようにライフサイクルルールを設定します。
            rule.setExpiredDeleteMarker(true);
            // オブジェクトの以前のバージョンのストレージクラスが最終更新後 10 日で IA に変更されるように指定します。
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
            // オブジェクトの以前のバージョンのストレージクラスが最終更新後 20 日でアーカイブに変更されるように指定します。
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
            // オブジェクトの以前のバージョンが最終更新後 30 日で削除されるように指定します。
            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);

            // ライフサイクルルールを設定するリクエストを開始します。
            ossClient.setBucketLifecycle(request);

            // バケットに設定されているライフサイクルルールをクエリします。
            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

// 依存関係をロードするために autoload ファイルをインクルードします
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;

// コマンドラインパラメーターの説明を指定します
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (必須) バケットの名前を指定します。
];

// コマンドラインパラメーターを解析するための長いオプションのリストを生成します
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後にコロンを追加して、値が必要であることを示します
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します
$options = getopt("", $longopts); 

// 必須パラメーターが欠落しているかどうかを確認します
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 欠落している必須パラメーターをユーザーに促します
        exit(1); 
    }
}

// コマンドラインパラメーターの値を取得します
$region = $options["region"]; // バケットが配置されているリージョン
$bucket = $options["bucket"]; // バケットの名前

// 環境変数を使用して AccessKey ID と AccessKey Secret をロードします
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します
$cfg = Oss\Config::loadDefault();

// 認証情報プロバイダーを指定します
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSSClient インスタンスを作成します
$client = new Oss\Client($cfg);

// 名前に log/ プレフィックスを含むオブジェクトを 30 日後に IA ストレージクラスに変換するライフサイクルルールを定義します
$lifecycleRule = new Oss\Models\LifecycleRule(
    prefix: 'log/', // オブジェクトのプレフィックス
    transitions: array(
        new Oss\Models\LifecycleRuleTransition(
            days: 30, // 変換時間は 30 日
            storageClass: 'IA' // ターゲットストレージクラスは IA
        )
    ),
    id: 'rule', // ルールの ID
    status: 'Enabled' // ルールのステータスは有効
);

// ライフサイクル設定オブジェクトを作成し、ライフサイクルルールを追加します
$lifecycleConfiguration = new LifecycleConfiguration(
    rules: array($lifecycleRule)
);

// バケットのライフサイクルを設定するリクエストオブジェクトを作成し、ライフサイクル設定を渡します
$request = new Oss\Models\PutBucketLifecycleRequest(
    bucket: $bucket,
    lifecycleConfiguration: $lifecycleConfiguration
);

// putBucketLifecycle メソッドを呼び出して、バケットのライフサイクルルールを設定します
$result = $client->putBucketLifecycle($request);

// 返された結果を表示します
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP 応答ステータスコード
    'request id:' . $result->requestId . PHP_EOL // リクエストの一意の識別子
);

Node.js

const OSS = require('ali-oss')

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケットの名前を指定します。
  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: {
    // オブジェクトの現行バージョンが最終更新後 3 日で期限切れになるように指定します。
    days: 3 
  }
}
putBucketLifecycle(lifecycle1)

const lifecycle2 = {
  id: 'rule2',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // 指定された日付より前に作成されたオブジェクトが期限切れになるように指定します。
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle2)

const lifecycle3 = {
  id: 'rule3',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // パートが 3 日で期限切れになるように指定します。
    days: 3 
  },
}
putBucketLifecycle(lifecycle3)

const lifecycle4 = {
  id: 'rule4',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // 指定された日付より前に作成されたパートが期限切れになるように指定します。
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle4)

const lifecycle5 = {
  id: 'rule5',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    // オブジェクトの現行バージョンのストレージクラスが最終更新後 20 日でアーカイブに変更されるように指定します。
    days: 20,
    storageClass: 'Archive'
  },
  expiration: {
    // オブジェクトの現行バージョンが最終更新後 21 日で期限切れになるように指定します。
    days: 21 
  },
}
putBucketLifecycle(lifecycle5)

const lifecycle6 = {
  id: 'rule6',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    //指定された日付より前に作成されたオブジェクトのストレージクラスがアーカイブに変更されるように指定します。
    createdBeforeDate: '2023-02-19T00:00:00.000Z', 
    storageClass: 'Archive'
  },
  expiration: {
    // 指定された日付より前に作成されたオブジェクトが削除されるように指定します。
    createdBeforeDate: '2023-01-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle6)

const lifecycle7 = {
  id: 'rule7',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // 削除マーカーが期限切れになると自動的に削除されるように指定します。
    expiredObjectDeleteMarker: true 
  }
}
putBucketLifecycle(lifecycle7)

const lifecycle8 = {
  id: 'rule8',
  status: 'Enabled',
  prefix: 'foo/', 
  // オブジェクトの以前のバージョンのストレージクラスが最終更新後 10 日で IA に変更されるように指定します。
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  }
}
putBucketLifecycle(lifecycle8)

const lifecycle9 = {
  id: 'rule9',
  status: 'Enabled',
  prefix: 'foo/', 
  // オブジェクトの以前のバージョンのストレージクラスが最終更新後 10 日で IA に変更されるように指定します。
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  },
  // ルールに一致させたいオブジェクトのタグを指定します。
  tag: [{
    key: 'key1',
    value: 'value1'
  },
   {
     key: 'key2',
     value: 'value2'
   }]
}
putBucketLifecycle(lifecycle9)

Python

import argparse
import datetime
import alibabacloud_oss_v2 as oss

# ユーザーが入力したパラメーターを受け取るためのコマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")

# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)

# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # 環境変数から認証情報 (AccessKey ID と AccessKey Secret) をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードします。
    cfg = oss.config.load_default()

    # 認証情報プロバイダーを設定します。
    cfg.credentials_provider = credentials_provider

    # バケットが配置されているリージョンを設定します。
    cfg.region = args.region

    # ユーザーによってカスタムエンドポイントが提供された場合は、設定でそれを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 設定オブジェクトを使用して OSS クライアントを初期化します。
    client = oss.Client(cfg)

    result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
            bucket=args.bucket,
            lifecycle_configuration=oss.LifecycleConfiguration(
                rules=[oss.LifecycleRule(
                    # ライフサイクルルール rule1 を指定します。このルールでは、プレフィックス foo/ とタグ k1:v1 を持つオブジェクトは、最終更新後 30 日で低頻度アクセス (IA) ストレージクラスに変換されます。
                    id='rule1',
                    status='Enabled',
                    prefix='foo/',
                    transitions=[oss.LifecycleRuleTransition(
                        days=30,
                        storage_class=oss.StorageClassType.IA,
                        is_access_time=False, # false に設定します。これは、ポリシーが最終更新時間に基づいていることを示します。
                    )],
                    tags=[oss.Tag(
                        key='k1',
                        value='v1',
                    )],
                ), oss.LifecycleRule(
                    # ライフサイクルルール rule2 を指定します。このルールでは、プレフィックス dir/ を持つオブジェクトについて、バージョン管理が有効なバケットにあり、削除マーカーのみを持つ場合、削除マーカーは自動的に削除されます。非現行バージョンのオブジェクトは 30 日後に期限切れになり、削除されます。非現行バージョンのオブジェクトは 10 日後に IA ストレージクラスに変換されます。
                    id='rule2',
                    status='Enabled',
                    prefix='dir/',
                    expiration=oss.LifecycleRuleExpiration(
                        days=10,
                        expired_object_delete_marker=True
                    ),
                    noncurrent_version_expiration=oss.NoncurrentVersionExpiration(
                        noncurrent_days=30,
                    ),
                    noncurrent_version_transition=oss.NoncurrentVersionTransition(
                        noncurrent_days=10,
                        storage_class=oss.StorageClassType.IA,
                        is_access_time=False, # false に設定します。これは、ポリシーが最終更新時間に基づいていることを示します。
                    ),
                )]
            ),
    ))

    # 操作のステータスコードとリクエスト ID を出力します。
    print(f'status code: {result.status_code}, '  # HTTP ステータスコード。リクエストが成功したかどうかを示します。
          f'request id: {result.request_id}')    # リクエスト ID。リクエストログの追跡とデバッグに使用されます。


if __name__ == "__main__":
    # プログラムのエントリポイント。main 関数を呼び出してロジックを実行します。
    main()

C#

using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケット名を指定します。例: examplebucket。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";

// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();

// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;

// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
    // 最初のライフサイクルルールを作成します。
    LifecycleRule lcr1 = new LifecycleRule()
    {
        ID = "delete obsoleted files",
        Prefix = "obsoleted/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 3,
        Tags = new Tag[1]
    };
    // ルールのタグを指定します。
    var tag1 = new Tag
    {
        Key = "project",
        Value = "projectone"
    };

    lcr1.Tags[0] = tag1;

    // 2 番目のライフサイクルルールを作成します。
    LifecycleRule lcr2 = new LifecycleRule()
    {
        ID = "delete temporary files",
        Prefix = "temporary/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 20,
        Tags = new Tag[1]         
    };
    // ルールのタグを指定します。
    var tag2 = new Tag
    {
        Key = "user",
        Value = "jsmith"
    };
    lcr2.Tags[0] = tag2;

    // パートが最終更新後 30 日で期限切れになるように指定します。
    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]
    {
        // オブジェクトの以前のバージョンのストレージクラスが最終更新後 90 日で IA に変換されるように指定します。
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.IA,
            NoncurrentDays = 90
        },
        // オブジェクトの以前のバージョンのストレージクラスが最終更新後 180 日でアーカイブに変換されるように指定します。
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.Archive,
            NoncurrentDays = 180
        }
    };
    setBucketLifecycleRequest.AddLifecycleRule(lcr1);
    setBucketLifecycleRequest.AddLifecycleRule(lcr2);
    setBucketLifecycleRequest.AddLifecycleRule(lcr3);

    // ライフサイクルルールを設定します。
    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();
// ルール ID と、ルールに一致するオブジェクトの名前に含まれるプレフィックスを指定します。
rule1.setIdentifier("1");
rule1.setPrefix("A");
// ライフサイクルルールを実行するかどうかを指定します。このパラメーターが true に設定されている場合、OSS はこのルールを定期的に実行します。このパラメーターが false に設定されている場合、OSS はこのルールを無視します。
rule1.setStatus(true);
// オブジェクトが最終更新後 200 日で期限切れになるように指定します。
rule1.setDays("200");
// オブジェクトのストレージクラスが最終更新後 30 日でアーカイブに変換されるように指定します。
rule1.setArchiveDays("30");
// アップロードに失敗してから 3 日後にパートが期限切れになるように指定します。
rule1.setMultipartDays("3");
// オブジェクトのストレージクラスが最終更新後 15 日で低頻度アクセス (IA) に変換されるように指定します。
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();

C++

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

int main(void)
{
    /* OSS にアクセスするために使用するアカウントに関する情報を初期化します。*/
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケットの名前を指定します。例: examplebucket。*/
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    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");

    /* ルールに一致させたいオブジェクトのタグを指定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));

    /* ライフサイクルルールを指定します。*/
    auto rule1 = LifecycleRule();
    rule1.setID("rule1");
    rule1.setPrefix("test1/");
    rule1.setStatus(RuleStatus::Enabled);
    rule1.setExpiration(3);
    rule1.setTags(tagging.Tags());

    /* 有効期限日を指定します。*/
    auto rule2 = LifecycleRule();
    rule2.setID("rule2");
    rule2.setPrefix("test2/");
    rule2.setStatus(RuleStatus::Disabled);
    rule2.setExpiration(date);

    /* バケットでバージョン管理が有効になっている場合、rule3 がバケットで有効になるように指定します。*/
    auto rule3 = LifecycleRule();
    rule3.setID("rule3");
    rule3.setPrefix("test3/");
    rule3.setStatus(RuleStatus::Disabled);

    /* オブジェクトのストレージクラスが最終更新後 365 日でアーカイブに変更されるように指定します。*/  
    auto transition = LifeCycleTransition();  
    transition.Expiration().setDays(365);
    transition.setStorageClass(StorageClass::Archive);
    rule3.addTransition(transition);

    /* 期限切れの削除マーカーが自動的に削除されるように指定します。*/
    rule3.setExpiredObjectDeleteMarker(true);

    /* オブジェクトの以前のバージョンのストレージクラスが最終更新後 10 日で IA に変更されるように指定します。*/
    auto transition1 = LifeCycleTransition();  
    transition1.Expiration().setDays(10);
    transition1.setStorageClass(StorageClass::IA);

    /* オブジェクトの以前のバージョンのストレージクラスが最終更新後 20 日でアーカイブに変更されるように指定します。*/
    auto transition2 = LifeCycleTransition();  
    transition2.Expiration().setDays(20);
    transition2.setStorageClass(StorageClass::Archive);

    /* バージョンが更新されてから 30 日後に以前のバージョンが削除されるように指定します。*/
    auto expiration  = LifeCycleExpiration(30);
    rule3.setNoncurrentVersionExpiration(expiration);

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

    /* ライフサイクルルールを設定します。*/
    LifecycleRuleList list{rule1, rule2, rule3};
    request.setLifecycleRules(list);
    auto outcome = client.SetBucketLifecycle(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "SetBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。*/
    ShutdownSdk();
    return 0;
}

C

#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。例: examplebucket。*/
const char *bucket_name = "examplebucket";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* char* 文字列を使用して aos_string_t を初期化します。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    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"));
    // 2 つの追加パラメーターを指定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME を使用して OSS にアクセスするかどうかを指定します。値 0 は CNAME が使用されないことを示します。*/
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを指定します。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリを管理するためのメモリプールを作成します。aos_pool_t は apr_pool_t と同等です。メモリプールを作成するためのコードは APR ライブラリに含まれています。*/
    aos_pool_t *pool;
    /* メモリプールを作成します。2 番目のパラメーターの値は NULL です。これは、プールが他のメモリプールを継承しないことを示します。*/
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメーターには、エンドポイント、access_key_id、access_key_secret、is_cname、curl などのグローバル設定情報が含まれます。*/
    oss_request_options_t *oss_client_options;
    /* メモリプール内のメモリリソースをオプションに割り当てます。*/
    oss_client_options = oss_request_options_create(pool);
    /* oss_client_options を初期化します。*/
    init_options(oss_client_options);
    /* パラメーターを初期化します。*/
    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);
    /* 有効期間を指定します。*/
    oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_days->id, "rule-1");
    /* ルールに一致させたいオブジェクトの名前に含まれるプレフィックスを指定します。*/
    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);
    /* 有効期限日を指定します。*/
    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");
    /* 有効期限日は 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);
    /* ライフサイクルルールを設定します。*/
    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);
    }
    /* メモリプールを解放して、リクエストに割り当てられたメモリリソースを解放します。*/
    aos_pool_destroy(pool);
    /* 割り当てられたグローバルリソースを解放します。*/
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際の エンドポイントを指定してください。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します。
bucket = client.get_bucket('examplebucket')
# ライフサイクルルールを設定します。
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))
]

Go

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットのライフサイクルルールを設定するリクエストを作成します。
	request := &oss.PutBucketLifecycleRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		LifecycleConfiguration: &oss.LifecycleConfiguration{
			Rules: []oss.LifecycleRule{
				{
					// ライフサイクルルール rule1 を指定します。このルールでは、プレフィックス foo とタグキー k1、タグ値 v1 を持つファイルは、最終更新後 30 日で低頻度アクセスストレージクラスに変換されます。
					Status: oss.Ptr("Enabled"),
					ID:     oss.Ptr("rule1"),
					Prefix: oss.Ptr("foo/"),
					Transitions: []oss.LifecycleRuleTransition{
						{
							Days:         oss.Ptr(int32(30)),
							StorageClass: oss.StorageClassIA,
							IsAccessTime: oss.Ptr(false), // 値を false に設定します。ポリシーは最終更新時間に基づいています。
						},
					},
					Tags: []oss.Tag{
						{
							Key:   oss.Ptr("k1"),
							Value: oss.Ptr("v1"),
						},
					},
				},
				{
					// ライフサイクルルール rule2 を指定します。このルールでは、バージョン管理が有効なバケット内のプレフィックス dir を持つオブジェクトについて、オブジェクトに削除マーカーしかない場合、削除マーカーは自動的に削除されます。非現行バージョンのオブジェクトは 30 日後に期限切れになり、削除されます。非現行バージョンのオブジェクトは 10 日後に IA ストレージクラスに変換されます。
					ID:     oss.Ptr("rule2"),
					Prefix: oss.Ptr("dir/"),
					Status: oss.Ptr("Enabled"),
					Expiration: &oss.LifecycleRuleExpiration{
						Days:                      oss.Ptr(int32(10)),
						ExpiredObjectDeleteMarker: oss.Ptr(true),
					},
					NoncurrentVersionExpiration: &oss.NoncurrentVersionExpiration{
						NoncurrentDays: oss.Ptr(int32(30)),
					},
					NoncurrentVersionTransitions: []oss.NoncurrentVersionTransition{{
						NoncurrentDays: oss.Ptr(int32(10)),
						StorageClass:   oss.StorageClassIA,
						IsAccessTime:   oss.Ptr(false), // 値を false に設定します。ポリシーは最終更新時間に基づいています。
					}},
				},
			},
		},
	}

	// バケットのライフサイクルルールを設定します。
	result, err := client.PutBucketLifecycle(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket lifecycle %v", err)
	}

	// バケットのライフサイクルルールを設定した結果を出力します。
	log.Printf("put bucket lifecycle result:%#v\n", result)
}

ossutil コマンドラインツールを使用する

ossutil コマンドラインツールを使用してライフサイクルルールを設定できます。ossutil をインストールするには、「ossutil のインストール」をご参照ください。

次の例は、バケット examplebucket のライフサイクル情報を設定する方法を示しています。

ossutil api put-bucket-lifecycle --bucket examplebucket --lifecycle-configuration "{\"Rule\":{\"ID\":\"rule1\",\"Prefix\":\"tmp/\",\"Status\":\"Enabled\",\"Expiration\":{\"Days\":\"10\"},\"Transition\":{\"Days\":\"5\",\"StorageClass\":\"IA\"},\"AbortMultipartUpload\":{\"Days\":\"10\"}}}"

このコマンドの詳細については、「put-bucket-lifecycle」をご参照ください。

関連 API

上記の方法は API 操作に基づいています。プログラムに高度にカスタマイズされた要件がある場合は、直接 REST API リクエストを行うことができます。REST API リクエストを直接行うには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「PutBucketLifecycle」をご参照ください。

よくある質問

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

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

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

はい、適用されます。ライフサイクルルールは、ルールが設定される前にバケットにあった既存のオブジェクトと、ルールが設定された後にアップロードされた新しいオブジェクトの両方に適用されます。たとえば、10 月 7 日に 30 日後にオブジェクトを削除するルールを設定した場合、10 月 5 日にアップロードされたオブジェクトは 11 月 6 日に削除され、10 月 8 日にアップロードされたオブジェクトは 11 月 9 日に削除されます。

1 つ以上のライフサイクルルールを変更するにはどうすればよいですか?

バケットに Rule1 と Rule2 の 2 つのライフサイクルルールがあり、Rule1 の設定項目を変更したいとします。PutBucketLifecycle 操作はライフサイクル設定全体を上書きするため、次の手順を実行する必要があります:

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

  2. ローカル設定で、Rule1 の設定を変更します。

  3. 変更された Rule1 と変更されていない Rule2 を含む完全な設定で PutBucketLifecycle API を呼び出します。

1 つ以上のライフサイクルルールを削除するにはどうすればよいですか?

DeleteBucketLifecycle 操作は、バケットからすべてのライフサイクルルールを削除します。Rule1 と Rule2 を含むバケットから Rule1 などの特定のルールのみを削除したい場合は、次の手順を実行する必要があります:

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

  2. ローカル設定で、Rule1 を削除します。

  3. 残りの設定 (Rule2 のみ) で PutBucketLifecycle API を呼び出します。

ライフサイクルルールによって実行されるストレージクラスの移行とオブジェクトの有効期限切れはログに記録されますか?

はい、記録されます。ライフサイクルルールによって実行されたすべての成功したストレージクラスの移行と有効期限切れはログに記録されます。ログフィールドは次のとおりです:

  • 操作

    • CommitTransition: ストレージクラスを移行します。

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

  • Sync Request

    値は、ライフサイクルルールによってトリガーされる移行および削除操作の場合は lifecycle です。

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

削除マーカーをクリアし、同時に現行バージョンのオブジェクトを削除する単一のライフサイクルルールを作成できますか?

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

最終更新時間に基づくライフサイクルルールは、低頻度アクセスストレージクラスから標準ストレージクラスへのオブジェクトの移行をサポートしていますか?

いいえ、サポートしていません。次の方法で、低頻度アクセスストレージクラスから標準ストレージクラスにオブジェクトを移行できます:

  • CopyObject 操作の使用

    CopyObject API は、単一のオブジェクトを低頻度アクセスストレージクラスから標準ストレージクラスに移行することをサポートしています。

  • ossutil ツールの使用

    ossutil は、set-meta コマンドと X-Oss-Storage-Class オプションを使用して、1 つ以上のオブジェクトを低頻度アクセスストレージクラスから標準ストレージクラスに移行することをサポートしています。詳細については、「メタデータの設定または更新」をご参照ください。

リファレンス

  • デフォルトでは、OSS はオブジェクトの最終更新時間をアップロード時間に設定します。ライフサイクルルールを使用してファイルのストレージクラスを移行しても、オブジェクトの最終更新時間は更新されません。どの操作がオブジェクトの LastModified 時間を更新するかについての詳細については、「どの操作がオブジェクトの LastModified 時間を更新しますか?」をご参照ください。

  • 低頻度アクセス、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトが、最低限必要な保存期間よりも前に別のストレージクラスに移行されたり削除されたりした場合、不十分な保存期間に対する料金が請求されます。詳細については、「オブジェクトが最低限必要な保存期間よりも短く保存された場合、料金はどのように計算されますか?」をご参照ください。

  • ライフサイクルルールは、バケット全体またはプレフィックスに一致するデータのバッチ移行または削除のみをサポートします。特定のサフィックスを持つデータをバッチ削除したい場合は、ossutil rm コマンドを使用できます。

  • OSS にデータのアクセスパターンを自動的に監視させ、コールドデータを特定し、そのストレージクラスを移行してストレージコストを削減させたい場合は、最終アクセス時間に基づくライフサイクルルールを設定します。

  • バケット内のすべてのオブジェクトのストレージクラスを表示したい場合は、「オブジェクトのリスト」をご参照ください。