All Products
Search
Document Center

Object Storage Service:Aturan siklus hidup berdasarkan waktu modifikasi terakhir

Last Updated:Jun 27, 2026

Aturan siklus hidup berdasarkan waktu modifikasi terakhir secara otomatis mentransisikan objek ke kelas penyimpanan yang lebih dingin atau menghapusnya untuk mengurangi biaya penyimpanan.

Kasus penggunaan

  • Penyedia layanan kesehatan mengunggah catatan medis ke OSS. Catatan tersebut kadang-kadang diakses dalam enam bulan pertama, lalu jarang diakses. Aturan siklus hidup mentransisikannya ke Archive setelah 180 hari.

  • Perusahaan mengunggah rekaman hotline ke OSS. Rekaman tersebut aktif digunakan selama 2 bulan, kadang-kadang diakses hingga 6 bulan, dan tidak diperlukan lagi setelah 2 tahun. Aturan siklus hidup mentransisikannya ke Infrequent Access setelah 60 hari, ke Archive setelah 180 hari, dan menghapusnya setelah 730 hari.

  • Untuk menghapus semua objek dalam bucket, konfigurasikan aturan siklus hidup yang berlaku untuk seluruh bucket dan menghapus objek setelah satu hari.

Transisi ini menggunakan kelas penyimpanan OSS.

Batasan

Kondisi pencocokan

Aturan siklus hidup hanya mendukung pencocokan berdasarkan awalan (prefix) dan tag. Pencocokan menggunakan wildcard, berdasarkan akhiran (suffix), maupun ekspresi reguler tidak didukung.

Batasan kedaluwarsa part

Anda tidak dapat mengonfigurasi dua aturan siklus hidup atau lebih yang mencakup kebijakan siklus hidup part untuk objek dengan awalan yang tumpang tindih. Contoh:

  • Contoh 1

    Jika Anda mengonfigurasi aturan siklus hidup yang mencakup kebijakan part untuk suatu bucket, Anda tidak dapat mengonfigurasi aturan siklus hidup lain yang mencakup kebijakan part untuk objek apa pun dalam bucket tersebut.

  • Contoh 2

    Jika Anda mengonfigurasi aturan siklus hidup yang mencakup kebijakan part untuk objek dengan awalan dir1 dalam suatu bucket, Anda tidak dapat mengonfigurasi aturan siklus hidup lain yang mencakup kebijakan part untuk objek dengan awalan tumpang tindih, seperti dir1/dir2.

Batasan transisi kelas penyimpanan

  • Aturan siklus hidup tidak dapat mentransisikan objek Appendable ke kelas penyimpanan Cold Archive atau Deep Cold Archive. Untuk mentransisikan objek Appendable, Anda harus terlebih dahulu mengonversinya menjadi objek Normal dengan memanggil operasi SealAppendObject. Setelah itu, aturan siklus hidup dapat diterapkan.

  • Aturan siklus hidup tidak dapat digunakan untuk mentransisikan tautan simbolik ke kelas penyimpanan Infrequent Access (IA), Archive, Cold Archive, atau Deep Cold Archive.

Pertimbangan

Batas jumlah aturan

Satu bucket mendukung hingga 1.000 aturan siklus hidup. Satu aturan dapat mencakup kebijakan berdasarkan waktu modifikasi terakhir dan waktu akses terakhir sekaligus.

Semantik Timpa

Operasi PutBucketLifecycle menimpa konfigurasi aturan siklus hidup yang ada pada bucket. Misalnya, jika aturan siklus hidup bernama Rule1 telah dikonfigurasi untuk suatu bucket dan Anda ingin menambahkan aturan siklus hidup lain bernama Rule2 untuk bucket tersebut, lakukan langkah-langkah berikut:

  1. Ambil Rule1.

  2. Gabungkan Rule1 dan Rule2.

  3. Perbarui konfigurasi dengan aturan gabungan (Rule1+Rule2).

Waktu efektif

OSS memuat aturan siklus hidup dalam waktu 24 jam setelah aturan dibuat. Setelah dimuat, OSS menjalankannya setiap hari pukul 08.00.00 (UTC+8).

Untuk aturan berbasis hari, pastikan jarak antara waktu modifikasi terakhir objek dan waktu mulai eksekusi aturan (08.00 UTC+8) minimal 24 jam. Misalnya, jika suatu aturan menghapus objek satu hari setelah diunggah, OSS memproses objek yang diunggah pada 20 Juli 2020 sebagai berikut:

  • Objek yang diunggah sebelum pukul 08.00.00 (UTC+8) pada 20 Juli 2020 dihapus antara pukul 08.00.00 (UTC+8) pada 21 Juli 2020 hingga pukul 08.00.00 (UTC+8) pada 22 Juli 2020.

  • Objek yang diunggah setelah pukul 08.00.00 (UTC+8) pada 20 Juli 2020 dihapus antara pukul 08.00.00 (UTC+8) pada 22 Juli 2020 hingga pukul 08.00.00 (UTC+8) pada 23 Juli 2020.

Pembaruan aturan siklus hidup dapat mengganggu tugas siklus hidup hari ini. Hindari pembaruan yang terlalu sering.

Waktu penyelesaian eksekusi

  • Setelah aturan berlaku, operasi siklus hidup seperti penghapusan objek, transisi kelas penyimpanan, dan kedaluwarsa part unggah multi-bagian biasanya selesai dalam waktu 24 jam untuk hingga 1 miliar objek di wilayah China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), dan Singapura. Di wilayah lain, operasi ini biasanya selesai dalam waktu 24 jam untuk hingga 100 juta objek.

  • Eksekusi dapat memakan waktu lebih dari 24 jam—bahkan beberapa hari atau minggu dalam kasus tertentu—jika terdapat banyak objek yang perlu dipindai, banyak objek yang sesuai dengan aturan siklus hidup, banyak tag, banyak versi untuk satu objek, atau volume objek baru yang tinggi saat tugas siklus hidup sedang berjalan.

    Catatan

    Jika Pengendalian versi diaktifkan untuk bucket, operasi pada setiap versi objek dihitung sebagai operasi terpisah.

Penagihan

Transisi kelas penyimpanan dan penghapusan dikenai biaya penyimpanan dan permintaan. Biaya Siklus Hidup.

Bucket OSS-HDFS

  • Aturan siklus hidup untuk file OSS

    Untuk mengonfigurasi atau memodifikasi aturan siklus hidup berdasarkan waktu modifikasi terakhir agar berlaku untuk semua objek dalam bucket yang telah diaktifkan OSS-HDFS, gunakan elemen NOT untuk mengecualikan objek yang disimpan dalam direktori .dlsdata/. Hal ini mencegah tindakan penghapusan objek atau konversi kelas penyimpanan yang dipicu oleh aturan siklus hidup diterapkan pada data OSS-HDFS dan berdampak pada operasi baca-tulis data OSS-HDFS.

    p571593..jpeg

  • Aturan siklus hidup untuk file HDFS

    Untuk menyusun data yang sering diakses di Standard dan data yang jarang diakses di Infrequent Access, Archive, atau Deep Archive, gunakan fitur Gunakan penyimpanan bertingkat, yang didasarkan pada aturan siklus hidup.

Aturan siklus hidup dengan Pengendalian versi

Transisi kelas penyimpanan siklus hidup tidak membuat versi sebelumnya.

Komponen

Kondisi filter

  • Cocokkan berdasarkan awalan: Mencocokkan objek dan part dengan awalan tertentu. Anda dapat membuat beberapa aturan dengan awalan berbeda yang tidak tumpang tindih. Penamaan awalan mengikuti aturan penamaan Objek.

  • Cocokkan berdasarkan tag: Mencocokkan objek berdasarkan pasangan kunci-nilai tag tertentu. Satu aturan dapat memiliki beberapa tag; aturan tersebut hanya berlaku untuk objek yang mengandung semua tag yang ditentukan.

    Tag aturan siklus hidup

    Tag objek

    Cocok

    a:1,b:2

    a:1

    Tidak

    a:1,b:3

    Tidak

    a:1,b:2

    Ya

    a:1,b:2,c:3

    Ya

    Catatan

    Aturan berbasis tag tidak berlaku untuk part.

  • Cocokkan berdasarkan awalan dan tag: Mencocokkan objek yang memiliki awalan dan filter tag tertentu.

  • Berlaku untuk seluruh bucket: Mencocokkan semua objek dan part dalam bucket.

  • Elemen NOT: Mengecualikan objek tertentu dari aturan siklus hidup yang seharusnya cocok berdasarkan awalan dan tag. Tentukan awalan dan tag yang akan dikecualikan. Contoh elemen NOT.

    Penting
    • Aturan siklus hidup dapat mencakup beberapa elemen NOT. Fitur ini sedang dalam pratinjau undangan saja. Hubungi dukungan teknis untuk meminta akses.

    • Satu bucket mendukung hingga 1.000 elemen NOT. Satu aturan mendukung hingga 100 elemen NOT. Total elemen Prefix di semua aturan dibatasi hingga 2.000.

    • Setelah mengonfigurasi beberapa elemen NOT, gunakan konsol untuk mengelola aturan siklus hidup Anda.

    • Jika fitur beberapa elemen NOT belum diaktifkan, jangan buat beberapa aturan yang masing-masing mengecualikan subdirektori berbeda. Elemen NOT di aturan berbeda beroperasi secara independen. Misalnya, jika rule1 hanya mengecualikan dir/p1/, maka dir/p2/ tetap dicocokkan dan dihapus oleh rule1. Jika rule2 hanya mengecualikan dir/p2/, maka dir/p1/ tetap dicocokkan dan dihapus oleh rule2. Hal ini mengakibatkan semua file di bawah awalan dir/ dihapus.

Kedaluwarsa objek dan tindakan

  • Kedaluwarsa dalam hari: Tindakan yang ditentukan dieksekusi N hari setelah waktu modifikasi terakhir objek. Berlaku untuk semua objek dalam bucket non-versi dan untuk versi saat ini dalam bucket ber-versi.

  • Kedaluwarsa pada tanggal: Semua objek yang terakhir dimodifikasi sebelum tanggal yang ditentukan kedaluwarsa, dan tindakan dieksekusi. Berlaku untuk semua objek dalam bucket non-versi dan untuk versi saat ini dalam bucket ber-versi.

  • Hari sejak menjadi non-current: Versi non-current kedaluwarsa N hari setelah menjadi non-current, dan tindakan dieksekusi.

Transisikan atau hapus objek yang kedaluwarsa sesuai yang ditentukan dalam Elemen konfigurasi siklus hidup.

Kedaluwarsa part dan tindakan

  • Kedaluwarsa dalam hari: Part dihapus setelah N hari sejak waktu modifikasi terakhirnya.

  • Kedaluwarsa pada tanggal: Semua part yang terakhir dimodifikasi sebelum tanggal tertentu dihapus.

Cara kerja aturan

Awalan berbeda

Misalnya, suatu bucket berisi objek berikut:

logs/programl/log1.txt
logs/program2/log2.txt
logs/program3/log3.txt
doc/readme.txt

Jika aturan siklus hidup menentukan awalan logs/, aturan tersebut hanya berlaku untuk objek yang diawali dengan logs/. Jika awalan adalah doc/readme.txt, aturan hanya berlaku untuk objek doc/readme.txt.

Catatan

Anda dapat menentukan awalan yang berisi karakter Tionghoa untuk aturan siklus hidup.

Saat Anda melakukan operasi GET atau HEAD pada objek yang sesuai dengan kebijakan kedaluwarsa, OSS menambahkan header respons x-oss-expiration. Nilai expiry-date menunjukkan tanggal kedaluwarsa objek, sedangkan rule-id menunjukkan ID aturan yang cocok.

Awalan dan tag yang sama

Jika beberapa aturan dengan awalan dan tag yang sama berlaku untuk suatu objek, tindakan hapus didahulukan daripada transisi kelas penyimpanan. Misalnya, jika rule1 menghapus objek dengan awalan abc dan tag a=1 setelah 20 hari, transisi kelas penyimpanan dari rule2 tidak berlaku.

Aturan

Awalan

Tag

Tindakan

rule1

abc

a=1

Hapus setelah 20 hari

rule2

abc

a=1

Transisi ke Archive Storage setelah 20 hari

Awalan tumpang tindih

rule1 mentransisikan semua objek dengan tag a=1 ke Infrequent Access (IA) setelah 10 hari. rule2 menghapus objek dengan awalan abc dan tag a=1 setelah 120 hari.

Aturan

Awalan

Tag

Tindakan

rule1

-

a=1

Transisi ke IA setelah 10 hari

rule2

abc

a=1

Hapus setelah 120 hari

rule3 mentransisikan semua objek dengan tag a=1 ke Archive setelah 20 hari. Karena objek di Archive tidak dapat ditransisikan ke Infrequent Access (IA), rule4—yang mentransisikan objek dengan awalan abc dan tag a=1 ke IA setelah 30 hari—tidak berlaku.

Aturan

Awalan

Tag

Tindakan

rule3

-

a=1

Transisi ke Archive Storage setelah 20 hari

rule4

abc

a=1

Transisi ke IA setelah 30 hari

Elemen NOT

Jika Anda mengonfigurasi beberapa aturan siklus hidup untuk bucket yang sama dan salah satunya mencakup elemen NOT, logika NOT hanya berlaku dalam aturan tersebut. Contoh:

  • Contoh 1

    • Aturan siklus hidup 1 menghapus objek dengan awalan dir/ di examplebucket setelah 100 hari.

    • Aturan siklus hidup 2 menggunakan elemen NOT untuk menghapus semua objek di examplebucket kecuali yang memiliki awalan dir/ setelah 50 hari.

    Setelah aturan siklus hidup ini aktif, objek di examplebucket dihapus sebagai berikut:

    Objek

    Perilaku penghapusan

    Objek dengan awalan dir/

    Hapus setelah 100 hari

    Objek tanpa awalan dir/

    Hapus setelah 50 hari

  • Contoh 2

    • Aturan siklus hidup 1 menggunakan elemen NOT untuk menghapus semua objek di examplebucket kecuali yang memiliki tag (key1:value1) setelah 30 hari.

    • Aturan siklus hidup 2 menghapus semua objek di examplebucket dengan tag (key2:value2) setelah 50 hari.

    Setelah aturan siklus hidup ini aktif, objek di examplebucket dihapus sebagai berikut:

    Objek

    Perilaku penghapusan

    Objek tanpa tag key1:value1 atau key2:value2

    Hapus setelah 30 hari

    Objek hanya dengan tag key1:value1

    Tidak dihapus

    Objek hanya dengan tag key2:value2

    Hapus setelah 30 hari

    Objek dengan kedua tag key1:value1 dan key2:value2

    Hapus setelah 50 hari

Prosedur

Konsol OSS

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi kiri, klik Buckets. Di halaman yang muncul, klik nama bucket target.

  3. Di panel navigasi kiri, pilih Data Management > Lifecycle.

  4. Di halaman Lifecycle, klik Create Rule.

    Catatan

    Sakelar Enable Access Tracking di halaman Lifecycle tidak diperlukan untuk aturan yang hanya berdasarkan waktu modifikasi terakhir. Fitur ini hanya berlaku untuk Aturan siklus hidup berdasarkan waktu akses terakhir dan dikenai biaya tambahan.

  5. Di panel Create Lifecycle Rule, konfigurasikan aturan menggunakan tabel berikut.

    • Jika Pengendalian versi dinonaktifkan untuk bucket:

      Bagian

      Parameter

      Deskripsi

      Basic Settings

      Status

      Status aturan. Nilai yang valid: Start dan Disable.

      • Jika diaktifkan, OSS mentransisikan atau menghapus objek berdasarkan aturan.

      • Jika dinonaktifkan, tugas siklus hidup dihentikan sementara.

      Applied To

      Cakupan aturan. Pilih Object Prefix atau Whole Bucket.

      Catatan

      Jika Anda memilih By Prefix, Anda harus memasukkan awalan lengkap. Misalnya, untuk menerapkan aturan ke semua objek dalam direktori src/dir1/, atur awalan menjadi src/dir1/. Awalan dir1 tidak akan mencocokkan objek ini sebagaimana dimaksud.

      Allow Overlapped Prefixes

      Secara default, OSS memeriksa apakah awalan aturan siklus hidup tumpang tindih. Misalnya, Anda mengonfigurasi dua aturan berikut dengan awalan tumpang tindih:

      • Aturan 1

        Menghapus semua objek dengan awalan dir1/ 180 hari setelah waktu modifikasi terakhirnya.

      • Aturan 2

        Mentransisikan semua objek dengan awalan dir1/dir2/ ke kelas penyimpanan Infrequent Access 30 hari setelah waktu modifikasi terakhirnya, dan menghapusnya 60 hari setelah waktu modifikasi terakhirnya.

      Jika Anda tidak memilih opsi ini saat mengonfigurasi Aturan 2, OSS mendeteksi bahwa objek dalam direktori dir1/dir2/ cocok dengan dua aturan penghapusan. Akibatnya, OSS menolak Aturan 2 dan melaporkan kesalahan Overlap for same action type Expiration.

      Jika Anda memilih opsi ini saat mengonfigurasi Aturan 2, objek dalam direktori dir1/dir2/ ditransisikan ke kelas penyimpanan Infrequent Access 30 hari setelah waktu modifikasi terakhirnya dan dihapus 60 hari setelah waktu modifikasi terakhirnya. Objek lain dalam direktori dir1/ dihapus 180 hari setelah waktu modifikasi terakhirnya.

      Catatan

      Jika Anda mengonfigurasi beberapa aturan dan salah satunya berlaku untuk seluruh bucket, hal ini dianggap sebagai kasus awalan tumpang tindih.

      Prefix

      Awalan objek yang menjadi sasaran aturan.

      • Jika Anda mengatur awalan menjadi img, aturan berlaku untuk semua objek yang namanya diawali dengan img, seperti imgtest.png dan img/example.jpg.

      • Jika Anda mengatur awalan menjadi img/, aturan berlaku untuk semua objek yang namanya diawali dengan img/, seperti img/example.jpg dan img/test.jpg.

      Tag

      Terapkan aturan hanya ke objek dengan tag tertentu.

      • Jika Anda tidak mengatur awalan tetapi menentukan tag dengan kunci=a dan nilai=1, aturan berlaku untuk semua objek dalam bucket dengan tag a=1.

      • Jika Anda mengatur awalan menjadi img dan menentukan tag dengan kunci=a dan nilai=1, aturan berlaku untuk semua objek dalam bucket yang namanya diawali dengan img dan memiliki tag a=1.

      Pemberian tag objek.

      NOT

      Opsi NOT mengecualikan objek dengan awalan dan tag tertentu dari aturan siklus hidup.

      Penting
      • Saat Anda mengaktifkan opsi NOT, Anda harus menentukan setidaknya awalan atau tag.

      • Kunci tag yang ditentukan dalam kondisi NOT tidak boleh sama dengan kunci yang ditentukan dalam kondisi Tag.

      • Anda tidak dapat mengonfigurasi kebijakan kedaluwarsa part saat opsi NOT diaktifkan.

      Object Size

      Terapkan aturan ke objek dalam rentang ukuran tertentu.

      • Minimum Size: Aturan siklus hidup berlaku untuk objek yang lebih besar dari nilai ini. Nilainya harus lebih besar dari 0 B dan kurang dari 5 TB.

      • Maximum Size: Aturan siklus hidup berlaku untuk objek yang lebih kecil dari nilai ini. Nilainya harus lebih besar dari 0 B dan kurang dari atau sama dengan 5 TB.

      Penting

      Jika Anda menentukan ukuran minimum dan maksimum objek dalam aturan siklus hidup yang sama:

      • Pastikan ukuran maksimum lebih besar dari ukuran minimum.

      • Kebijakan kedaluwarsa part tidak dapat dikonfigurasi.

      • Anda tidak dapat mengonfigurasi kebijakan untuk membersihkan penanda hapus.

      Policy for Objects

      Object Lifecycle

      Pilih kebijakan kedaluwarsa untuk objek. Pilih By Days, By Date, atau Disabled. Jika Anda memilih Disabled, kebijakan kedaluwarsa objek tidak berlaku.

      Lifecycle-based Rules

      Konfigurasikan aturan untuk mentransisikan kelas penyimpanan objek atau menghapus objek yang kedaluwarsa. Pilih Infrequent Access, Archive, Cold Archive, Deep Cold Archive, atau Data Deletion.

      Misalnya, jika Anda mengatur Object Lifecycle ke By Date dan menentukan 24 September 2023, objek yang terakhir dimodifikasi sebelum tanggal ini secara otomatis dihapus dan tidak dapat dipulihkan.

      Policy for Parts

      Part Lifecycle

      Konfigurasikan kebijakan kedaluwarsa untuk part. Opsi ini tidak tersedia jika Anda telah memilih Tag. Atur kebijakan kedaluwarsa part ke By Days atau By Date, atau pilih Disabled. Jika Anda memilih Disabled, kebijakan kedaluwarsa part tidak berlaku.

      Penting

      Aturan siklus hidup harus mencakup setidaknya kebijakan kedaluwarsa objek atau kebijakan kedaluwarsa part.

      Rules for Parts

      Menentukan kapan part kedaluwarsa berdasarkan jumlah hari atau tanggal yang dipilih dalam kebijakan kedaluwarsa part. Part yang kedaluwarsa secara otomatis dihapus dan tidak dapat dipulihkan.

    • Jika Pengendalian versi diaktifkan untuk bucket:

      Parameter di bagian Basic Settings dan Policy for Parts dikonfigurasi sama seperti untuk bucket tanpa Pengendalian versi. Tabel berikut hanya menjelaskan parameter yang berbeda.

      Penting

      Sebelum mengonfigurasi aturan siklus hidup, perhatikan bahwa jika Pengendalian versi diaktifkan pada bucket yang berfungsi sebagai tujuan replikasi lintas wilayah, penanda hapus yang disinkronkan dari bucket sumber mengubah versi saat ini objek dengan nama yang sama di bucket tujuan menjadi versi non-current. Oleh karena itu, konfigurasikan aturan pembersihan untuk versi non-current dengan hati-hati untuk mencegah penghapusan data yang tidak disengaja.

      Bagian

      Parameter

      Deskripsi

      Policy for Current Versions

      Clean up expired object delete marker

      Jika Pengendalian versi diaktifkan, opsi Clean Up Expired Object Delete Marker ditambahkan ke kebijakan kedaluwarsa. Opsi lainnya sama seperti untuk bucket yang Pengendalian versinya dinonaktifkan.

      Jika Anda memilih opsi ini, OSS menghapus penanda hapus objek yang kedaluwarsa jika itu satu-satunya versi objek tersebut. Jika objek memiliki beberapa versi dan versi terbaru adalah penanda hapus, OSS mempertahankan penanda hapus tersebut. Penanda hapus.

      Penting

      Aturan ini tidak membersihkan penanda hapus jika versi non-current ada. Kami menyarankan Anda segera membersihkan penanda hapus dan versi non-current yang tidak perlu. Jika tidak, jumlah penanda hapus yang berlebihan dapat menurunkan kinerja daftar.

      Policy for Previous Versions

      Object Lifecycle

      Atur kebijakan kedaluwarsa untuk versi non-current. Pilih By Days atau Disabled. Jika Anda memilih Disabled, kebijakan kedaluwarsa tidak berlaku.

      Lifecycle-based Rules

      Tentukan jumlah hari (N). Versi non-current kedaluwarsa N hari setelah menjadi non-current, dan tindakan yang ditentukan dilakukan pada hari setelah kedaluwarsa. Misalnya, jika Anda mengatur nilainya menjadi 30, objek yang menjadi versi non-current pada 1 September 2023, ditransisikan ke kelas penyimpanan yang ditentukan atau dihapus pada 1 Oktober 2023.

      Penting

      Anda dapat menentukan kapan objek menjadi versi non-current dengan memeriksa waktu modifikasi terakhir versi berikutnya dari objek tersebut.

  6. Klik OK.

    Setelah aturan siklus hidup disimpan, Anda dapat melihatnya di daftar aturan.

Alibaba Cloud SDK

Contoh berikut mengonfigurasi aturan siklus hidup menggunakan SDK umum. Untuk semua SDK yang didukung, lihat Ikhtisar SDK.

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.LifecycleRule;
import com.aliyun.oss.model.SetBucketLifecycleRequest;
import com.aliyun.oss.model.StorageClass;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket. 
        String bucketName = "examplebucket";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Buat permintaan menggunakan SetBucketLifecycleRequest. 
            SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);

            // Tentukan ID aturan siklus hidup. 
            String ruleId0 = "rule0";
            // Tentukan awalan yang ingin dicocokkan oleh aturan siklus hidup. 
            String matchPrefix0 = "A0/";
            // Tentukan tag yang ingin dicocokkan oleh aturan siklus hidup. 
            Map<String, String> matchTags0 = new HashMap<String, String>();
            // Tentukan kunci dan nilai tag. Dalam contoh ini, kunci diatur menjadi owner dan nilai diatur menjadi 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/";

            // Atur waktu kedaluwarsa menjadi tiga hari setelah waktu modifikasi terakhir. 
            LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
            rule.setTags(matchTags0);
            request.AddLifecycleRule(rule);

            // Tentukan bahwa objek yang dibuat sebelum tanggal tertentu kedaluwarsa. 
            rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
            rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setTags(matchTags1);
            request.AddLifecycleRule(rule);

            // Tentukan bahwa part kedaluwarsa tiga hari setelah terakhir dimodifikasi. 
            rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setExpirationDays(3);
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // Tentukan bahwa part yang dibuat sebelum tanggal tertentu kedaluwarsa. 
            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);

            // Tentukan bahwa kelas penyimpanan objek diubah menjadi IA 10 hari setelah terakhir dimodifikasi, dan menjadi Archive 30 hari setelah terakhir dimodifikasi. 
            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);

            // Tentukan bahwa kelas penyimpanan objek yang terakhir dimodifikasi sebelum 12 Oktober 2022 diubah menjadi Archive. 
            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);

            // Tentukan bahwa rule6 dikonfigurasi untuk bucket yang diaktifkan Pengendalian versi. 
            rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
            // Tentukan bahwa kelas penyimpanan objek diubah menjadi Archive 365 hari setelah objek terakhir dimodifikasi. 
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(365);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            // Konfigurasikan aturan siklus hidup untuk secara otomatis menghapus penanda hapus yang kedaluwarsa. 
            rule.setExpiredDeleteMarker(true);
            // Tentukan bahwa kelas penyimpanan versi sebelumnya objek diubah menjadi IA 10 hari setelah objek terakhir dimodifikasi. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
            // Tentukan bahwa kelas penyimpanan versi sebelumnya objek diubah menjadi Archive 20 hari setelah objek terakhir dimodifikasi. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
            // Tentukan bahwa versi sebelumnya objek dihapus 30 hari setelah objek terakhir dimodifikasi. 
            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);

            // Kirim permintaan untuk mengonfigurasi aturan siklus hidup. 
            ossClient.setBucketLifecycle(request);

            // Kueri aturan siklus hidup yang dikonfigurasi untuk bucket. 
            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("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan tanggapan kesalahan karena alasan tertentu.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

PHP

<?php

// Sertakan file autoload untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;

// Jelaskan parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada', 'required' => True], // (Wajib) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS', 'required' => False], // (Opsional) Tentukan endpoint OSS.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Wajib) Tentukan nama bucket.
];

// Hasilkan daftar opsi panjang untuk mengurai parameter baris perintah.
$longopts = \array_map(function ($key) {
    return "$key:"; // Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
}, array_keys($optsdesc));

// Urai parameter baris perintah.
$options = getopt("", $longopts); 

// Periksa apakah parameter wajib hilang.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Kesalahan: argumen berikut wajib: --$key, $help"; // Tampilkan parameter wajib yang hilang.
        exit(1); 
    }
}

// Dapatkan nilai parameter baris perintah dan tetapkan nilai ke variabel.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.

// Muat ID AccessKey dan rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial.
$cfg->setCredentialsProvider($credentialsProvider);

// Tentukan wilayah.
$cfg->setRegion($region);

// Jika endpoint disediakan, tentukan endpoint.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Definisikan aturan siklus hidup yang memindahkan objek yang namanya diawali dengan "log/" ke IA 30 hari setelah terakhir dimodifikasi.
$lifecycleRule = new Oss\Models\LifecycleRule(
    prefix: 'log/', // Awalan nama objek.
    transitions: array(
        new Oss\Models\LifecycleRuleTransition(
            days: 30, // Tentukan hari.
            storageClass: 'IA' // Ubah ke IA.
        )
    ),
    id: 'rule', // ID aturan.
    status: 'Enabled' // Aktifkan aturan.
);

// Buat konfigurasi siklus hidup dan tambahkan aturan siklus hidup ke konfigurasi.
$lifecycleConfiguration = new LifecycleConfiguration(
    rules: array($lifecycleRule)
);

// Buat permintaan untuk mengatur konfigurasi siklus hidup dan teruskan konfigurasi siklus hidup.
$request = new Oss\Models\PutBucketLifecycleRequest(
    bucket: $bucket,
    lifecycleConfiguration: $lifecycleConfiguration
);

// Panggil metode putBucketLifecycle untuk mengonfigurasi aturan siklus hidup.
$result = $client->putBucketLifecycle($request);

// Tampilkan hasil.
printf(
    'kode status:' . $result->statusCode . PHP_EOL . // Kode status respons HTTP.
    'ID permintaan:' . $result->requestId . PHP_EOL // ID permintaan.
);

Node.js

const OSS = require('ali-oss')

const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou. 
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Tentukan nama bucket. 
  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: {
    // Tentukan bahwa versi saat ini objek kedaluwarsa tiga hari setelah objek terakhir dimodifikasi. 
    days: 3 
  }
}
putBucketLifecycle(lifecycle1)

const lifecycle2 = {
  id: 'rule2',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // Tentukan bahwa objek yang dibuat sebelum tanggal tertentu kedaluwarsa. 
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle2)

const lifecycle3 = {
  id: 'rule3',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // Tentukan bahwa part kedaluwarsa dalam tiga hari. 
    days: 3 
  },
}
putBucketLifecycle(lifecycle3)

const lifecycle4 = {
  id: 'rule4',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // Tentukan bahwa part yang dibuat sebelum tanggal tertentu kedaluwarsa. 
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle4)

const lifecycle5 = {
  id: 'rule5',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    // Tentukan bahwa kelas penyimpanan versi saat ini objek diubah menjadi Archive 20 hari setelah objek terakhir dimodifikasi. 
    days: 20,
    storageClass: 'Archive'
  },
  expiration: {
    // Tentukan bahwa versi saat ini objek kedaluwarsa 21 hari setelah objek terakhir dimodifikasi. 
    days: 21 
  },
}
putBucketLifecycle(lifecycle5)

const lifecycle6 = {
  id: 'rule6',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    //Tentukan bahwa kelas penyimpanan objek yang dibuat sebelum tanggal tertentu diubah menjadi Archive. 
    createdBeforeDate: '2023-02-19T00:00:00.000Z', 
    storageClass: 'Archive'
  },
  expiration: {
    // Tentukan bahwa objek yang dibuat sebelum tanggal tertentu dihapus. 
    createdBeforeDate: '2023-01-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle6)

const lifecycle7 = {
  id: 'rule7',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // Tentukan bahwa penanda hapus dihapus secara otomatis saat kedaluwarsa. 
    expiredObjectDeleteMarker: true 
  }
}
putBucketLifecycle(lifecycle7)

const lifecycle8 = {
  id: 'rule8',
  status: 'Enabled',
  prefix: 'foo/', 
  // Tentukan bahwa kelas penyimpanan versi sebelumnya objek diubah menjadi IA 10 hari setelah objek terakhir dimodifikasi. 
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  }
}
putBucketLifecycle(lifecycle8)

const lifecycle9 = {
  id: 'rule9',
  status: 'Enabled',
  prefix: 'foo/', 
  // Tentukan bahwa kelas penyimpanan versi sebelumnya objek diubah menjadi IA 10 hari setelah objek terakhir dimodifikasi. 
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  },
  // Tentukan tag untuk objek yang ingin Anda cocokkan dengan aturan. 
  tag: [{
    key: 'key1',
    value: 'value1'
  },
   {
     key: 'key2',
     value: 'value2'
   }]
}
putBucketLifecycle(lifecycle9)

Python

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah untuk menerima parameter yang dimasukkan pengguna.
parser = argparse.ArgumentParser(description="contoh put bucket lifecycle")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)

# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)

# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')

def main():
  # Urai argumen baris perintah.
  args = parser.parse_args()

  # Muat kredensial (ID AccessKey dan rahasia AccessKey) dari variabel lingkungan.
  credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

  # Muat konfigurasi default SDK.
  cfg = oss.config.load_default()

  # Atur penyedia kredensial.
  cfg.credentials_provider = credentials_provider

  # Atur wilayah tempat bucket berada.
  cfg.region = args.region

  # Jika endpoint kustom disediakan oleh pengguna, atur dalam konfigurasi.
  if args.endpoint is not None:
    cfg.endpoint = args.endpoint

    # Inisialisasi klien OSS menggunakan objek konfigurasi.
  client = oss.Client(cfg)

  result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
    bucket=args.bucket,
    lifecycle_configuration=oss.LifecycleConfiguration(
      rules=[oss.LifecycleRule(
        # Tentukan aturan siklus hidup rule1. Dalam aturan ini, objek yang memiliki awalan foo/ dan tag k1:v1 dikonversi ke kelas penyimpanan Infrequent Access (IA) 30 hari setelah terakhir dimodifikasi.
        id='rule1',
        status='Enabled',
        prefix='foo/',
        transitions=[oss.LifecycleRuleTransition(
          days=30,
          storage_class=oss.StorageClassType.IA,
          is_access_time=False, # Atur ke false, yang menunjukkan bahwa kebijakan berdasarkan waktu modifikasi terakhir.
        )],
        tags=[oss.Tag(
          key='k1',
          value='v1',
        )],
      ), oss.LifecycleRule(
        # Tentukan aturan siklus hidup rule2. Dalam aturan ini, untuk objek yang memiliki awalan dir/, penanda hapus dihapus secara otomatis jika objek berada dalam bucket yang diaktifkan Pengendalian versi dan hanya memiliki penanda hapus. Versi non-current objek kedaluwarsa dan dihapus setelah 30 hari. Versi non-current objek dikonversi ke kelas penyimpanan IA setelah 10 hari.
        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,
        )],
      )]
    ),
  ))

  # Cetak kode status dan ID permintaan operasi.
  print(f'kode status: {result.status_code}, '  # Kode status HTTP, yang menunjukkan apakah permintaan berhasil.
        f'ID permintaan: {result.request_id}')    # ID permintaan, yang digunakan untuk melacak log permintaan dan debugging.


if __name__ == "__main__":
  # Titik masuk program yang memanggil fungsi main untuk mengeksekusi logika.
  main()

C#

using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket. 
var bucketName = "examplebucket";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan modifikasi parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
    // Buat aturan siklus hidup pertama. 
    LifecycleRule lcr1 = new LifecycleRule()
    {
        ID = "delete obsoleted files",
        Prefix = "obsoleted/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 3,
        Tags = new Tag[1]
    };
    // Tentukan tag untuk aturan. 
    var tag1 = new Tag
    {
        Key = "project",
        Value = "projectone"
    };

    lcr1.Tags[0] = tag1;

    // Buat aturan siklus hidup kedua. 
    LifecycleRule lcr2 = new LifecycleRule()
    {
        ID = "delete temporary files",
        Prefix = "temporary/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 20,
        Tags = new Tag[1]         
    };
    // Tentukan tag untuk aturan. 
    var tag2 = new Tag
    {
        Key = "user",
        Value = "jsmith"
    };
    lcr2.Tags[0] = tag2;

    // Tentukan bahwa part kedaluwarsa 30 hari setelah terakhir dimodifikasi. 
    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]
    {
        // Tentukan bahwa kelas penyimpanan versi sebelumnya objek dikonversi menjadi IA 90 hari setelah terakhir dimodifikasi. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.IA,
            NoncurrentDays = 90
        },
        // Tentukan bahwa kelas penyimpanan versi sebelumnya objek dikonversi menjadi Archive 180 hari setelah terakhir dimodifikasi. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.Archive,
            NoncurrentDays = 180
        }
    };
    setBucketLifecycleRequest.AddLifecycleRule(lcr1);
    setBucketLifecycleRequest.AddLifecycleRule(lcr2);
    setBucketLifecycleRequest.AddLifecycleRule(lcr3);

    // Konfigurasikan aturan siklus hidup. 
    client.SetBucketLifecycle(setBucketLifecycleRequest);
    Console.WriteLine("Set bucket:{0} Lifecycle berhasil ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nIDPermintaan:{2}\tIDHost:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
}

Android

PutBucketLifecycleRequest request = new PutBucketLifecycleRequest();
request.setBucketName("examplebucket");

BucketLifecycleRule rule1 = new BucketLifecycleRule();
// Atur ID aturan dan awalan file.
rule1.setIdentifier("1");
rule1.setPrefix("A");
// Tentukan apakah akan mengeksekusi aturan siklus hidup. Jika nilainya true, OSS secara berkala mengeksekusi aturan. Jika nilainya false, OSS mengabaikan aturan.
rule1.setStatus(true);
// Kedaluwarsa objek 200 hari setelah waktu modifikasi terakhir.
rule1.setDays("200");
// Transisi objek ke kelas penyimpanan Archive setelah 30 hari.
rule1.setArchiveDays("30");
// Kedaluwarsa unggah multi-bagian yang tidak lengkap setelah 3 hari.
rule1.setMultipartDays("3");
// Transisi objek ke kelas penyimpanan Infrequent Access (IA) setelah 15 hari.
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)
{
    /* Inisialisasi informasi akun OSS. */
    
    /* Atur yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region menjadi 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");

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

    /* Tentukan aturan siklus hidup. */
    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 siklus hidup untuk bucket yang diaktifkan Pengendalian versi. */
    auto rule3 = LifecycleRule();
    rule3.setID("rule3");
    rule3.setPrefix("test3/");
    rule3.setStatus(RuleStatus::Disabled);

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

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

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

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

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

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

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

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "SetBucketLifecycle gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",IDpermintaan:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

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

C

#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket Anda berada. Misalnya, untuk wilayah China (Hangzhou), Endpoint 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 wilayah 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);
    }
    /* Pool memori (pool) untuk manajemen memori setara dengan apr_pool_t. Implementasinya ada di pustaka apr. */
    aos_pool_t *pool;
    /* Buat pool memori. Parameter kedua adalah NULL, yang menunjukkan bahwa pool memori baru tidak mewarisi dari pool memori 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 dalam pool memori. */
    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 kedaluwarsa 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");
    /* Atur 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);
    /* Atur aturan siklus hidup. */
    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 berhasil\n");
    } else {
        printf("put bucket lifecycle gagal, kode:%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);
    }
    /* Lepaskan pool memori. 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;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint China (Hangzhou) digunakan sebagai contoh. Ganti dengan Endpoint aktual.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan nama bucket.
bucket = client.get_bucket('examplebucket')
# Atur aturan siklus hidup.
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"
)

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Fungsi init menginisialisasi argumen baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Urai argumen baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket disediakan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib")
	}

	// Periksa apakah wilayah disediakan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib")
	}

	// Muat konfigurasi default, dan atur penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengatur aturan siklus hidup untuk bucket.
	request := &oss.PutBucketLifecycleRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		LifecycleConfiguration: &oss.LifecycleConfiguration{
			Rules: []oss.LifecycleRule{
				{
					// Tentukan aturan siklus hidup "rule1".
					// Aturan ini mentransisikan objek dengan awalan "foo/" dan tag {k1: v1}
					// ke kelas penyimpanan Infrequent Access (IA) 30 hari setelah terakhir dimodifikasi.
					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), // Atur ke false untuk aturan berdasarkan waktu modifikasi terakhir.
						},
					},
					Tags: []oss.Tag{
						{
							Key:   oss.Ptr("k1"),
							Value: oss.Ptr("v1"),
						},
					},
				},
				{
					// Tentukan aturan siklus hidup "rule2". Aturan ini berlaku untuk objek dengan awalan "dir/".
					// Aturan ini secara otomatis menghapus penanda hapus objek yang kedaluwarsa, menghapus versi non-current setelah 30 hari,
					// dan mentransisikan versi non-current ke kelas penyimpanan IA 10 hari setelah menjadi non-current.
					ID:     oss.Ptr("rule2"),
					Prefix: oss.Ptr("dir/"),
					Status: oss.Ptr("Enabled"),
					Expiration: &oss.LifecycleRuleExpiration{
						Days:                      oss.Ptr(int32(10)),
						ExpiredObjectDeleteMarker: oss.Ptr(true),
					},
					NoncurrentVersionExpiration: &oss.NoncurrentVersionExpiration{
						NoncurrentDays: oss.Ptr(int32(30)),
					},
					NoncurrentVersionTransitions: []oss.NoncurrentVersionTransition{{
						NoncurrentDays: oss.Ptr(int32(10)),
						StorageClass:   oss.StorageClassIA,
						IsAccessTime:   oss.Ptr(false), // Atur ke false untuk aturan berdasarkan waktu modifikasi terakhir.
					}},
				},
			},
		},
	}

	// Atur aturan siklus hidup untuk bucket.
	result, err := client.PutBucketLifecycle(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengatur siklus hidup bucket %v", err)
	}

	// Cetak hasil pengaturan aturan siklus hidup.
	log.Printf("hasil pengaturan siklus hidup bucket:%#v\n", result)
}

ossutil

Konfigurasikan aturan siklus hidup dengan ossutil (Instal ossutil).

Contoh berikut mengatur aturan siklus hidup untuk bucket 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\"}}}"

put-bucket-lifecycle.

API terkait

Untuk mengonfigurasi aturan siklus hidup melalui REST API (memerlukan perhitungan tanda tangan), gunakan PutBucketLifecycle.

FAQ

FAQ

Cara cepat menghapus semua objek dalam bucket menggunakan kebijakan siklus hidup

Bucket non-versi

  1. Buka halaman Buckets di konsol OSS dan klik nama bucket.

  2. Di pohon navigasi kiri, pilih Content Security > Versioning dan periksa apakah Pengendalian versi diaktifkan.

    未开启版本控制

  3. Di pohon navigasi kiri, pilih Data Management > Lifecycle. Konfigurasikan aturan siklus hidup untuk secara otomatis menghapus semua objek dalam bucket satu hari setelah modifikasi terakhirnya, dan menghapus part yang dihasilkan lebih dari satu hari lalu.

    screenshot_2025-07-01_17-59-32

Bucket ber-versi

Anda dapat mengonfigurasi aturan siklus hidup untuk secara otomatis menghapus semua objek dan part dari tugas unggah multi-bagian yang tidak lengkap dalam bucket non-versi.

  1. Buka halaman Buckets di konsol OSS dan klik nama bucket.

  2. Di pohon navigasi kiri, pilih Content Security > Versioning dan periksa apakah Pengendalian versi diaktifkan.

    未开启版本控制

  3. Di pohon navigasi kiri, pilih Data Management > Lifecycle. Konfigurasikan aturan siklus hidup untuk secara otomatis menghapus semua objek dalam bucket satu hari setelah modifikasi terakhirnya, dan menghapus part yang dihasilkan lebih dari satu hari lalu.

    screenshot_2025-07-01_17-59-32

Kesalahan: Set bucket lifecycle error, InvalidArgument, Days in the Transition action for StorageClass Archive must be more than the Transition action for StorageClass IA

Periode transisi tidak diurutkan dengan benar. Urutan yang benar adalah: Infrequent Access < Archive < Cold Archive < Deep Cold Archive.

Aturan siklus hidup dan objek yang sudah ada

Aturan siklus hidup berlaku untuk objek yang sudah ada maupun objek yang baru diunggah. Misalnya, jika Anda mengonfigurasi aturan pada 7 Oktober untuk menghapus objek setelah 30 hari, objek yang diunggah pada 5 Oktober dihapus pada 5 November, dan objek yang diunggah pada 8 Oktober dihapus pada 8 November.

Memodifikasi aturan siklus hidup

Untuk memodifikasi aturan siklus hidup tertentu (misalnya, Rule1) saat terdapat beberapa aturan:

  1. Panggil operasi GetBucketLifecycle untuk mengambil semua aturan siklus hidup saat ini untuk bucket.

  2. Modifikasi pengaturan Rule1.

  3. Panggil operasi PutBucketLifecycle untuk mengganti konfigurasi yang ada dengan mengirimkan Rule1 yang telah dimodifikasi dan Rule2 asli.

Menghapus aturan siklus hidup

DeleteBucketLifecycle menghapus semua aturan siklus hidup dari bucket. Untuk menghapus satu aturan (misalnya, Rule1) sambil mempertahankan yang lain (misalnya, Rule2), ganti seluruh konfigurasi:

  1. Panggil operasi GetBucketLifecycle untuk mengambil semua aturan siklus hidup saat ini untuk bucket.

  2. Hapus Rule1.

  3. Panggil operasi PutBucketLifecycle untuk mengganti konfigurasi yang ada dengan hanya mengirimkan Rule2.

Pencatatan untuk operasi siklus hidup

Ya. Semua transisi dan kedaluwarsa yang berhasil yang dipicu oleh aturan siklus hidup dicatat. Field log terkait:

  • Operasi

    • CommitTransition: Menunjukkan transisi kelas penyimpanan.

    • ExpireObject: Menunjukkan penghapusan objek yang kedaluwarsa.

  • Permintaan Sinkron

    lifecycle: Transisi atau penghapusan dipicu oleh aturan siklus hidup.

Field log menjelaskan skema lengkapnya. Aturan penagihan mencakup biaya kueri log.

Bersihkan penanda hapus dan versi saat ini

Ya. Satu aturan siklus hidup dapat mengedaluwarsakan versi objek saat ini dan membersihkan penanda hapus yang kedaluwarsa.

Transisi dari Infrequent Access ke Standard

Tidak. Gunakan salah satu metode berikut untuk mentransisikan objek dari Infrequent Access ke Standard:

  • Menggunakan operasi CopyObject

    Panggil CopyObject untuk mentransisikan objek dari Infrequent Access ke Standard.

  • Menggunakan tool ossutil

    Gunakan perintah ossutil set-meta dengan opsi X-Oss-Storage-Class untuk mentransisikan objek dari Infrequent Access ke Standard. Atur atau perbarui metadata.

Dokumen terkait