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

Object Storage Service:OSS SDK for C ++ を使用したライフサイクルルールの管理

最終更新日:Feb 23, 2024

Object Storage Service (OSS) バケットにアップロードされるすべてのデータが頻繁にアクセスされるわけではありません。 めったにアクセスされないデータは、コンプライアンスとアーカイブの目的でコールドストレージに保存されます。 ビジネスシナリオに基づいて、バッチで保存する必要がなくなったデータをバケットから削除することができます。 この場合、オブジェクトの最終変更時刻に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスをホットからコールドに定期的に変更したり、オブジェクトを削除してストレージコストを削減したりできます。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。

  • ライフサイクルルールを設定するには、oss:PutBucketLifecycle権限が必要です。 ライフサイクルルールをクエリするには、oss:GetBucketLifecycle権限が必要です。 ライフサイクルルールをクリアするには、oss:DeleteBucketLifecycle権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

バケットのライフサイクルルールの設定

次のコードでは、examplebucketという名前のバケットのオブジェクトの最終変更時刻に基づいてライフサイクルルールを設定する方法の例を示します。 ライフサイクルルールを設定した後、ビジネス要件に基づいてライフサイクルルールを変更できます。 既存のライフサイクルルールを変更する方法については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。

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

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

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);

    SetBucketLifecycleRequestリクエスト (BucketName);
    std::string date("2022-10-12T00:00:00.000Z");

    /* ルールに一致させるオブジェクトのタグを指定します。 */
    タグ付け;
    tagging.addTag (タグ ("key1", "value1"));
    tagging.addTag (タグ ("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:: 無効);
    rule2.setExpiration (日付);

    /* バケットのバージョン管理が有効になっている場合、バケットの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:: アーカイブ);
    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:: アーカイブ);

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

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

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

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

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

バケットのライフサイクルルールの照会

次のコードは、examplebucketという名前のバケットに設定されたライフサイクルルールを照会する方法の例を示しています。

#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。std::string ToStorageClassName(const StorageClass& storageClass) {
    switch (storageClass) {
        ケースStorageClass::Standard:
            「標準」を返します。
        ケースStorageClass::IA:
            "IA" を返します。
        ケースStorageClass:: アーカイブ:
            "アーカイブ" を返す。
        ケースStorageClass::ColdArchive:
            "ColdArchive" を返します。
        default:
            "不明" を返す。
    }
}
int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
  
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();
  
    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);
  
    /* バケットに設定されているライフサイクルルールを照会します。 */
    auto outcome = client.GetBucketLifecycle(BucketName);
    if (outcome.isSuccess()) {
        std::cout << "GetBucketLifecycle success," << std::endl;
        for (auto const rule : outcome.result().LifecycleRules()) {
            std::cout << "rule:" << rule.ID() <<< "," << rule.Prefix() << "," << rule.Prefix() << "," << rule.Status() <<< ","
            "hasExpiration:" << rule.hasExpiration() << "," <<<
            "hasTransitionList:" << rule.hasTransitionList() << "," << std::endl;
            auto taglist = rule. タグ ();
            (const auto& tag : taglist)
            {
                std::cout << "GetBucketLifecycle tag success, Key:" 
                << tag.Key() << "; 値:" << tag.Value() << std::endl;
            }
            /* ライフサイクルルールを照会して、期限切れの削除マーカーが自動的に削除されるかどうかを確認します。 */
            if (rule.ExpiredObjectDeleteMarker()) {
                std::cout << "ルール期限切れ削除マーカー:" << rule.ExpiredObjectDeleteMarker() <<< std::endl;
            }
            /* 以前のバージョンのオブジェクトのストレージクラスを変更するために使用された設定を照会します。 */
            if (rule.hasNoncurrentVersionTransitionList()) {
                for (auto const lifeCycleTransition : rule.NoncurrentVersionTransitionList()) {
                    std::cout << "rule noncurrent versions trans days:" << std::to_string(lifeCycleTransition.Expiration().Days()) <<<
                    "trans storage class: " << ToStorageClassName(lifeCycleTransition.StorageClass()) << std::endl;    
                }
            }
            /* 以前のバージョンのオブジェクトの有効期限設定を照会します。 */
            if (rule.hasNoncurrentVersionExpiration()) {
                std::cout << "rule noncurrent versions expiration days:" << rule.NoncurrentVersionExpiration().Days() <<< std::endl;
            }
        }
    }
    else {
        /* 例外を処理します。 */
        std::cout << "GetBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。}

バケットのライフサイクルルールの削除

次のコードは、examplebucketという名前のバケットのライフサイクルルールをクリアする方法の例を示しています。 1つ以上のライフサイクルルールを削除する場合は、「バケットに設定されている1つ以上のライフサイクルルールを削除する方法」を参照してください。.

#include <alibabacloud/oss/OssClient.h>

名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
  
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();
  
    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);
  
    /* ライフサイクルルールを削除します。 */
    DeleteBucketLifecycleRequestリクエスト (BucketName);
    auto outcome = client.DeleteBucketLifecycle (リクエスト);
    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "DeleteBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

参考資料

  • ライフサイクルルールの管理に使用される完全なサンプルコードについては、『GitHub』をご参照ください。

  • ライフサイクルルールを設定するために呼び出すことができるAPI操作の詳細については、「PutBucketLifecycle」をご参照ください。

  • ライフサイクルルールを照会するために呼び出すAPI操作の詳細については、「GetBucketLifecycle」をご参照ください。

  • ライフサイクルルールを削除するために呼び出すことができるAPI操作の詳細については、「DeleteBucketLifecycle」をご参照ください。