Tidak semua data yang diunggah ke Object Storage Service (OSS) diakses secara rutin. Namun, sebagian data harus disimpan dalam kelas penyimpanan cold karena alasan seperti kepatuhan terhadap regulasi data atau pengarsipan. Dalam skenario lain, Anda mungkin ingin menghapus data yang tidak lagi diperlukan dalam suatu bucket secara batch. Anda dapat mengonfigurasi aturan lifecycle berdasarkan waktu modifikasi terakhir untuk secara berkala memindahkan objek dari kelas penyimpanan hot ke cold atau menghapus objek tersebut, sehingga membantu mengurangi biaya penyimpanan.
Catatan
Sebelum mengonfigurasi aturan lifecycle berdasarkan waktu modifikasi terakhir objek, pastikan Anda memahami fitur ini terlebih dahulu. Untuk informasi selengkapnya, lihat Lifecycle rules based on the last modified time.
Dalam topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya 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.
Dalam topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Initialization (C SDK).
Untuk menetapkan aturan lifecycle, Anda harus memiliki izin
oss:PutBucketLifecycle. Untuk melihat aturan lifecycle, Anda harus memiliki izinoss:GetBucketLifecycle. Untuk menghapus semua aturan lifecycle, Anda harus memiliki izinoss:DeleteBucketLifecycle. Untuk informasi selengkapnya, lihat Grant custom permissions to a RAM user.
Tetapkan aturan lifecycle
Kode berikut menunjukkan cara menetapkan aturan lifecycle untuk bucket bernama examplebucket berdasarkan waktu modifikasi terakhir. Setelah menetapkan aturan, jika Anda ingin mengubah satu atau beberapa konfigurasi aturan tersebut, lihat How do I modify one or more lifecycle rule configurations?.
#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket Anda berada. Misalnya, untuk wilayah China (Hangzhou), Endpoint-nya adalah https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Ganti dengan nama bucket Anda. Misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Ganti yourRegion dengan ID wilayah tempat bucket Anda berada. Misalnya, untuk wilayah China (Hangzhou), ID wilayahnya adalah cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Inisialisasi variabel aos_string_t dengan string char*. */
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
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"));
// Anda juga harus mengonfigurasi dua parameter berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah akan menggunakan CNAME untuk mengakses OSS. Nilai 0 berarti CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Atur parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di titik masuk program untuk menginisialisasi sumber daya global, seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Implementasinya ada di library apr. */
aos_pool_t *pool;
/* Buat memory pool. Parameter kedua adalah NULL, yang menunjukkan bahwa memory pool baru tidak mewarisi dari memory pool lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini mencakup konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan memori untuk opsi di dalam memory pool. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi klien, oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
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);
/* Tentukan masa berlaku dalam hari. */
oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
aos_str_set(&rule_content_days->id, "rule-1");
/* Tetapkan awalan objek. */
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);
/* Tentukan tanggal kedaluwarsa. */
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");
/* Tanggal kedaluwarsa harus dalam format 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);
/* Tetapkan aturan lifecycle. */
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);
}
/* Hapus memory pool. Ini melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
aos_http_io_deinitialize();
return 0;
}Lihat aturan lifecycle
Kode berikut menunjukkan cara melihat aturan lifecycle untuk bucket bernama examplebucket.
#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket Anda berada. Misalnya, untuk wilayah China (Hangzhou), Endpoint-nya adalah https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Ganti dengan nama bucket Anda. Misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Ganti yourRegion dengan ID wilayah tempat bucket Anda berada. Misalnya, untuk wilayah China (Hangzhou), ID wilayahnya adalah cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Inisialisasi variabel aos_string_t dengan string char*. */
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
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"));
// Anda juga harus mengonfigurasi dua parameter berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah akan menggunakan CNAME untuk mengakses OSS. Nilai 0 berarti CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Atur parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di titik masuk program untuk menginisialisasi sumber daya global, seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Implementasinya ada di library apr. */
aos_pool_t *pool;
/* Buat memory pool. Parameter kedua adalah NULL, yang menunjukkan bahwa memory pool baru tidak mewarisi dari memory pool lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini mencakup konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan memori untuk opsi di dalam memory pool. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi klien, oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_list_t lifecycle_rule_list;
oss_lifecycle_rule_content_t *rule_content;
char *rule_id = NULL;
char *prefix = NULL;
char *status = NULL;
int days = INT_MAX;
char* date = "";
aos_str_set(&bucket, bucket_name);
/* Dapatkan aturan lifecycle bucket. */
aos_list_init(&lifecycle_rule_list);
resp_status = oss_get_bucket_lifecycle(oss_client_options, &bucket, &lifecycle_rule_list, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("get bucket lifecycle succeeded\n");
aos_list_for_each_entry(oss_lifecycle_rule_content_t, rule_content, &lifecycle_rule_list, node) {
rule_id = apr_psprintf(pool, "%.*s", rule_content->id.len, rule_content->id.data);
prefix = apr_psprintf(pool, "%.*s", rule_content->prefix.len, rule_content->prefix.data);
status = apr_psprintf(pool,"%.*s", rule_content->status.len, rule_content->status.data);
date = apr_psprintf(pool, "%.*s", rule_content->date.len, rule_content->date.data);
days = rule_content->days;
printf("rule_id: %s \n", rule_id);
printf("prefix: %s \n", prefix);
printf("status: %s \n", status);
printf("date: %s \n", date);
printf("days: %d \n", days);
}
} else {
printf("get 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);
}
/* Hapus memory pool. Ini melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
aos_http_io_deinitialize();
return 0;
}Hapus semua 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 "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket Anda berada. Misalnya, untuk wilayah China (Hangzhou), Endpoint-nya adalah https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Ganti dengan nama bucket Anda. Misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Ganti yourRegion dengan ID wilayah tempat bucket Anda berada. Misalnya, untuk wilayah China (Hangzhou), ID wilayahnya adalah cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Inisialisasi variabel aos_string_t dengan string char*. */
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
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"));
// Anda juga harus mengonfigurasi dua parameter berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah akan menggunakan CNAME untuk mengakses OSS. Nilai 0 berarti CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Atur parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di titik masuk program untuk menginisialisasi sumber daya global, seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Implementasinya ada di library apr. */
aos_pool_t *pool;
/* Buat memory pool. Parameter kedua adalah NULL, yang menunjukkan bahwa memory pool baru tidak mewarisi dari memory pool lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini mencakup konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan memori untuk opsi di dalam memory pool. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi klien, oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
/* Hapus aturan lifecycle bucket. */
aos_str_set(&bucket, bucket_name);
resp_status = oss_delete_bucket_lifecycle(oss_client_options, &bucket, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("delete bucket lifecycle succeeded\n");
} else {
printf("delete 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);
}
/* Hapus memory pool. Ini melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
aos_http_io_deinitialize();
return 0;
}Referensi
Untuk informasi selengkapnya mengenai operasi API untuk menetapkan aturan lifecycle, lihat PutBucketLifecycle.
Untuk informasi selengkapnya mengenai operasi API untuk melihat aturan lifecycle, lihat GetBucketLifecycle.
Untuk informasi selengkapnya mengenai operasi API untuk menghapus semua aturan lifecycle, lihat DeleteBucketLifecycle.