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

Object Storage Service:最終アクセス時刻に基づくライフサイクルルール

最終更新日:Nov 26, 2025

最終アクセス時刻 (LastAccessTime) に基づくライフサイクルルールを使用すると、データアクセスパターンを自動的にモニタリングし、コールドデータを特定できます。その後、特定されたコールドデータを別のストレージクラスに移行できます。このプロセスにより、ストレージの自動階層化が可能になり、ストレージコストを削減できます。

利用シーン

  • マルチメディア

    あるウェブサイトが、ビデオや画像を Object Storage Service (OSS) に保存しているとします。時間が経つにつれて、既存データはコールドデータになります。長期間アクセスされていないデータを低頻度アクセス (IA) ストレージクラスに移動する必要があるかもしれません。しかし、一部の古いデータは依然として人気があり、標準ストレージクラスに保持すべき場合もあります。このようなシナリオでは、最終アクセス時刻に基づくライフサイクルルールを使用できます。これらのルールは、ホットデータとコールドデータを自動的に識別してストレージを階層化し、ストレージコストの削減に役立ちます。

  • フォトアルバムまたはクラウドドライブ

    カスタムの日数アクセスされていないコールドデータを IA ストレージクラスに移行できます。このプロセスにより、リアルタイムアクセスを確保しながら、データを自動的に移動できます。

  • ライフサイエンス

    遺伝子シーケンシングでは、大量のビジネスデータが生成されます。多くの場合、このデータがホットかコールドかを、最終更新時刻ではなく最終アクセス時刻に基づいて判断する必要があります。以前は、ログ分析やその他の方法でデータ階層化を手動で管理する必要がありました。現在では、最終アクセス時刻に基づくライフサイクルルールを使用できます。これらのルールは、ホットデータとコールドデータを自動的に識別し、それに応じて階層化します。また、より柔軟なデータ管理のために、同じライフサイクルルール内で最終アクセス時刻と最終更新時刻のポリシーを組み合わせることもできます。

制限事項

サポートされていないデータ削除

最終アクセス時刻に基づくライフサイクルルールを使用してデータを削除することはできません。

マッチング条件

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

パートの有効期限切れに関する制限

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

  • 例 1

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

  • 例 2

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

注意事項

ルール数

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

課金

  • オブジェクトモニタリング管理料金

    アクセス追跡を有効にすると、オブジェクトモニタリング管理料金が発生します。ただし、現在 OSS はこれらの料金を請求していません。

  • 最小期間未満で保存された IA オブジェクトの料金

    IA オブジェクトには 30 日間の最小保存期間があります。オブジェクトがこの最小期間未満で保存された場合、残りの期間分の料金が請求されます。以下の例は、ライフサイクルルールに対してこの料金がどのように計算されるかを示しています。

    例 1:標準オブジェクトが作成から 10 日後に IA ストレージクラスに移行され、その 5 日後に標準ストレージクラスに戻された場合。この場合、最小保存期間の残り 15 日分の料金が請求されます。

    例 2:標準オブジェクトが作成から 10 日後に IA ストレージクラスに移行され、その 15 日後に削除された場合。この場合、最小保存期間の残り 5 日分の料金が請求されます。

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

  • 低頻度アクセスのデータ取得料金

    IA ストレージクラスのデータ取得料金は、取得されたデータのボリュームに基づきます。詳細については、「データ処理料金」をご参照ください。

  • リクエスト料金

    ライフサイクルルールを使用してオブジェクトのストレージクラスを移行すると、リクエスト料金が発生します。詳細については、「リクエスト料金」をご参照ください。

上書きセマンティクス

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

  • GetBucketLifecycle 操作を呼び出して Rule1 をクエリします。

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

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

有効になるまでの時間

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

実行完了時間

  • ライフサイクルルールが有効になった後、オブジェクトの削除、ストレージクラスの移行、パートの有効期限切れなどの操作は通常 24 時間以内に完了します。ただし、オブジェクト数のしきい値はリージョンによって異なります。中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深セン)、およびシンガポールリージョンでは、最大 10 億オブジェクトのワークロードに適用されます。他のすべてのリージョンでは、最大 1 億オブジェクトのワークロードに適用されます。

  • 特定の条件下では、タスクの実行が大幅に遅延し、24 時間を超えて数日または数週間に及ぶことがあります。これは通常、スキャンまたは処理するオブジェクト数が多すぎる、タグの数が多い、オブジェクトのバージョンが多い、タスク実行中に新規書き込みの量が多いなど、重いワークロードが原因です。

最終アクセス時刻の更新ポリシー

アクセス追跡を有効にすると、OSS はオブジェクトの最終アクセス時刻 (LastAccessTime) を次のルールに基づいて更新します。

  1. 初期化:アクセス追跡が有効になると、バケット内のすべてのオブジェクトの LastAccessTime は、アクセス追跡が有効になった時刻に設定されます。

  2. 更新ルール:その後、オブジェクトのダウンロードや上書きなどの操作により、オブジェクトの LastAccessTime が更新されます。オブジェクトの LastAccessTime を更新する具体的な操作については、「オブジェクトの LastAccessTime に対する一般的な操作の影響」をご参照ください。

  3. 更新メカニズム:

    • LastAccessTime は非同期で更新され、通常は 24 時間以内です。

    • 同じオブジェクトが 24 時間以内に複数回アクセスされた場合、OSS は最初のアクセスリクエストの時刻をオブジェクトの LastAccessTime として記録します。24 時間以内のその後のアクセスでは更新はトリガーされません。

移行されるオブジェクトタイプ

  • 最終アクセス時刻に基づくライフサイクルルールは、オブジェクトを標準ストレージクラスから IA ストレージクラスに移行することをサポートしています。また、オブジェクトがアクセスされたときに自動的に標準ストレージクラスに戻すかどうかも選択できます。

  • 最終アクセス時刻に基づくライフサイクルルールは、オブジェクトを標準または IA ストレージクラスからアーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスに移行することをサポートしています。また、アーカイブストレージクラスからコールドアーカイブまたはディープコールドアーカイブストレージクラスにオブジェクトを移行することもできます。オブジェクトを標準または IA ストレージクラスからアーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスに移行するには、して権限をリクエストしてください。リクエストが承認された後、移行先のストレージクラスを指定する必要があります。

    重要

    チケットが承認された後、最終アクセス時刻に基づくポリシーを使用してオブジェクトを標準または IA ストレージクラスからアーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスに移行する場合、オブジェクトの最終アクセス時刻は、デフォルトでバケットのアクセス追跡が有効になった時刻に設定されます。

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

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

p571593 (1)..jpeg

操作手順

OSS コンソールの使用

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

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

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

  4. ライフサイクル ページで、[アクセス追跡を有効化] スイッチをオンにし、ルールの作成 をクリックします。

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

    • バケットのバージョン管理が有効になっていない場合。

      エリア

      設定項目

      説明

      基本設定

      ステータス

      ライフサイクルルールのステータスを設定します。有効な値:[有効][無効]

      • ライフサイクルルールを有効にすると、ルールに基づいてデータのストレージクラスが移行されます。

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

      ポリシー

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

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

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

      • ルール 1

        バケット内のプレフィックス dir1/ を持つすべてのオブジェクトを、最終アクセスから 180 日後に IA ストレージクラスに移行することを指定します。

      • ルール 2

        バケット内のプレフィックス dir1/dir2/ を持つすべてのオブジェクトを、最終アクセスから 30 日後にアーカイブストレージクラスに移行することを指定します。

      このオプションが選択されていない場合、OSS は dir1/dir2/ ディレクトリ内のオブジェクトが両方の移行ルールに一致することを検出するため、2 つのライフサイクルルールを拒否します。

      このオプションが選択されている場合、dir1/dir2/ ディレクトリ内のオブジェクトは 30 日後にアーカイブストレージクラスに移行されます。dir1/ ディレクトリ内の他のオブジェクトは 180 日後に IA ストレージクラスに移行されます。

      接頭辞

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

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

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

      タグ

      ライフサイクルルールは、指定されたタグを持つオブジェクトにのみ適用されます。たとえば、[プレフィックスで照合] を選択し、プレフィックスを img に設定し、タグキーを a、値を 1 に設定すると、ルールは名前が img で始まり、タグ a=1 を持つすべてのオブジェクトに一致します。オブジェクトタグの詳細については、「オブジェクトのタグ付け」をご参照ください。

      NOT

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

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

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

      • NOT オプションを有効にする場合、パートの有効期限ポリシーを設定することはできません。

      ファイルサイズ

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

      • 最小サイズ:ライフサイクルルールは、この値より大きいファイルに適用されます。値は 0 B より大きく、5 TB 未満である必要があります。

      • 最大サイズ:ライフサイクルルールは、この値より小さいファイルに適用されます。値は 0 B より大きく、5 TB 以下である必要があります。

      重要

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

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

      • パート実行ポリシーを設定することはできません。

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

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

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

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

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

      オブジェクトのストレージクラスを移行するルールを設定します。データは次のストレージクラスに移行できます。

      • [低頻度アクセス (アクセス後もデータは IA ストレージクラスに留まる)]

      • [低頻度アクセス (アクセス後にデータは標準ストレージクラスに戻る)]

      • アーカイブストレージ

      • コールドアーカイブ

      • ディープコールドアーカイブ

      たとえば、[最終アクセス時刻] ポリシーを選択し、[日数を指定] を 30 に設定し、指定された日数が経過した後にデータが自動的に [低頻度アクセス (アクセス後もデータは IA ストレージクラスに留まる)] に移行されるように指定した場合、2021 年 9 月 1 日に最後にアクセスされたオブジェクトは、2021 年 10 月 1 日に指定されたストレージクラスに移行されます。

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

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

      期限切れのパートに対して実行するアクションを設定します。タグ を選択した場合、このオプションは設定できません。パートの有効期限ポリシーには [日数を指定] または [日付を指定] を選択するか、有効になっていません を選択してパートの有効期限ポリシーを無効にすることができます。有効になっていません を選択した場合、パートの有効期限ポリシーは有効になりません。

      重要

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

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

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

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

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

      エリア

      設定項目

      説明

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

      削除マーカーをクリア

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

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

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

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

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

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

      オブジェクトの旧バージョンのストレージクラスが移行されるまでの日数 (N) を設定します。たとえば、値を 30 に設定した場合、2021 年 9 月 1 日にアクセスされたオブジェクトの旧バージョンは、2021 年 10 月 1 日に指定されたストレージクラスに移行されます。

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

    ライフサイクルルールが保存されると、ポリシーリストで確認できます。

Alibaba Cloud SDK の使用

最終アクセス時刻に基づくライフサイクルルールの作成をサポートしているのは、Java SDK と Go SDK のみです。このようなルールを作成する前に、指定されたバケットのアクセス追跡を有効にする必要があります。コード例については、「SDK の概要」をご参照ください。

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;

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 {
            ossClient.putBucketAccessMonitor(bucketName, AccessMonitor.AccessMonitorStatus.Enabled.toString());
            // ライフサイクルルールを作成し、ID を rule1 に設定します。プレフィックスに logs を含み、サイズが 64 KB 以下のオブジェクトのストレージクラスを、最終アクセスから 30 日後に IA に変更するように指定します。さらに、プレフィックスに logs を含むオブジェクトが再度アクセスされた場合でも、IA オブジェクトとして保存されるように指定します。
            LifecycleRule lifecycleRule = new LifecycleRule("rule1", "logs", LifecycleRule.RuleStatus.Enabled);
            List<LifecycleRule> lifecycleRuleList = new ArrayList<LifecycleRule>();
            SetBucketLifecycleRequest setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);

            LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.IA);
            storageTransition.setExpirationDays(30);
            storageTransition.setIsAccessTime(true);
            storageTransition.setReturnToStdWhenVisit(false);
            storageTransition.setAllowSmallFile(true);
            List<LifecycleRule.StorageTransition> storageTransitionList = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransitionList.add(storageTransition);
            lifecycleRule.setStorageTransition(storageTransitionList);
            lifecycleRuleList.add(lifecycleRule);
            
            // ライフサイクルルールを作成し、ID を rule2 に設定します。プレフィックスに dir を含み、サイズが 64 KB を超えるオブジェクトの旧バージョンを、最終アクセスから 10 日後に IA に変更するように指定します。さらに、プレフィックスに dir を含むオブジェクトが再度アクセスされた場合、そのストレージクラスが標準に変更されるように指定します。
            LifecycleRule lifecycleRule2 = new LifecycleRule("rule2", "dir", LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition = new LifecycleRule.NoncurrentVersionStorageTransition();
            noncurrentVersionStorageTransition.setStorageClass(StorageClass.IA);
            noncurrentVersionStorageTransition.setNoncurrentDays(10);
            noncurrentVersionStorageTransition.setIsAccessTime(true);
            noncurrentVersionStorageTransition.setReturnToStdWhenVisit(true);
            noncurrentVersionStorageTransition.setAllowSmallFile(false);

            List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitionList = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
            noncurrentVersionStorageTransitionList.add(noncurrentVersionStorageTransition);
            lifecycleRule2.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitionList);
            lifecycleRuleList.add(lifecycleRule2);

            setBucketLifecycleRequest.setLifecycleRules(lifecycleRuleList);

            // ライフサイクルルールを設定します。
            ossClient.setBucketLifecycle(setBucketLifecycleRequest);
        } 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();
            }
        }
    }
}

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 では、プレフィックス data/ を持つすべてのオブジェクトは、最終アクセスから 200 日後に低頻度アクセス (IA) ストレージクラスに変換されます。これらのオブジェクトが再度アクセスされた場合、IA ストレージクラスに留まります。
                    id='rule1',
                    status='Enabled',
                    prefix='data/',
                    transitions=[oss.LifecycleRuleTransition(
                        days=200,
                        storage_class=oss.StorageClassType.IA,
                        is_access_time=True, # true に設定します。これはポリシーが最終アクセス時刻に基づいていることを示します。
                        return_to_std_when_visit=False
                    )],
                ), oss.LifecycleRule(
                    # ライフサイクルルール rule2 では、プレフィックス log/ を持つすべてのオブジェクトは、最終アクセスから 120 日後に低頻度アクセス (IA) ストレージクラスに変換されます。これらのオブジェクトが再度アクセスされた場合、IA ストレージクラスに留まります。
		    # 同じルールで、プレフィックス log/ を持つすべてのオブジェクトは、最終アクセスから 250 日後にアーカイブストレージクラスに変換されます。
                    id='rule2',
                    status='Enabled',
                    prefix='log/',
                    transitions=[oss.LifecycleRuleTransition(
                        days=120,
                        storage_class=oss.StorageClassType.IA,
                        is_access_time=True, # true に設定します。これはポリシーが最終アクセス時刻に基づいていることを示します。
                        return_to_std_when_visit=False
                    ), oss.LifecycleRuleTransition(
                        days=250,
                        storage_class=oss.StorageClassType.ARCHIVE,
                        is_access_time=True, # true に設定します。これはポリシーが最終アクセス時刻に基づいていることを示します。
                        return_to_std_when_visit=False
                    )],
                )]
            ),
    ))

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


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

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{
				{
					// ライフサイクルルール 1 では、プレフィックス data/ を持つすべてのファイルが、最終アクセスから 200 日後に低頻度アクセスストレージクラスに変換されるように指定します。プレフィックス data/ を持つファイルが再度アクセスされた場合、低頻度アクセスストレージクラスに留まります。
					ID:     oss.Ptr("rule1"),
					Status: oss.Ptr("Enabled"),
					Prefix: oss.Ptr("data/"),
					Transitions: []oss.LifecycleRuleTransition{
						{
							Days:                 oss.Ptr(int32(200)),
							StorageClass:         oss.StorageClassIA,
							IsAccessTime:         oss.Ptr(true), // 値を true に設定します。ポリシーは最終アクセス時刻に基づきます。
							ReturnToStdWhenVisit: oss.Ptr(false),
						},
					},
				},
				{
					// ライフサイクルルール 2 では、プレフィックス log/ を持つすべてのファイルが、最終アクセスから 120 日後に低頻度アクセスストレージクラスに変換されるように指定します。プレフィックス log/ を持つファイルが再度アクセスされた場合、低頻度アクセスストレージクラスに留まります。
					// 同じルールで、プレフィックス log/ を持つすべてのファイルが、最終アクセスから 250 日後にアーカイブストレージクラスに変換されるように指定します。
					ID:     oss.Ptr("rule2"),
					Status: oss.Ptr("Enabled"),
					Prefix: oss.Ptr("log/"),
					Transitions: []oss.LifecycleRuleTransition{
						{
							Days:                 oss.Ptr(int32(120)),
							StorageClass:         oss.StorageClassIA,
							IsAccessTime:         oss.Ptr(true), // 値を true に設定します。ポリシーは最終アクセス時刻に基づきます。
							ReturnToStdWhenVisit: oss.Ptr(false),
						},
						{
							Days:                 oss.Ptr(int32(250)),
							StorageClass:         oss.StorageClassArchive,
							IsAccessTime:         oss.Ptr(true),
							ReturnToStdWhenVisit: oss.Ptr(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)
}

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
            IsAccessTime: 'true', // アクセス時間に基づいて変換をトリガーするかどうか
            ReturnToStdWhenVisit: 'false' // 再度アクセスされたときに 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 // リクエストの一意の識別子
);

ossutil の使用

コマンドラインインターフェイス (CLI) ツール 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\",\"IsAccessTime\":true,\"ReturnToStdWhenVisit\":true},\"AbortMultipartUpload\":{\"Days\":\"10\"}}}"

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

関連 API

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

よくある質問

バケット内の同じプレフィックスを持つオブジェクトに対して、一方は最終更新時刻に基づき、もう一方は最終アクセス時刻に基づく 2 つのライフサイクルルールを作成した場合、どうなりますか?

たとえば、ターゲットバケット `examplebucket` に対して 2 つのライフサイクルルールを作成します。ルール 1 は、プレフィックス `doc` を持つすべてのオブジェクトを最終更新から 30 日後に削除することを指定します。ルール 2 は、プレフィックス `doc` を持つすべてのオブジェクトを最終アクセスから 30 日後に IA ストレージクラスに移行することを指定します。

OSS はユーザーコストを最小化する原則に基づいてライフサイクルルールを実行します。したがって、ルール 1 のみが有効になります。これは、ルール 1 が一致するオブジェクトを 30 日後に削除し、その後は料金が発生しなくなることを指定しているためです。オブジェクトを IA ストレージクラスに移行するルール 2 は、依然としてストレージ料金やデータ取得料金が発生します。

変更されたライフサイクルルールはいつ有効になり、元のルールに一致したデータはどのように処理されますか?

たとえば、プレフィックス er を持つオブジェクトに対してライフサイクルルールがあるとします。このルールは、これらのオブジェクトを最終アクセスから 30 日後に IA ストレージクラスに移行し、再度アクセスされた場合は標準ストレージクラスに戻すように設定されています。しかし、最終アクセスから 35 日後に、ライフサイクルルールのプレフィックスを er から re に変更したとします。この場合、元のオブジェクトは IA ストレージクラスに移行されますが、ルールが一致しなくなったため、標準ストレージクラスに戻すアクションは有効になりません。変更されたルールに一致するオブジェクトの最終アクセス時刻は、バケットのアクセス追跡が有効になった時刻から計算されます。

バージョン管理が有効なバケットでインテリジェント階層化が有効になっている場合、異なるオブジェクトバージョンはどのようにストレージ階層に分散されますか?

バージョン管理が有効なバケット内の各オブジェクトには一意のバージョン ID があり、異なるバージョンは互いに独立しています。したがって、オブジェクトの旧バージョンが IA ストレージクラスにあり、現行バージョンが標準ストレージクラスにある可能性があります。

アクセス追跡を無効にできますか?

はい、バケットに最終アクセス時刻に基づくライフサイクルルールがない場合に限り可能です。アクセス追跡を無効にすると、システムはオブジェクトの最終アクセス時刻の追跡を停止します。次回アクセス追跡を有効にすると、すべてのオブジェクトの最終アクセス時刻が更新されます。

関連ドキュメント

LastAccessTime (最終アクセス時刻) は OSS オブジェクトの重要な属性です。この属性は、課金やライフサイクルルールなどのシナリオで使用されます。バケットのアクセス追跡が有効になった後、オブジェクトに対する一部の操作によってオブジェクトの LastAccessTime が更新される場合があります。詳細については、「オブジェクトの LastAccessTime に対する一般的な操作の影響」をご参照ください。