全部产品
Search
文档中心

Object Storage Service:Lifecycle (C++ SDK)

更新时间:Nov 30, 2025

Tidak semua data yang diunggah ke OSS memerlukan akses yang sering. Untuk kepatuhan terhadap regulasi data atau keperluan arsip, sebagian data harus disimpan dalam kelas penyimpanan cold storage. Dalam skenario lain, Anda mungkin ingin menghapus data yang tidak lagi diperlukan di bucket secara batch. Anda dapat mengonfigurasi aturan lifecycle berdasarkan waktu modifikasi terakhir objek. Aturan ini secara berkala memindahkan objek ke kelas penyimpanan yang lebih dingin atau menghapusnya guna mengurangi biaya penyimpanan.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Create an OssClient instance.

  • Untuk menetapkan aturan lifecycle, Anda harus memiliki izin oss:PutBucketLifecycle. Untuk melihat aturan lifecycle, Anda harus memiliki izin oss:GetBucketLifecycle. Untuk menghapus aturan lifecycle, Anda harus memiliki izin oss:DeleteBucketLifecycle. Untuk informasi selengkapnya, lihat Grant custom permissions to a RAM user.

Tetapkan aturan lifecycle

Kode berikut memberikan contoh cara menetapkan aturan lifecycle untuk bucket `examplebucket` berdasarkan waktu modifikasi terakhir. Jika Anda ingin memodifikasi satu atau beberapa aturan setelah ditetapkan, lihat How do I modify one or more lifecycle rules?

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

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
    
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    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");

    /* Tetapkan tag. */
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));

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

    /* Tentukan waktu kedaluwarsa. */
    auto rule2 = LifecycleRule();
    rule2.setID("rule2");
    rule2.setPrefix("test2/");
    rule2.setStatus(RuleStatus::Disabled);
    rule2.setExpiration(date);

    /* rule3 adalah aturan lifecycle untuk bucket yang telah mengaktifkan versioning. */
    auto rule3 = LifecycleRule();
    rule3.setID("rule3");
    rule3.setPrefix("test3/");
    rule3.setStatus(RuleStatus::Disabled);

    /* Pindahkan objek ke kelas penyimpanan Archive 365 hari setelah objek tersebut dimodifikasi terakhir kali. */  
    auto transition = LifeCycleTransition();  
    transition.Expiration().setDays(365);
    transition.setStorageClass(StorageClass::Archive);
    rule3.addTransition(transition);

    /* Secara otomatis hapus penanda hapus yang telah kedaluwarsa. */
    rule3.setExpiredObjectDeleteMarker(true);

    /* Pindahkan versi noncurrent objek ke kelas penyimpanan Infrequent Access 10 hari setelah menjadi versi noncurrent. */
    auto transition1 = LifeCycleTransition();  
    transition1.Expiration().setDays(10);
    transition1.setStorageClass(StorageClass::IA);

    /* Pindahkan versi noncurrent objek ke kelas penyimpanan Archive 20 hari setelah menjadi versi noncurrent. */
    auto transition2 = LifeCycleTransition();  
    transition2.Expiration().setDays(20);
    transition2.setStorageClass(StorageClass::Archive);

    /* Hapus objek 30 hari setelah menjadi versi noncurrent. */
    auto expiration  = LifeCycleExpiration(30);
    rule3.setNoncurrentVersionExpiration(expiration);

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

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

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

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Lihat aturan lifecycle

Kode berikut menunjukkan cara melihat aturan lifecycle untuk bucket bernama examplebucket.

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
std::string ToStorageClassName(const StorageClass& storageClass) {
    switch (storageClass) {
        case StorageClass::Standard:
            return "Standard";
        case StorageClass::IA:
            return "IA";
        case StorageClass::Archive:
            return "Archive";
        case StorageClass::ColdArchive:
            return "ColdArchive";
        default:
            return "Unknown";
    }
}
int main(void)
{
    /* Inisialisasi informasi akun OSS. */
    
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";
  
    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();
  
    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
  
    /* Lihat aturan lifecycle. */
    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.Status() << ","
            "hasExpiration:" << rule.hasExpiration() << "," <<
            "hasTransitionList:" << rule.hasTransitionList() << "," << std::endl;
            auto taglist = rule.Tags();
            for (const auto& tag : taglist)
            {
                std::cout << "GetBucketLifecycle tag success, Key:" 
                << tag.Key() << "; Value:" << tag.Value() << std::endl;
            }
            /* Periksa apakah penanda hapus yang kedaluwarsa dihapus secara otomatis. */
            if (rule.ExpiredObjectDeleteMarker()) {
                std::cout << "rule expired delete marker: " << rule.ExpiredObjectDeleteMarker() << std::endl;
            }
            /* Lihat aturan transisi kelas penyimpanan untuk versi noncurrent objek. */
            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;    
                }
            }
            /* Lihat aturan kedaluwarsa untuk versi noncurrent objek. */
            if (rule.hasNoncurrentVersionExpiration()) {
                std::cout << "rule noncurrent versions expiration days:" << rule.NoncurrentVersionExpiration().Days() << std::endl;
            }
        }
    }
    else {
        /* Tangani pengecualian. */
        std::cout << "GetBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Hapus aturan lifecycle

Kode berikut menunjukkan cara menghapus semua aturan lifecycle untuk bucket bernama examplebucket. Untuk menghapus satu atau beberapa aturan lifecycle, lihat How do I delete one or more lifecycle rules?.

#include <alibabacloud/oss/OssClient.h>

using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
    
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";
  
    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();
  
    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
  
    /* Hapus aturan lifecycle. */
    DeleteBucketLifecycleRequest request(BucketName);
    auto outcome = client.DeleteBucketLifecycle(request);
    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "DeleteBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Referensi

  • Untuk kode contoh lengkap mengenai aturan lifecycle, lihat GitHub sample.

  • Untuk informasi selengkapnya mengenai operasi API yang dapat dipanggil untuk menetapkan aturan lifecycle, lihat PutBucketLifecycle.

  • Untuk informasi selengkapnya mengenai operasi API yang dapat dipanggil untuk melihat aturan lifecycle, lihat GetBucketLifecycle.

  • Untuk informasi selengkapnya mengenai operasi API yang dapat dipanggil untuk menghapus semua aturan lifecycle, lihat DeleteBucketLifecycle.