Anda dapat menggunakan aturan siklus hidup berdasarkan waktu akses terakhir untuk secara otomatis memantau pola akses data dan mengidentifikasi data dingin, lalu mentransisikannya ke kelas penyimpanan yang sesuai. Pendekatan ini memungkinkan penerapan penyimpanan bertingkat untuk data panas dan dingin sehingga mengurangi biaya penyimpanan.
Skenario
-
Multimedia
Sebuah situs web menyimpan video dan gambarnya di OSS. Seiring waktu, data historis secara bertahap bertransisi dari panas menjadi dingin. Anda mungkin ingin mentransisikan data yang tidak diakses dalam jangka waktu lama ke kelas penyimpanan Infrequent Access, meskipun beberapa data lama tetap populer dan perlu dipertahankan di kelas penyimpanan Standard. Dalam skenario ini, gunakan aturan siklus hidup berdasarkan waktu akses terakhir untuk secara otomatis mengidentifikasi data panas dan dingin guna menerapkan penyimpanan bertingkat, sehingga mengurangi biaya penyimpanan.
-
Album foto atau drive cloud
Anda dapat menetapkan periode transisi khusus untuk secara otomatis memindahkan data dingin yang tidak diakses dalam periode panjang ke kelas penyimpanan Infrequent Access, sekaligus tetap memastikan akses real-time.
-
Ilmu hayat
Data bisnis dalam jumlah besar yang dihasilkan dari sekuensing gen biasanya diklasifikasikan sebagai panas atau dingin berdasarkan waktu akses terakhirnya, bukan waktu modifikasi terakhirnya. Sebelumnya, pelanggan hanya dapat mengelola tiering data secara manual dengan menganalisis log atau menggunakan metode lain. Aturan siklus hidup berdasarkan waktu akses terakhir memungkinkan server secara otomatis mengidentifikasi data panas dan dingin serta menerapkan penyimpanan bertingkat. Anda juga dapat menggabungkan kebijakan berdasarkan waktu akses terakhir dan waktu modifikasi terakhir dalam satu aturan siklus hidup yang sama untuk manajemen data yang lebih fleksibel.
Batasan
Tidak ada penghapusan data
Aturan siklus hidup berdasarkan waktu akses terakhir tidak dapat digunakan untuk menghapus data.
Kondisi pencocokan
Aturan siklus hidup hanya mendukung pencocokan berdasarkan awalan dan tag. Pencocokan wildcard, pencocokan akhiran, dan pencocokan ekspresi reguler tidak didukung.
Batasan kedaluwarsa bagian (part)
Anda tidak dapat mengonfigurasi dua atau lebih aturan siklus hidup yang berisi kebijakan siklus hidup bagian untuk objek yang namanya memiliki awalan yang tumpang tindih. Contoh:
Contoh 1
Jika Anda mengonfigurasi aturan siklus hidup yang berisi kebijakan bagian untuk sebuah bucket, Anda tidak dapat mengonfigurasi aturan siklus hidup lain yang berisi kebijakan bagian untuk objek apa pun di dalam bucket tersebut.
Contoh 2
Jika Anda mengonfigurasi aturan siklus hidup yang berisi kebijakan bagian untuk objek yang namanya mengandung awalan dir1 di dalam sebuah bucket, Anda tidak dapat mengonfigurasi aturan siklus hidup lain yang berisi kebijakan bagian untuk objek yang namanya mengandung awalan tumpang tindih, seperti dir1/dir2.
Catatan penggunaan
Batasan aturan
Sebuah bucket dapat memiliki hingga 1.000 aturan siklus hidup. Satu aturan siklus hidup dapat berisi kebijakan berdasarkan waktu modifikasi terakhir sekaligus kebijakan berdasarkan waktu akses terakhir.
Semantik penimpaan
Operasi PutBucketLifecycle menimpa konfigurasi yang ada dari aturan siklus hidup sebuah bucket. Misalnya, jika aturan siklus hidup bernama Rule1 telah dikonfigurasi untuk sebuah bucket dan Anda ingin mengonfigurasi aturan siklus hidup lain bernama Rule2 untuk bucket tersebut, lakukan langkah-langkah berikut:
Panggil operasi GetBucketLifecycle untuk menanyakan Rule1.
Tambahkan Rule1 dan Rule2 ke dalam konfigurasi aturan siklus hidup.
Panggil operasi PutBucketLifecycle untuk membuat Rule1 dan Rule2 untuk bucket tersebut.
Waktu berlaku
Setelah aturan siklus hidup dibuat, OSS memuat aturan tersebut dalam waktu 24 jam. Setelah aturan dimuat, OSS mulai menjalankan aturan tersebut setiap hari pukul 08.00 (UTC+8).
Waktu penyelesaian eksekusi
-
Setelah aturan diterapkan, operasi siklus hidup seperti penghapusan objek, transisi kelas penyimpanan, dan kedaluwarsa bagian 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-operasi ini biasanya selesai dalam waktu 24 jam untuk hingga 100 juta objek.
-
Eksekusi dapat memakan waktu lebih dari 24 jam, bahkan dalam beberapa kasus beberapa hari atau minggu, 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 ditulis sangat tinggi saat tugas siklus hidup sedang berjalan.
CatatanJika Pengendalian versi diaktifkan untuk bucket, operasi pada setiap versi objek dihitung sebagai operasi terpisah.
Penagihan
-
Biaya pemantauan dan manajemen objek
Setelah Anda mengaktifkan Pelacakan akses, biaya pemantauan dan manajemen objek akan dikenakan. Namun, OSS saat ini tidak membebankan biaya tersebut.
-
Biaya karena tidak memenuhi durasi penyimpanan minimum untuk Infrequent Access
Objek di kelas penyimpanan Infrequent Access memiliki durasi penyimpanan minimum 30 hari. Jika objek disimpan kurang dari 30 hari, Anda akan dikenai biaya untuk sisa durasi minimum tersebut. Contoh berikut menjelaskan cara item penagihan ini bekerja dengan aturan siklus hidup:
Contoh 1: Aturan siklus hidup mentransisikan objek Standard ke kelas penyimpanan Infrequent Access 10 hari setelah pembuatannya. Lima hari kemudian, objek tersebut ditransisikan kembali ke kelas penyimpanan Standard. Dalam kasus ini, Anda dikenai biaya untuk 15 hari penyimpanan guna memenuhi persyaratan durasi penyimpanan minimum Infrequent Access.
Contoh 2: Aturan siklus hidup mentransisikan objek Standard ke kelas penyimpanan Infrequent Access 10 hari setelah pembuatannya. Objek tersebut dihapus 15 hari kemudian. Dalam kasus ini, Anda dikenai biaya untuk 5 hari penyimpanan guna memenuhi persyaratan durasi penyimpanan minimum Infrequent Access.
Untuk informasi selengkapnya, lihat Biaya penyimpanan.
-
Biaya pengambilan data untuk Infrequent Access
Biaya untuk mengakses file di kelas penyimpanan Infrequent Access dihitung berdasarkan jumlah data yang diambil. Untuk informasi selengkapnya, lihat Biaya pemrosesan data.
-
Biaya permintaan
Aturan siklus hidup menimbulkan biaya permintaan saat mentransisikan kelas penyimpanan objek. Untuk informasi selengkapnya, lihat Biaya permintaan.
Pertimbangan lainnya
-
Kebijakan pembaruan waktu akses terakhir:
Setelah Pelacakan akses diaktifkan, OSS memperbarui
LastAccessTimeobjek berdasarkan aturan berikut:-
Inisialisasi: Saat Pelacakan akses diaktifkan, OSS menetapkan LastAccessTime semua objek di bucket ke waktu ketika Pelacakan akses diaktifkan.
-
Aturan pembaruan: Setelah inisialisasi, operasi seperti mengunduh atau menimpa objek memperbarui
LastAccessTimeobjek tersebut. Untuk informasi selengkapnya tentang operasi mana saja yang memperbaruiLastAccessTimeobjek, lihat Cara operasi umum memengaruhi waktu akses terakhir objek. -
Mekanisme pembaruan:
-
LastAccessTimediperbarui secara asinkron. Pembaruan biasanya selesai dalam waktu 24 jam. -
Jika objek yang sama diakses beberapa kali dalam rentang 24 jam, OSS mencatat waktu akses pertama sebagai
LastAccessTimeobjek tersebut. Akses berikutnya dalam periode 24 jam tidak memicu pembaruan.
-
-
-
Kelas penyimpanan objek untuk transisi:
-
Aturan siklus hidup berdasarkan waktu akses terakhir mendukung transisi objek dari kelas penyimpanan Standard ke kelas penyimpanan Infrequent Access. Anda juga dapat memilih apakah akan secara otomatis mentransisikan objek kembali ke kelas penyimpanan Standard saat diakses.
-
Aturan siklus hidup berdasarkan waktu akses terakhir mendukung transisi objek dari kelas penyimpanan Standard atau Infrequent Access ke kelas penyimpanan Archive, Cold Archive, atau Deep Cold Archive. Anda juga dapat mentransisikan objek dari kelas penyimpanan Archive ke kelas penyimpanan Cold Archive atau Deep Cold Archive. Jika Anda ingin mentransisikan objek dari kelas penyimpanan Standard atau Infrequent Access ke kelas penyimpanan Archive, Cold Archive, atau Deep Cold Archive, submit a ticket untuk meminta izin. Setelah permintaan Anda disetujui, Anda harus menentukan kelas penyimpanan tujuan untuk transisi tersebut.
PentingSetelah tiket Anda disetujui, jika Anda menggunakan kebijakan berdasarkan waktu akses terakhir untuk mentransisikan objek dari kelas penyimpanan Standard atau Infrequent Access ke kelas penyimpanan Archive, Cold Archive, atau Deep Cold Archive, waktu akses terakhir objek di kelas penyimpanan tujuan secara default diatur ke waktu ketika Pelacakan akses diaktifkan untuk bucket tersebut.
-
-
Mengonfigurasi aturan siklus hidup pada bucket tempat OSS-HDFS diaktifkan:
Untuk mengonfigurasi atau memodifikasi aturan siklus hidup berdasarkan waktu akses terakhir agar cocok dengan semua objek di bucket yang telah diaktifkan OSS-HDFS, gunakan elemen NOT untuk mengecualikan objek yang disimpan di direktori
.dlsdata/. Hal ini mencegah tindakan penghapusan objek atau konversi kelas penyimpanan yang dipicu oleh aturan siklus hidup diterapkan pada data OSS-HDFS dan akibatnya memengaruhi operasi baca dan tulis pada data OSS-HDFS.
Prosedur
Konsol OSS
-
Masuk ke Konsol OSS.
-
Di panel navigasi kiri, klik Buckets. Di halaman yang muncul, klik nama bucket target.
-
Di panel navigasi kiri, pilih .
-
Di halaman Lifecycle, aktifkan sakelar Enable Access Tracking, lalu klik Create Rule.
-
Di panel Create Lifecycle Rule, konfigurasikan aturan siklus hidup berdasarkan deskripsi berikut.
-
Bucket memiliki Pengendalian versi dinonaktifkan
Bagian
Parameter
Deskripsi
Basic Settings
Status
Tetapkan status aturan siklus hidup. Anda dapat memilih Enabled atau Disabled.
-
Jika Anda mengaktifkan aturan siklus hidup, OSS mentransisikan kelas penyimpanan data berdasarkan aturan tersebut.
-
Jika Anda menonaktifkan aturan siklus hidup, tugas siklus hidup dihentikan sementara.
Applied To
Pilih objek yang akan diterapkan aturan siklus hidup. Anda dapat memilih Objects with Specified Prefix atau Whole Bucket.
Allow Overlapped Prefixes
Secara default, OSS memeriksa apakah awalan aturan siklus hidup tumpang tindih. Misalnya, Anda menetapkan dua aturan siklus hidup berikut dengan awalan yang tumpang tindih:
-
Aturan 1
Mentransisikan semua objek dengan awalan
dir1/di bucket ke kelas penyimpanan Infrequent Access 180 hari setelah waktu akses terakhirnya. -
Aturan 2
Mentransisikan semua objek dengan awalan
dir1/dir2/di bucket ke kelas penyimpanan Archive 30 hari setelah waktu akses terakhirnya.
Jika opsi ini tidak dipilih, OSS menolak konfigurasi ini karena objek di direktori
dir1/dir2/akan cocok dengan kedua aturan transisi tersebut.Jika opsi ini dipilih, objek di direktori
dir1/dir2/ditransisikan ke kelas penyimpanan Archive setelah 30 hari. Objek lain di direktoridir1/ditransisikan ke kelas penyimpanan Infrequent Access setelah 180 hari.Prefix
Masukkan awalan objek agar aturan dapat mencocokkan.
-
Jika Anda menetapkan awalan ke img, aturan akan mencocokkan semua objek yang namanya diawali img, seperti imgtest.png dan img/example.jpg.
-
Jika Anda menetapkan awalan ke img/, aturan akan mencocokkan semua objek yang namanya diawali img/, seperti img/example.jpg dan img/test.jpg.
Tag
Aturan siklus hidup hanya berlaku untuk objek dengan tag tertentu. Misalnya, jika Anda memilih Objects with Specified Prefix, menetapkan awalan ke img, dan menetapkan kunci tag ke a dan nilai ke 1, aturan tersebut akan mencocokkan semua objek yang namanya diawali img dan memiliki tag a=1. Untuk informasi selengkapnya tentang tag objek, lihat Object tagging.
NOT
Gunakan opsi NOT untuk mengecualikan objek yang memiliki awalan dan tag tertentu dari aturan siklus hidup.
Penting-
Jika opsi NOT diaktifkan, Anda harus menentukan setidaknya satu awalan atau satu tag.
-
Kunci yang didefinisikan untuk tag dalam kondisi NOT tidak boleh sama dengan kunci yang didefinisikan di parameter Tag.
-
Jika opsi NOT diaktifkan, Anda tidak dapat mengonfigurasi kebijakan kedaluwarsa bagian.
Object Size
Tentukan ukuran objek yang akan diterapkan aturan siklus hidup.
-
Minimum Size: Aturan siklus hidup berlaku untuk objek yang lebih besar dari nilai ini. Nilainya harus lebih 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 dari 0 B dan kurang dari atau sama dengan 5 TB.
PentingJika Anda mengonfigurasi Minimum size dan Maximum size dalam satu aturan siklus hidup yang sama, perhatikan hal-hal berikut:
-
Pastikan nilai Maximum size lebih besar daripada nilai Minimum size.
-
Anda tidak dapat mengonfigurasi kebijakan kedaluwarsa bagian.
-
Anda tidak dapat mengonfigurasi kebijakan untuk membersihkan penanda hapus.
Policy for Objects
Object Lifecycle
Pilih kebijakan kedaluwarsa untuk objek. Anda dapat memilih Validity Period (Days), Expiration Date, atau Disabled. Jika Anda memilih Disabled, kebijakan kedaluwarsa objek tidak berlaku.
Lifecycle-based Rules
Konfigurasikan aturan untuk mentransisikan kelas penyimpanan objek. Data dapat ditransisikan ke kelas penyimpanan berikut:
-
IA (Data Remains in IA After Access)
-
IA (Data Is Converted to Standard After Access)
-
Archive
-
Cold Archive
-
Deep Cold Archive
Misalnya, jika Anda memilih kebijakan Access Time, menetapkan Validity Period (Days) ke 30, dan menentukan bahwa data secara otomatis ditransisikan ke IA (Data Remains in IA After Access) setelah periode yang ditentukan, objek yang terakhir diakses pada 1 September 2021 akan ditransisikan ke kelas penyimpanan tersebut pada 1 Oktober 2021.
Policy for Parts
Part Lifecycle
Tetapkan tindakan yang akan dilakukan pada bagian yang kedaluwarsa. Jika Anda telah menentukan Tag, Anda tidak dapat mengonfigurasi parameter ini. Anda dapat memilih Validity Period (Days) atau Expiration Date untuk kebijakan kedaluwarsa bagian, atau memilih Disabled. Jika Anda memilih Disabled, kebijakan kedaluwarsa bagian tidak berlaku.
PentingAturan siklus hidup harus mencakup setidaknya kebijakan kedaluwarsa objek atau kebijakan kedaluwarsa bagian.
Rules for Parts
Tentukan kapan bagian kedaluwarsa berdasarkan periode validitas atau tanggal kedaluwarsa yang dipilih dalam kebijakan kedaluwarsa bagian. Bagian yang kedaluwarsa akan dihapus secara otomatis dan tidak dapat dipulihkan.
-
-
Bucket memiliki Pengendalian versi diaktifkan
Setelah Anda mengaktifkan Pengendalian versi, item konfigurasi di bagian Basic Settings dan Policy for Parts dikonfigurasi dengan cara yang sama seperti saat Pengendalian versi dinonaktifkan. Tabel berikut hanya menjelaskan perbedaan konfigurasi saat Pengendalian versi diaktifkan.
Bagian
Parameter
Deskripsi
Policy for Current Versions
Clear delete markers
Setelah Pengendalian versi diaktifkan, opsi Clear Delete Markers ditambahkan ke kebijakan pembersihan. Opsi lainnya sama seperti saat Pengendalian versi dinonaktifkan.
Jika Anda memilih opsi ini dan versi terkini objek adalah satu-satunya versi dan merupakan penanda hapus, OSS menghapus penanda hapus objek yang kedaluwarsa tersebut. Jika objek memiliki beberapa versi dan versi terbaru adalah penanda hapus, OSS mempertahankan penanda hapus tersebut. Untuk informasi selengkapnya tentang penanda hapus, lihat Delete markers.
Policy for Previous Versions
Object Lifecycle
Tetapkan kebijakan kedaluwarsa untuk versi noncurrent objek. Anda dapat memilih Validity Period (Days) atau Disabled. Jika Anda memilih Disabled, kebijakan kedaluwarsa objek tidak berlaku.
Lifecycle-based Rules
Tetapkan periode N hari. Setelah versi noncurrent objek diakses, versi tersebut ditransisikan ke kelas penyimpanan berbeda setelah N hari. Misalnya, jika Anda menetapkan periode ke 30 hari, versi noncurrent yang diakses pada 1 September 2021 akan ditransisikan ke kelas penyimpanan yang ditentukan pada 1 Oktober 2021.
-
-
Klik OK.
Setelah Anda menyimpan aturan, aturan tersebut akan muncul di daftar kebijakan.
SDK
SDK OSS untuk Java, Go, Python, dan PHP mendukung pembuatan aturan siklus hidup berdasarkan waktu akses terakhir. Sebelum membuat aturan siklus hidup berdasarkan waktu akses terakhir, Anda harus mengaktifkan Pelacakan akses untuk bucket yang ditentukan. Untuk contoh kode, 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.model.*;
import java.util.ArrayList;
import java.util.List;
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 contoh kode, 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 ke 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 {
ossClient.putBucketAccessMonitor(bucketName, AccessMonitor.AccessMonitorStatus.Enabled.toString());
// Buat aturan siklus hidup dan atur ID-nya ke rule1. Tentukan bahwa kelas penyimpanan objek yang namanya mengandung awalan logs dan ukurannya kurang dari atau sama dengan 64 KB diubah menjadi IA 30 hari setelah objek tersebut terakhir diakses. Selain itu, tentukan bahwa objek yang namanya mengandung awalan logs tetap disimpan sebagai objek IA saat objek tersebut diakses lagi.
LifecycleRule lifecycleRule = new LifecycleRule("rule1", "logs", LifecycleRule.RuleStatus.Enabled);
List<LifecycleRule> lifecycleRuleList = new ArrayList<LifecycleRule>();
SetBucketLifecycleRequest setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
storageTransition.setStorageClass(StorageClass.IA);
storageTransition.setExpirationDays(30);
storageTransition.setIsAccessTime(true);
storageTransition.setReturnToStdWhenVisit(false);
storageTransition.setAllowSmallFile(true);
List<LifecycleRule.StorageTransition> storageTransitionList = new ArrayList<LifecycleRule.StorageTransition>();
storageTransitionList.add(storageTransition);
lifecycleRule.setStorageTransition(storageTransitionList);
lifecycleRuleList.add(lifecycleRule);
// Buat aturan siklus hidup dan atur ID-nya ke rule2. Tentukan bahwa versi sebelumnya dari objek yang namanya mengandung awalan dir dan ukurannya lebih dari 64 KB diubah menjadi IA 10 hari setelah objek tersebut terakhir diakses. Selain itu, tentukan bahwa kelas penyimpanan objek yang namanya mengandung awalan dir diubah menjadi Standard saat objek tersebut diakses lagi.
LifecycleRule lifecycleRule2 = new LifecycleRule("rule2", "dir", LifecycleRule.RuleStatus.Enabled);
LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition = new LifecycleRule.NoncurrentVersionStorageTransition();
noncurrentVersionStorageTransition.setStorageClass(StorageClass.IA);
noncurrentVersionStorageTransition.setNoncurrentDays(10);
noncurrentVersionStorageTransition.setIsAccessTime(true);
noncurrentVersionStorageTransition.setReturnToStdWhenVisit(true);
noncurrentVersionStorageTransition.setAllowSmallFile(false);
List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitionList = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
noncurrentVersionStorageTransitionList.add(noncurrentVersionStorageTransition);
lifecycleRule2.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitionList);
lifecycleRuleList.add(lifecycleRule2);
setBucketLifecycleRequest.setLifecycleRules(lifecycleRuleList);
// Konfigurasikan aturan siklus hidup.
ossClient.setBucketLifecycle(setBucketLifecycleRequest);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
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();
}
}
}
}
Python
import argparse
import datetime
import alibabacloud_oss_v2 as oss
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
def main():
args = parser.parse_args()
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss.Client(cfg)
result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
bucket=args.bucket,
lifecycle_configuration=oss.LifecycleConfiguration(
rules=[
oss.LifecycleRule(
id='rule1',
status='Enabled',
prefix='data/',
transitions=[oss.LifecycleRuleTransition(
days=200,
storage_class=oss.StorageClassType.IA,
is_access_time=True,
return_to_std_when_visit=False
)]
),
oss.LifecycleRule(
id='rule2',
status='Enabled',
prefix='log/',
transitions=[
oss.LifecycleRuleTransition(
days=120,
storage_class=oss.StorageClassType.IA,
is_access_time=True,
return_to_std_when_visit=False
),
oss.LifecycleRuleTransition(
days=250,
storage_class=oss.StorageClassType.ARCHIVE
# Jika is_access_time tidak diatur, aturan tersebut secara default berdasarkan waktu modifikasi terakhir.
)
]
)
]
)
))
print(f'kode status: {result.status_code}, '
f'id permintaan: {result.request_id}')
if __name__ == "__main__":
main()
Go
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Definisikan variabel global.
var (
region string // Wilayah tempat bucket berada.
bucketName string // Nama bucket.
)
// Fungsi init menginisialisasi argumen baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing argumen baris perintah.
flag.Parse()
// Periksa apakah nama bucket telah diberikan.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
// Periksa apakah wilayah telah diberikan.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
// 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 menetapkan aturan siklus hidup untuk bucket.
request := &oss.PutBucketLifecycleRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
LifecycleConfiguration: &oss.LifecycleConfiguration{
Rules: []oss.LifecycleRule{
{
// Dalam aturan siklus hidup "rule1", transisikan semua objek dengan awalan "data/"
// ke kelas penyimpanan Infrequent Access (IA) 200 hari setelah terakhir diakses.
// Saat objek ini diakses lagi, objek tetap berada di kelas penyimpanan IA.
ID: oss.Ptr("rule1"),
Status: oss.Ptr("Enabled"),
Prefix: oss.Ptr("data/"),
Transitions: []oss.LifecycleRuleTransition{
{
Days: oss.Ptr(int32(200)),
StorageClass: oss.StorageClassIA,
IsAccessTime: oss.Ptr(true), // Atur ke true untuk aturan berdasarkan waktu akses terakhir.
ReturnToStdWhenVisit: oss.Ptr(false),
},
},
},
{
// Dalam aturan siklus hidup "rule2", transisikan semua objek dengan awalan "log/"
// ke kelas penyimpanan Infrequent Access (IA) 120 hari setelah terakhir diakses.
// Saat objek ini diakses lagi, objek tetap berada di kelas penyimpanan IA.
// Satu aturan tidak boleh berisi lebih dari satu Transisi dengan IsAccessTime=true.
// Transisi Archive 250 hari dikonfigurasi dalam aturan terpisah (rule3) di bawah.
ID: oss.Ptr("rule2"),
Status: oss.Ptr("Enabled"),
Prefix: oss.Ptr("log/"),
Transitions: []oss.LifecycleRuleTransition{
{
Days: oss.Ptr(int32(120)),
StorageClass: oss.StorageClassIA,
IsAccessTime: oss.Ptr(true), // Atur ke true untuk aturan berdasarkan waktu akses terakhir.
ReturnToStdWhenVisit: oss.Ptr(false),
},
},
},
{
// Dalam aturan siklus hidup "rule3", transisikan semua objek dengan awalan "log/"
// ke kelas penyimpanan Archive 250 hari setelah terakhir diakses.
// Saat objek ini diakses lagi, objek tetap berada di kelas penyimpanan Archive.
// Aturan ini terpisah dari rule2 karena satu aturan tidak boleh berisi
// lebih dari satu Transisi dengan IsAccessTime=true.
ID: oss.Ptr("rule3"),
Status: oss.Ptr("Enabled"),
Prefix: oss.Ptr("log/"),
Transitions: []oss.LifecycleRuleTransition{
{
Days: oss.Ptr(int32(250)),
StorageClass: oss.StorageClassArchive,
IsAccessTime: oss.Ptr(true), // Atur ke true untuk aturan berdasarkan waktu akses terakhir.
ReturnToStdWhenVisit: oss.Ptr(false),
},
},
},
},
},
}
// Tetapkan aturan siklus hidup untuk bucket.
result, err := client.PutBucketLifecycle(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menetapkan siklus hidup bucket %v", err)
}
// Cetak hasil penetapan aturan siklus hidup.
log.Printf("hasil penetapan siklus hidup bucket:%#v\n", result)
}
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 yang wajib hilang.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: argumen berikut wajib diisi: --$key, $help"; // Tampilkan parameter yang wajib tetapi tidak diisi.
exit(1);
}
}
// Dapatkan nilai parameter baris perintah dan tetapkan nilai tersebut 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 tersebut.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
{}
$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.
isAccessTime: 'true', // Picu perubahan berdasarkan waktu akses terakhir.
returnToStdWhenVisit: 'true' // Kembalikan ke kelas penyimpanan Standard setelah diakses.
)
),
id: 'rule', // ID aturan.
status: 'Enabled' // Aktifkan aturan.
);
// Buat konfigurasi siklus hidup dan tambahkan aturan siklus hidup ke konfigurasi tersebut.
$lifecycleConfiguration = new LifecycleConfiguration(
rules: array($lifecycleRule)
);
// Buat permintaan untuk menetapkan konfigurasi siklus hidup dan teruskan konfigurasi siklus hidup tersebut.
$request = new Oss\Models\PutBucketLifecycleRequest(
bucket: $bucket,
lifecycleConfiguration: $lifecycleConfiguration
);
// Panggil metode putBucketLifecycle untuk mengonfigurasi aturan siklus hidup.
$result = $client->putBucketLifecycle($request);
// Tampilkan hasilnya.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status respons HTTP.
'id permintaan:' . $result->requestId . PHP_EOL // ID permintaan.
);
ossutil
Anda dapat menggunakan ossutil untuk mengonfigurasi aturan siklus hidup. Untuk informasi selengkapnya tentang cara menginstal ossutil, lihat Instal ossutil.
Contoh berikut menunjukkan cara mengonfigurasi 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\",\"IsAccessTime\":true,\"ReturnToStdWhenVisit\":true},\"AbortMultipartUpload\":{\"Days\":\"10\"}}}"
Untuk informasi selengkapnya tentang perintah ini, lihat put-bucket-lifecycle.
Referensi API
Operasi di atas didasarkan pada panggilan API. Jika Anda memerlukan tingkat kustomisasi yang tinggi, Anda dapat langsung mengirim permintaan REST API. Hal ini mengharuskan Anda menulis kode sendiri untuk menghitung tanda tangan. Untuk informasi selengkapnya, lihat PutBucketLifecycle.
FAQ
Apa yang terjadi jika saya membuat dua aturan siklus hidup untuk objek yang memiliki awalan yang sama di sebuah bucket, di mana satu aturan berdasarkan waktu modifikasi terakhir dan yang lain berdasarkan waktu akses terakhir?
Misalnya, Anda membuat dua aturan siklus hidup untuk bucket tujuan bernama examplebucket. Aturan 1 menentukan bahwa semua objek dengan awalan doc dihapus 30 hari setelah waktu modifikasi terakhirnya. Aturan 2 menentukan bahwa semua objek dengan awalan doc ditransisikan ke kelas penyimpanan Infrequent Access 30 hari setelah waktu akses terakhirnya.
OSS menjalankan aturan siklus hidup berdasarkan prinsip meminimalkan biaya pengguna. Oleh karena itu, hanya Aturan 1 yang berlaku. Hal ini karena Aturan 1 menentukan bahwa objek yang cocok dihapus setelah 30 hari, sehingga tidak ada biaya yang dikenakan lagi. Sebaliknya, Aturan 2 mentransisikan objek ke kelas penyimpanan Infrequent Access, yang masih menimbulkan biaya penyimpanan dan biaya pengambilan data.
Kapan perubahan pada aturan siklus hidup yang telah dikonfigurasi berlaku, dan bagaimana penanganan data yang sebelumnya cocok dengan aturan asli?
Misalnya, Anda telah mengonfigurasi aturan siklus hidup untuk objek dengan awalan er agar ditransisikan ke kelas penyimpanan Infrequent Access 30 hari setelah akses terakhir dan kemudian ditransisikan kembali ke kelas penyimpanan Standard jika diakses setelah tambahan 30 hari. Namun, 35 hari setelah akses terakhir, Anda mengubah awalan dalam aturan siklus hidup dari er menjadi re. Dalam kasus ini, objek asli hanya ditransisikan ke kelas penyimpanan Infrequent Access. Transisi berikutnya ke kelas penyimpanan Standard tidak terjadi. Waktu akses terakhir untuk objek yang cocok dengan aturan baru juga dihitung sejak Pelacakan akses diaktifkan untuk bucket tersebut.
Jika Intelligent Tiering diaktifkan di bucket yang memiliki Pengendalian versi, bagaimana tier penyimpanan diterapkan pada versi berbeda dari suatu objek?
Setiap objek di bucket yang memiliki Pengendalian versi memiliki ID versi unik, dan objek dengan ID versi berbeda bersifat independen satu sama lain. Oleh karena itu, versi noncurrent objek mungkin berada di kelas penyimpanan Infrequent Access sementara versi terkini berada di kelas penyimpanan Standard.
Dapatkah saya menonaktifkan Pelacakan akses?
Ya, asalkan tidak ada aturan siklus hidup berdasarkan waktu akses terakhir di bucket tersebut. Setelah Pelacakan akses dinonaktifkan, sistem berhenti melacak waktu akses terakhir objek. Saat Anda mengaktifkan kembali Pelacakan akses, sistem memperbarui waktu akses terakhir untuk semua objek.
Referensi
Waktu akses terakhir (LastAccessTime) adalah atribut penting suatu objek dan digunakan dalam skenario seperti penagihan dan aturan siklus hidup. Setelah Pelacakan akses diaktifkan untuk sebuah bucket, beberapa operasi pada objek dapat memperbarui LastAccessTime-nya. Untuk informasi selengkapnya, lihat Cara operasi umum memengaruhi waktu akses terakhir objek.