最終更新時刻に基づくライフサイクルルールは、オブジェクトをより低コストなストレージクラスに自動的に移行するか、または削除することで、ストレージコストを削減します。
ユースケース
医療機関が医療記録を OSS にアップロードします。記録は最初の 6 か月間は時折アクセスされますが、その後はほとんどアクセスされません。ライフサイクルルールにより、180 日後にアーカイブストレージに移行されます。
企業がホットラインの録音を OSS にアップロードします。録音は最初の 2 か月間は積極的に使用され、6 か月までは時折アクセスされ、2 年後には不要になります。ライフサイクルルールにより、60 日後に低頻度アクセスストレージに移行され、180 日後にアーカイブストレージに移行され、730 日後に削除されます。
バケット内のすべてのオブジェクトを削除するには、バケット全体に適用され、1 日後にオブジェクトを削除するライフサイクルルールを設定します。
これらの移行は OSS の ストレージクラス を使用します。
制限事項
マッチング条件
ライフサイクルルールは、プレフィックスとタグに基づくマッチングのみをサポートします。ワイルドカードマッチング、サフィックスマッチング、正規表現マッチングはサポートされていません。
部品の有効期限に関する制限
名前のプレフィックスが重複するオブジェクトに対して、フラグメントのライフサイクルポリシーを含むライフサイクルルールを 2 つ以上設定することはできません。例を示します。
例 1
バケットに対してフラグメントポリシーを含むライフサイクルルールを設定した場合、そのバケット内の任意のオブジェクトに対して、フラグメントポリシーを含む別のライフサイクルルールを設定することはできません。
例 2
バケット内の dir1 プレフィックスを含むオブジェクトに対してフラグメントポリシーを含むライフサイクルルールを設定した場合、dir1/dir2 など、プレフィックスが重複するオブジェクトに対して、フラグメントポリシーを含む別のライフサイクルルールを設定することはできません。
ストレージクラスの移行に関する制限
注意事項
ルール数の上限
1 つのバケットには最大 1,000 個のライフサイクルルールを設定できます。1 つのルールには、最終更新時刻と最終アクセス時刻の両方に基づくポリシーを含めることができます。
上書きセマンティクス
PutBucketLifecycle 操作は、バケットの既存のライフサイクルルール構成を上書きします。たとえば、バケットに Rule1 という名前のライフサイクルルールが設定されており、Rule2 という別のライフサイクルルールを設定したい場合は、次の操作を実行します。
Rule1 を取得します。
Rule1 と Rule2 を結合します。
結合したルール (Rule1+Rule2) を使用して構成を更新します。
有効時間
ライフサイクルルールを作成すると、コンソールのルール一覧にステータスとして Starting と表示されます。これは正常な状態であり、ステータスは Enabled に変わりません。ライフサイクルルールの実行には、削除件数、ログ、通知は提供されません。対象のオブジェクトがまだ存在するかどうかを確認することで、ルールが実行されたかどうかを確認できます。
OSS は、ライフサイクルルール作成後 24 時間以内にルールを読み込みます。ライフサイクルルールが読み込まれた後、OSS は毎日 UTC + 08:00 の 08:00:00 にルールを実行します。
日数ベースのルールの場合、オブジェクトの最終更新時刻とルールの実行開始時刻 (UTC + 08:00 の 08:00) の間に少なくとも 24 時間確保してください。たとえば、アップロードから 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) の間に削除されます。
ライフサイクルルールを更新すると、当日のライフサイクルタスクが中断される可能性があります。頻繁な更新は避けてください。
本番環境への適用前に検証する
本番バケットにライフサイクルルールを適用する前に、テストバケットでルールを設定および検証してください。期待どおりに動作することを確認した後で、本番バケットに適用します。検証せずに直接本番バケットにライフサイクルルールを設定すると、意図しないデータの削除が発生する可能性があります。
設定前にデータをバックアップする
ライフサイクルルールを設定する前に、重要なデータをバックアップしてください。同じリージョン内レプリケーション (SRR) またはクロスリージョンレプリケーション (CRR) を使用してデータをバックアップできます。
実行完了時間
-
ルールが有効になると、オブジェクトの削除、ストレージクラスの移行、マルチパートアップロードのフラグメントの有効期限切れなどのライフサイクル操作は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深セン)、およびシンガポールの各リージョンでは、最大 10 億個のオブジェクトについて通常 24 時間以内に完了します。その他のリージョンでは、最大 1 億個のオブジェクトについて通常 24 時間以内に完了します。
-
スキャン対象のオブジェクト数が多い場合、ライフサイクルルールが適用されるオブジェクト数が多い場合、タグ数が多い場合、単一のオブジェクトのバージョン数が多い場合、またはライフサイクルタスク実行中に大量の新しいオブジェクトが書き込まれている場合、実行に 24 時間以上、場合によっては数日または数週間かかることがあります。
説明バケットでバージョン管理が有効になっている場合、オブジェクトの各バージョンに対する操作は個別の操作としてカウントされます。
課金
ストレージクラスの移行および削除には、ストレージ料金およびリクエスト料金が発生します。ライフサイクル料金。
シナリオ固有の注意事項
レプリケーション後のソースデータの削除: データレプリケーションとライフサイクル操作は非同期です。レプリケーションには、レプリケートするデータ量や利用可能な帯域幅に応じて、数分、数時間、場合によっては数日かかることがあります。ソースバケットからレプリケートされたデータを削除するライフサイクルルールを設定する前に、データが送信先バケットにレプリケートされていることを確認してください。適切な有効期限を設定してください。そうしないと、ライフサイクルルールがレプリケーション完了前にソースデータを削除し、データ損失が発生する可能性があります。
OSS-HDFS バケット:
OSS ファイルのライフサイクルルール
OSS-HDFS が有効になっているバケット内のすべてのオブジェクトに一致する最終更新時刻に基づくライフサイクルルールを設定または変更するには、
.dlsdata/ディレクトリに保存されているオブジェクトを除外するために NOT 要素を使用します。これにより、OSS-HDFS データにライフサイクルルールによるオブジェクトの削除またはストレージクラスの変換が適用され、OSS-HDFS データの読み取りおよび書き込み操作に影響を与えることを防ぎます。HDFS ファイルのライフサイクルルール
頻繁にアクセスされるデータを標準ストレージに、アクセス頻度が低いデータを低頻度アクセス、アーカイブ、またはディープアーカイブストレージに階層化するには、ライフサイクルルールに基づく 階層型ストレージの使用 機能を使用します。
バージョン管理付きのライフサイクルルール: ライフサイクルによるストレージクラスの移行では、以前のバージョンは作成されません。
構成要素
フィルター条件
プレフィックスによるマッチング: 指定されたプレフィックスを持つオブジェクトおよびフラグメントに一致します。重複しない異なるプレフィックスを使用して複数のルールを作成できます。プレフィックスの命名は オブジェクト の命名規則に従います。
タグ によるマッチング: 指定されたキーと値のタグを持つオブジェクトに一致します。1 つのルールに複数のタグを設定できますが、そのルールは指定されたすべてのタグを含むオブジェクトにのみ適用されます。
ライフサイクルルールのタグ
オブジェクトのタグ
一致
a:1,b:2
a:1
No
a:1,b:3
No
a:1,b:2
Yes
a:1,b:2,c:3
Yes
説明タグに基づくルールはフラグメントには適用されません。
プレフィックスとタグによるマッチング: 指定されたプレフィックスとタグフィルターを持つオブジェクトに一致します。
バケット全体に適用: バケット内のすべてのオブジェクトおよびフラグメントに一致します。
NOT 要素: プレフィックスとタグに一致するはずの特定のオブジェクトをライフサイクルルールから除外します。除外するプレフィックスとタグを指定します。NOT 要素の例。
重要ライフサイクルルールには複数の NOT 要素を含めることができます。この機能は招待制プレビューです。テクニカルサポート までお問い合わせください。
1 つのバケットでは最大 1,000 個の NOT 要素をサポートします。1 つのルールでは最大 100 個の NOT 要素をサポートします。すべてのルールにわたるプレフィックス要素の合計数は 2,000 個に制限されています。
複数の NOT 要素を設定した後は、コンソールを使用してライフサイクルルールを管理してください。
複数の NOT 要素機能が有効になっていない場合、異なるサブディレクトリをそれぞれ除外する複数のルールを作成しないでください。異なるルールの NOT 要素は独立して動作します。たとえば、rule1 が dir/p1/ のみを除外している場合、dir/p2/ は引き続き rule1 に一致して削除されます。rule2 が dir/p2/ のみを除外している場合、dir/p1/ は引き続き rule2 に一致して削除されます。その結果、dir/ プレフィックスの下にあるすべてのファイルが削除されます。
オブジェクトの有効期限切れと操作
日数による有効期限切れ: 指定された操作は、オブジェクトの最終更新時刻から 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 内のオブジェクトは次のように削除されます。
オブジェクト
削除動作
タグ key1:value1 または key2:value2 を持たないオブジェクト
30 日後に削除
タグ key1:value1 のみを持つオブジェクト
削除されない
タグ key2:value2 のみを持つオブジェクト
30 日後に削除
タグ key1:value1 と key2:value2 の両方を持つオブジェクト
50 日後に削除
操作手順
OSS コンソール
OSS コンソール にログインします。
左側のナビゲーションウィンドウで バケット をクリックします。表示されたページで、対象のバケット名をクリックします。
左側のナビゲーションウィンドウで を選択します。
ライフサイクル ページで ルールの作成 をクリックします。
説明アクセス追跡の有効化 スイッチは、ライフサイクル ページにあり、最終更新時刻のみに基づくルールには不要です。これは、最終アクセス時刻に基づくライフサイクルルールにのみ適用され、追加料金が発生します。
ライフサイクルルールの作成 パネルで、次の表を使用してルールを設定します。
バケットでバージョン管理が無効の場合:
セクション
パラメーター
説明
基本設定
ステータス
ルールのステータス。有効な値は 開始 および Disable です。
有効にすると、OSS はルールに基づいてオブジェクトを移行または削除します。
無効にすると、ライフサイクルタスクは一時停止されます。
ポリシー
ルールの適用範囲。オブジェクトプレフィックス または バケット全体に適用 を選択します。
説明プレフィックス別を選択する場合、完全なプレフィックスを入力する必要があります。たとえば、
src/dir1/ディレクトリ内のすべてのオブジェクトにルールを適用するには、プレフィックスをsrc/dir1/に設定します。dir1のプレフィックスでは、これらのオブジェクトが意図したとおりに一致しません。プレフィックスはスラッシュ (/) またはバックスラッシュ (\) で始めることはできません。たとえば、/prodおよび/prod/は無効なプレフィックスです。prod/またはprodを代わりに使用してください。重複するプレフィックスを許可
デフォルトでは、OSS はライフサイクルルールのプレフィックスが重複していないかをチェックします。たとえば、プレフィックスが重複する次の 2 つのルールを設定するとします。
ルール 1
最終更新時刻から 180 日後にプレフィックス dir1/ を持つすべてのオブジェクトを削除します。
ルール 2
最終更新時刻から 30 日後にプレフィックス dir1/dir2/ を持つすべてのオブジェクトを低頻度アクセスストレージクラスに移行し、最終更新時刻から 60 日後に削除します。
ルール 2 を設定する際にこのオプションを選択しない場合、OSS は dir1/dir2/ ディレクトリ内のオブジェクトが 2 つの削除ルールに一致することを検出します。その結果、OSS はルール 2 を拒否し、Overlap for same action type Expiration. エラーを報告します。
ルール 2 の構成時にこのオプションを選択すると、dir1/dir2/ ディレクトリ内のオブジェクトは、最終更新時刻から 30 日後に低頻度アクセスストレージクラスにトランジションされ、最終更新時刻から 60 日後に削除されます。また、dir1/ ディレクトリ内のその他のオブジェクトは、最終更新時刻から 180 日後に削除されます。
説明複数のルールを設定し、そのうち 1 つがバケット全体に適用される場合、プレフィックスが重複するケースと見なされます。
最長プレフィックス一致: 複数のライフサイクルルールのプレフィックスに包含関係がある場合、OSS はオブジェクトキーとの最長一致プレフィックスを持つルールのみを適用します。OSS は、同じオブジェクトに複数の一致ルールを同時に適用せず、一致するプレフィックスが短いルールにフォールバックすることもありません。たとえば、次の 2 つのルールを設定するとします。ルール A はプレフィックス trace/ を使用し、オブジェクトを 30 日後に低頻度アクセス (IA) に移行します。ルール B はプレフィックス trace/archive/ を使用し、オブジェクトを 60 日後にアーカイブに移行します。キーが
trace/archive/file.txtのオブジェクトにはルール B のみが適用されます。キーがtrace/file.txtのオブジェクトにはルール A のみが適用されます。プレフィックスは動的変数をサポートしません: ライフサイクルルールのプレフィックスは正確な文字列マッチングのみをサポートし、動的変数はサポートしません。たとえば、プレフィックスを log// に設定すると、OSS はそれをリテラル文字列として扱います。キーが
log/2024/のオブジェクトはこのプレフィックスに一致しません。保存済みのライフサイクルルールを再度編集する場合、このスイッチはオフの状態で表示されます。
接頭辞
ルールを適用するオブジェクトのプレフィックス。
プレフィックスを img に設定すると、
imgで始まるすべてのオブジェクト (imgtest.pngやimg/example.jpgなど) にルールが適用されます。プレフィックスを img/ に設定すると、
img/で始まるすべてのオブジェクト (img/example.jpgやimg/test.jpgなど) にルールが適用されます。
プレフィックスは正確な文字列マッチングのみをサポートし、動的変数はサポートしません。重複するプレフィックスを許可 オプションの説明にある 最長プレフィックス一致 および プレフィックスは動的変数をサポートしません を参照してください。
タグ
指定されたタグを持つオブジェクトにのみルールを適用します。
プレフィックスを設定せず、キーが a、値が 1 のタグを指定した場合、タグ a=1 を持つバケット内のすべてのオブジェクトにルールが適用されます。
プレフィックスを
imgに設定し、キーが a、値が 1 のタグを指定した場合、名前がimgで始まり、タグ a=1 を持つバケット内のすべてのオブジェクトにルールが適用されます。
NOT
NOT オプションは、特定のプレフィックスとタグを持つオブジェクトをライフサイクルルールから除外します。
重要NOT オプションを有効にする場合、少なくともプレフィックスまたはタグのいずれかを指定する必要があります。
NOT 条件で指定されたタグのキーは、タグ 条件で定義されたキーと同じにすることはできません。
NOT オプションが有効になっている場合、フラグメントの有効期限ポリシーを設定することはできません。
ファイルサイズ
指定されたサイズ範囲内のオブジェクトにルールを適用します。
最小サイズ: ライフサイクルルールは、この値より大きいオブジェクトに適用されます。値は 0 B より大きく、5 TB 未満である必要があります。
最大サイズ: ライフサイクルルールは、この値より小さいオブジェクトに適用されます。値は 0 B より大きく、5 TB 以下である必要があります。
重要同じライフサイクルルール内で最小オブジェクトサイズと最大オブジェクトサイズの両方を指定する場合:
最大サイズが最小サイズより大きいことを確認してください。
パーツ有効期限ポリシーは設定できません。
削除マーカーのクリーンアップポリシーを設定することはできません。
オブジェクトに対するポリシー
オブジェクトのライフサイクル
オブジェクトの有効期限ポリシーを選択します。By Days、By Date、または 有効になっていません を選択します。有効になっていません を選択した場合、オブジェクトの有効期限ポリシーは有効になりません。
ライフサイクルベースのルール
オブジェクトのストレージクラスを移行するか、有効期限切れのオブジェクトを削除するルールを設定します。Infrequent Access、アーカイブ、Cold Archive、Deep Cold Archive、または Data Deletion を選択します。
たとえば、オブジェクトのライフサイクル を By Date に設定し、2023 年 9 月 24 日を指定すると、この日付より前に最終更新されたオブジェクトは自動的に削除され、復元できなくなります。
フラグメントに対するポリシー
フラグメント期限切れポリシー
フラグメントの有効期限ポリシーを設定します。このオプションは、タグ を選択した場合は使用できません。フラグメントの有効期限ポリシーを By Days または By Date に設定するか、有効になっていません を選択します。有効になっていません を選択した場合、フラグメントの有効期限ポリシーは有効になりません。
重要ライフサイクルルールには、オブジェクトの有効期限ポリシーまたはフラグメントの有効期限ポリシーのいずれかを少なくとも 1 つ含める必要があります。
フラグメントに対するルール
フラグメントの有効期限ポリシーで選択した日数または日付に基づいて、フラグメントの有効期限を指定します。有効期限切れのフラグメントは自動的に削除され、復元できなくなります。
バケットでバージョン管理が有効の場合:
基本設定 および フラグメントに対するポリシー セクションのパラメーターは、バージョン管理が無効のバケットの場合と同じように設定します。次の表では、異なるパラメーターのみを説明します。
重要ライフサイクルルールを設定する前に、クロスリージョンレプリケーションの送信先となるバケットでバージョン管理が有効になっている場合、ソースバケットから同期された削除マーカーにより、送信先バケット内で同じ名前のオブジェクトの現在のバージョンが非現行バージョンに変更されることに注意してください。意図しないデータの削除を防ぐために、非現行バージョンのクリーンアップルールを慎重に設定してください。
セクション
パラメーター
説明
現在のバージョンのポリシー
Clean up expired object delete marker
バージョン管理が有効な場合、有効期限ポリシーに Clean Up Expired Object Delete Marker オプションが追加されます。その他のオプションは、バージョン管理が無効のバケットの場合と同じです。
このオプションを選択すると、OSS は有効期限切れのオブジェクトの削除マーカーがそのオブジェクトの唯一のバージョンである場合に削除します。オブジェクトに複数のバージョンがあり、最新のバージョンが削除マーカーである場合は、OSS は削除マーカーを保持します。削除マーカー。
重要非現行バージョンが存在する場合、このルールは削除マーカーをクリーンアップしません。削除マーカーおよび不要な非現行バージョンは速やかにクリーンアップすることを推奨します。削除マーカーが過剰に存在すると、リスト操作のパフォーマンスが低下する可能性があります。
以前のバージョンに対するポリシー
オブジェクトのライフサイクル
非現行バージョンの有効期限ポリシーを設定します。By Days または 有効になっていません を選択します。有効になっていません を選択した場合、有効期限ポリシーは有効になりません。
ライフサイクルベースのルール
日数 (N) を指定します。非現行バージョンは、非現行バージョンとなってから N 日後に有効期限切れとなり、有効期限の翌日に指定された操作が実行されます。たとえば、値を 30 に設定すると、2023 年 9 月 1 日に非現行バージョンになったオブジェクトは、2023 年 10 月 1 日に指定されたストレージクラスに移行されるか、または削除されます。
重要オブジェクトが非現行バージョンになったタイミングは、後続のバージョンのオブジェクトの最終更新時刻を確認することで判断できます。
OK をクリックします。
ライフサイクルルールを保存すると、ルール一覧で確認できます。
SDK
次のサンプルコードは、一般的な SDK を使用してライフサイクルルールを設定する方法を示しています。サポートされているすべての SDK については、SDK の概要 を参照してください。
Java
// この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
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("OSSException が発生しました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラーレスポンスにより拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException が発生しました。これは、クライアントが OSS との通信中に深刻な内部問題 (ネットワークにアクセスできないなど) に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + 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' => 'バケットが配置されているリージョン', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名', 'required' => False], // (オプション) OSS エンドポイントを指定します。
"bucket" => ['help' => 'バケット名', '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 "エラー: 次の引数が必要です: --$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"]);
}
// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);
// 最終更新時刻から 30 日後に "log/" で始まる名前のオブジェクトを IA に移行するライフサイクルルールを定義します。
$lifecycleRule = new Oss\Models\LifecycleRule(
prefix: 'log/', // オブジェクト名のプレフィックス。
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 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(
'ステータスコード:' . $result->statusCode . PHP_EOL . // HTTP レスポンスステータスコード。
'リクエスト ID:' . $result->requestId . PHP_EOL // リクエスト ID。
);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 alibabacloud_oss_v2 as oss
# ユーザーが入力したパラメーターを受け取るためのコマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
# --region コマンドライン引数を追加します。これはバケットが配置されているリージョンを指定します。この引数は必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket コマンドライン引数を追加します。これはバケット名を指定します。この引数は必須です。
parser.add_argument('--bucket', help='バケット名。', required=True)
# --endpoint コマンドライン引数を追加します。これは他のサービスが OSS にアクセスするために使用できるドメイン名を指定します。この引数はオプションです。
parser.add_argument('--endpoint', help='他のサービスが 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(
expired_object_delete_marker=True
),
noncurrent_version_expiration=oss.NoncurrentVersionExpiration(
noncurrent_days=30,
),
noncurrent_version_transitions=[oss.NoncurrentVersionTransition(
noncurrent_days=10,
storage_class=oss.StorageClassType.IA,
is_access_time=False,
)],
)]
),
))
# 操作のステータスコードおよびリクエスト ID を出力します。
print(f'ステータスコード: {result.status_code}, ' # HTTP ステータスコード。リクエストが成功したかどうかを示します。
f'リクエスト ID: {result.request_id}') # リクエストログの追跡およびデバッグに使用されるリクエスト ID。
if __name__ == "__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("バケット:{0} のライフサイクル設定に成功しました", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("エラーコード: {0} で失敗しました。エラー情報: {1}。\nリクエスト ID:{2}\tホスト ID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("エラー情報: {0} で失敗しました", ex.Message);
}Android
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 アカウント情報を初期化します。 */
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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 日後に低頻度アクセスストレージクラスに移行します。 */
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 失敗" <<
",コード:" << outcome.error().Code() <<
",メッセージ:" << outcome.error().Message() <<
",リクエスト ID:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースを解放します。 */
ShutdownSdk();
return 0;
}C
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに置き換えます。たとえば、中国 (杭州) リージョンの場合、エンドポイントは https://oss-cn-hangzhou.aliyuncs.com です。 */
const char *endpoint = "yourEndpoint";
/* バケット名に置き換えます。例: examplebucket。 */
const char *bucket_name = "examplebucket";
/* yourRegion をバケットが配置されているリージョンの ID に置き換えます。たとえば、中国 (杭州) リージョンの場合、リージョン ID は cn-hangzhou です。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* aos_string_t 変数を char* 文字列で初期化します。 */
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[])
{
/* プログラムのエントリーポイントで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理のためのメモリプール (pool) は 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(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケット名。")
}
func main() {
// コマンドライン引数を解析します。
flag.Parse()
// バケット名が提供されているかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーターです。バケット名が必要です。")
}
// リージョンが提供されているかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーターです。リージョンが必要です。")
}
// デフォルト設定をロードし、認証情報プロバイダーおよびリージョンを設定します。
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 日後に低頻度アクセス (IA) ストレージクラスに移行します。
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/" を持つオブジェクトに適用されます。
// 現在のバージョンは最終更新時刻から 10 日後に有効期限切れとなり、非現行バージョンは 30 日後に削除され、
// 非現行バージョンは非現行バージョンとなってから 10 日後に IA ストレージクラスに移行されます。
ID: oss.Ptr("rule2"),
Prefix: oss.Ptr("dir/"),
Status: oss.Ptr("Enabled"),
Expiration: &oss.LifecycleRuleExpiration{
Days: oss.Ptr(int32(10)),
},
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("バケットのライフサイクル設定に失敗しました %v", err)
}
// ライフサイクルルール設定の結果を出力します。
log.Printf("バケットのライフサイクル設定結果:%#v\n", result)
}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\"}}}"関連 API
REST API を使用してライフサイクルルールを設定するには (署名計算が必要)、PutBucketLifecycle を使用します。
よくある質問
ライフサイクルポリシーを使用してバケット内のすべてのオブジェクトを迅速に削除する方法
バージョン管理が無効なバケット
OSS コンソールの[バケット]ページに移動し、バケット名をクリックします。
左側のナビゲーションツリーで を選択し、バージョン管理が有効になっているかどうかを確認します。

左側のナビゲーションツリーで を選択します。バケット内のすべてのオブジェクトを最終更新時刻から 1 日後に自動的に削除し、1 日以上前に生成されたフラグメントを削除するライフサイクルルールを設定します。

バージョン管理が有効なバケット
バージョン管理が無効なバケットでは、ライフサイクルルールを設定して、バケット内のすべてのオブジェクトおよび不完全なマルチパートアップロードタスクから生成されたフラグメントを自動的に削除できます。
OSS コンソールで[Buckets]ページに移動し、バケット名をクリックします。
左側のナビゲーションツリーで を選択し、バージョン管理が有効になっているかどうかを確認します。

左側のナビゲーションツリーで を選択します。バケット内のすべてのオブジェクトを最終更新時刻から 1 日後に自動的に削除し、1 日以上前に生成されたフラグメントを削除するライフサイクルルールを設定します。

エラー: 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 月 5 日に削除され、10 月 8 日にアップロードされたオブジェクトは 11 月 8 日に削除されます。
ライフサイクルルールの変更
複数のルールが存在する場合に特定のライフサイクルルール (例: Rule1) を変更するには、次の手順を実行します。
GetBucketLifecycle 操作を呼び出して、バケットの現在のすべてのライフサイクルルールを取得します。
Rule1 の設定を変更します。
PutBucketLifecycle 操作を呼び出して、変更された Rule1 と元の Rule2 の両方を送信することで、既存の構成を置き換えます。
ライフサイクルルールの削除
DeleteBucketLifecycle は、バケットからすべてのライフサイクルルールを削除します。単一のルール (例: Rule1) を削除して他のルール (例: Rule2) を保持するには、次の手順で構成全体を置き換えます。
GetBucketLifecycle 操作を呼び出して、バケットの現在のすべてのライフサイクルルールを取得します。
Rule1 を削除します。
PutBucketLifecycle 操作を呼び出して、Rule2 のみを送信することで、既存の構成を置き換えます。
ライフサイクル操作のログ
はい。ライフサイクルルールによってトリガーされたすべての成功した移行および有効期限切れ操作はログに記録されます。関連するログフィールド:
操作
CommitTransition: ストレージクラスの移行を示します。
ExpireObject: 有効期限切れのオブジェクトの削除を示します。
同期リクエスト
lifecycle: 移行または削除がライフサイクルルールによってトリガーされたことを示します。
ログフィールド では、完全なスキーマについて説明しています。課金ルール では、ログクエリのコストについて説明しています。
削除マーカーと現在のバージョンのクリーンアップ
はい。1 つのライフサイクルルールで、現在のオブジェクトバージョンの有効期限を設定し、有効期限切れの削除マーカーをクリーンアップできます。
低頻度アクセスから標準への移行
いいえ。オブジェクトを低頻度アクセスから標準に移行するには、次のいずれかの方法を使用します。
CopyObject 操作を使用
CopyObject を呼び出して、オブジェクトを低頻度アクセスから標準に移行します。
ossutil ツールを使用
ossutil の set-meta コマンドを X-Oss-Storage-Class オプションとともに使用して、オブジェクトを低頻度アクセスから標準に移行します。メタデータの設定または更新。
OSS はアップロードされたオブジェクトを標準として保存しますか、それともライフサイクルルールが直接低コストのストレージクラスに移行しますか?
オブジェクトは、ライフサイクルルールが設定されているかどうかに関係なく、アップロード時にデフォルトで 標準 ストレージクラスで保存されます。ライフサイクルルールはバックグラウンドで非同期に実行され、UTC + 08:00 の毎日 08:00:00 に指定された条件を満たすオブジェクトをターゲットストレージクラスに移行します。このルールはアップロード時に有効になりません。
代わりにアップロード時にストレージクラスを指定するには、x-oss-storage-class リクエストヘッダーを設定します。たとえば、ossutil を使用してオブジェクトを直接低頻度アクセス (IA) ストレージとしてアップロードするには、次のコマンドを実行します。
ossutil cp test.txt oss://bucket/ --meta x-oss-storage-class:IA関連ドキュメント
デフォルトでは、OSS はオブジェクトのアップロード時刻を
LastModified時刻として使用します。ライフサイクルによる移行はLastModifiedを更新しません。OSS オブジェクトの LastModified 属性に影響を与える操作とは?低頻度アクセス、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトを最小保存期間より前に移行または削除する場合、早期削除料金が適用されます。最小保存期間より短い期間で保存されたオブジェクトの課金方法は?ライフサイクルルールは、バケット全体またはプレフィックスに一致するオブジェクトに対してのみ一括移行または削除をサポートします。特定のサフィックスを持つオブジェクトを一括削除するには、ossutil rm コマンド を使用します。
OSS にアクセスパターンを自動的に監視させてコールドオブジェクトを移行させるには、最終アクセス時刻に基づくライフサイクルルール を設定します。
バケット内のすべてのオブジェクトのストレージクラスを表示するには、オブジェクトの一覧表示 を使用します。