Tidak semua data yang diunggah ke Object Storage Service (OSS) memerlukan akses yang sering. Beberapa data harus disimpan dalam cold storage untuk kepatuhan atau keperluan arsip. Anda dapat mengonfigurasi aturan lifecycle berdasarkan waktu modifikasi terakhir untuk menghapus data yang tidak lagi diperlukan dalam bucket secara batch. Anda juga dapat mengonfigurasi aturan lifecycle berdasarkan waktu akses terakhir untuk mencapai tiering penyimpanan otomatis dan mengurangi biaya penyimpanan. OSS kemudian secara otomatis memantau pola akses data, mengidentifikasi cold data, dan memindahkan data tersebut ke kelas penyimpanan yang berbeda.
Catatan penggunaan
Sebelum mengonfigurasi aturan lifecycle berdasarkan waktu modifikasi terakhir atau waktu akses terakhir objek, pastikan Anda memahami fitur ini terlebih dahulu. Untuk informasi selengkapnya, lihat Aturan lifecycle berdasarkan waktu modifikasi terakhir dan Aturan lifecycle berdasarkan waktu akses terakhir.
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya tentang wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.
Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses menggunakan OSS SDK untuk Python 1.0.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.
Untuk menetapkan aturan lifecycle, Anda harus memiliki izin
oss:PutBucketLifecycle. Untuk melihat aturan lifecycle, Anda harus memiliki izinoss:GetBucketLifecycle. Untuk menghapus aturan lifecycle, Anda harus memiliki izinoss:DeleteBucketLifecycle. Untuk informasi selengkapnya, lihat Berikan izin kustom kepada RAM user.
Tetapkan aturan lifecycle
Kode berikut memberikan contoh cara menetapkan aturan lifecycle berdasarkan waktu modifikasi terakhir dan waktu akses terakhir. Untuk informasi tentang cara memodifikasi satu atau beberapa aturan setelah ditetapkan, lihat Bagaimana cara memodifikasi satu atau beberapa konfigurasi aturan lifecycle?.
Transisi kelas penyimpanan dan hapus objek berdasarkan waktu modifikasi terakhir
Kode berikut memberikan contoh cara menetapkan aturan lifecycle untuk bucket `examplebucket`. Aturan ini melakukan transisi kelas penyimpanan objek yang sesuai dan menghapusnya berdasarkan waktu modifikasi terakhirnya.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import datetime
from oss2.models import (LifecycleExpiration, LifecycleRule,
BucketLifecycle, AbortMultipartUpload,
TaggingRule, Tagging, StorageTransition,
NoncurrentVersionStorageTransition,
NoncurrentVersionExpiration)
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti examplebucket dengan nama bucket sebenarnya.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Atur agar objek kedaluwarsa 3 hari setelah waktu modifikasi terakhirnya.
rule1 = LifecycleRule('rule1', 'tests/',
status=LifecycleRule.ENABLED,
expiration=LifecycleExpiration(days=3))
# Tetapkan aturan kedaluwarsa objek. Objek yang dibuat sebelum tanggal tertentu akan kedaluwarsa.
rule2 = LifecycleRule('rule2', 'tests2/',
status=LifecycleRule.ENABLED,
expiration = LifecycleExpiration(created_before_date=datetime.date(2023, 12, 12)))
# Tetapkan aturan kedaluwarsa bagian. Bagian akan kedaluwarsa setelah 3 hari.
rule3 = LifecycleRule('rule3', 'tests3/',
status=LifecycleRule.ENABLED,
abort_multipart_upload=AbortMultipartUpload(days=3))
# Tetapkan aturan kedaluwarsa bagian. Bagian yang dibuat sebelum tanggal tertentu akan kedaluwarsa.
rule4 = LifecycleRule('rule4', 'tests4/',
status=LifecycleRule.ENABLED,
abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2022, 12, 12)))
# Tetapkan aturan transisi kelas penyimpanan. Pindahkan objek ke Infrequent Access (IA) 20 hari setelah waktu modifikasi terakhirnya. Pindahkan ke Archive 30 hari setelah waktu modifikasi terakhirnya.
rule5 = LifecycleRule('rule5', 'tests5/',
status=LifecycleRule.ENABLED,
storage_transitions=[StorageTransition(days=20,storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
StorageTransition(days=30,storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)])
# Tetapkan tag yang sesuai.
tagging_rule = TaggingRule()
tagging_rule.add('key1', 'value1')
tagging_rule.add('key2', 'value2')
tagging = Tagging(tagging_rule)
# Tetapkan aturan transisi kelas penyimpanan. Pindahkan objek ke kelas penyimpanan Archive 365 hari setelah waktu modifikasi terakhirnya.
# Berbeda dengan aturan sebelumnya, rule6 menentukan tag yang sesuai. Hanya objek yang memiliki tag key1=value1 dan key2=value2 yang sesuai dengan aturan ini.
rule6 = LifecycleRule('rule6', 'tests6/',
status=LifecycleRule.ENABLED,
storage_transitions=[StorageTransition(created_before_date=datetime.date(2022, 12, 12),storage_class=oss2.BUCKET_STORAGE_CLASS_IA)],
tagging = tagging)
# rule7 berlaku untuk bucket yang telah mengaktifkan versioning.
# Secara otomatis pindahkan objek ke kelas penyimpanan Archive 365 hari setelah waktu modifikasi terakhirnya.
# Secara otomatis hapus penanda hapus yang telah kedaluwarsa.
# Pindahkan versi noncurrent objek ke kelas penyimpanan IA setelah 12 hari.
# Pindahkan versi noncurrent objek ke kelas penyimpanan Archive setelah 20 hari.
# Hapus versi noncurrent objek setelah 30 hari.
rule7 = LifecycleRule('rule7', 'tests7/',
status=LifecycleRule.ENABLED,
storage_transitions=[StorageTransition(days=365, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
expiration=LifecycleExpiration(expired_detete_marker=True),
noncurrent_version_sotrage_transitions =
[NoncurrentVersionStorageTransition(12, oss2.BUCKET_STORAGE_CLASS_IA),
NoncurrentVersionStorageTransition(20, oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
noncurrent_version_expiration = NoncurrentVersionExpiration(30))
lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5, rule6, rule7])
bucket.put_bucket_lifecycle(lifecycle)Transisi kelas penyimpanan objek yang tidak memiliki awalan dan tag tertentu berdasarkan waktu modifikasi terakhir
Kode berikut memberikan contoh cara menggunakan elemen Not dalam node filter. Dalam contoh ini, untuk bucket `examplebucket`, semua file kecuali yang memiliki awalan `logs/not-prefix` dan tag `key1:value1` dipindahkan ke kelas penyimpanan Infrequent Access 30 hari setelah waktu modifikasi terakhirnya.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import LifecycleRule, BucketLifecycle, StorageTransition, LifecycleFilter, FilterNot, FilterNotTag
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti examplebucket dengan nama bucket sebenarnya.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
not_prefix = 'logs/not-prefix'
key = 'key1'
value = 'value1'
not_tag = FilterNotTag(key, value)
filter_not = FilterNot(not_prefix, not_tag)
filter = LifecycleFilter([filter_not])
# Tetapkan aturan transisi kelas penyimpanan.
rule1 = LifecycleRule('mtime transition1', 'logs',
status=LifecycleRule.ENABLED,
storage_transitions=[StorageTransition(days=30, storage_class=oss2.BUCKET_STORAGE_CLASS_IA)],
filter=filter)
lifecycle = BucketLifecycle([rule1])
result = bucket.put_bucket_lifecycle(lifecycle)
print('Aturan lifecycle berhasil ditetapkan. Kode status: ' + str(result.status))Transisi kelas penyimpanan berdasarkan waktu akses terakhir
Kode berikut memberikan contoh cara menetapkan aturan lifecycle untuk bucket `examplebucket` guna melakukan transisi kelas penyimpanan berdasarkan waktu akses terakhir.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import LifecycleRule, BucketLifecycle, StorageTransition, NoncurrentVersionStorageTransition
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti examplebucket dengan nama bucket sebenarnya.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Tentukan aturan lifecycle 1. Aturan ini memindahkan semua file yang memiliki awalan 'logs' dan berukuran lebih besar dari 64 KB ke kelas penyimpanan Infrequent Access 30 hari setelah waktu akses terakhirnya. Saat file-file ini diakses kembali, mereka tetap berada di kelas penyimpanan Infrequent Access.
rule1 = LifecycleRule('rule1', 'logs', status=LifecycleRule.ENABLED)
rule1.storage_transitions = [StorageTransition(days=30, storage_class=oss2.BUCKET_STORAGE_CLASS_IA, is_access_time=True, return_to_std_when_visit=False, allow_small_file=True)]
# Tentukan aturan lifecycle 2. Aturan ini memindahkan semua versi noncurrent file yang memiliki awalan 'dir' dan berukuran lebih besar dari 64 KB ke kelas penyimpanan Infrequent Access 10 hari setelah waktu akses terakhirnya. Saat file-file ini diakses kembali, mereka dipindahkan ke kelas penyimpanan Standard.
rule2 = LifecycleRule('rule2', 'dir', status=LifecycleRule.ENABLED)
rule2.noncurrent_version_sotrage_transitions = [NoncurrentVersionStorageTransition(10, oss2.BUCKET_STORAGE_CLASS_IA, is_access_time=True, return_to_std_when_visit=True, allow_small_file=False)]
lifecycle = BucketLifecycle([rule1, rule2])
# Tetapkan aturan lifecycle.
result = bucket.put_bucket_lifecycle(lifecycle)
print('Aturan lifecycle berhasil ditetapkan. Kode status: ' + str(result.status))
Lihat aturan lifecycle
Kode berikut memberikan contoh cara melihat aturan lifecycle untuk bucket `examplebucket`.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti examplebucket dengan nama bucket sebenarnya.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Lihat aturan lifecycle.
lifecycle = bucket.get_bucket_lifecycle()
for rule in lifecycle.rules:
print('==========')
# Lihat ID aturan.
print('id:', rule.id)
# Lihat awalan aturan.
print('prefix:', rule.prefix)
# Lihat status aturan.
print('status', rule.status)
if rule.tagging is not None:
# Lihat tag aturan.
print('tagging:', rule.tagging)
if rule.abort_multipart_upload is not None:
if rule.abort_multipart_upload.days is not None:
# Lihat aturan kedaluwarsa bagian.
print('abort_multipart_upload days:', rule.abort_multipart_upload.days)
else:
print('abort_multipart_upload created_before_date:', rule.abort_multipart_upload.created_before_date)
if rule.expiration is not None:
if rule.expiration.days is not None:
# Lihat jumlah hari hingga kedaluwarsa.
print('expiration days:', rule.expiration.days)
elif rule.expiration.expired_detete_marker is not None:
# Periksa apakah penanda hapus yang telah kedaluwarsa dihapus secara otomatis.
print('expiration expired_detete_marker:', rule.expiration.expired_detete_marker)
elif rule.expiration.created_before_date is not None:
# Lihat tanggal kedaluwarsa.
print('expiration created_before_date:', rule.expiration.created_before_date)
if len(rule.storage_transitions) > 0:
storage_info = ''
for storage_rule in rule.storage_transitions:
if storage_rule.days is not None:
storage_info += 'days={0}, storage_class={1} *** '.format(
storage_rule.days, storage_rule.storage_class)
else:
storage_info += 'created_before_date={0}, storage_class={1} *** '.format(
storage_rule.created_before_date, storage_rule.storage_class)
# Periksa apakah aturan lifecycle dikonfigurasi berdasarkan waktu akses terakhir. Pemeriksaan ini hanya didukung di Python SDK 2.16.1 dan versi yang lebih baru.
storage_info += 'is_access_time={0}, return_to_std_when_visit={1} ***'.format(
storage_rule.is_access_time, storage_rule.return_to_std_when_visit)
print('storage_transitions:', storage_info)
if len(rule.noncurrent_version_sotrage_transitions) > 0:
noncurrent_storage_info = ''
for storage_rule in rule.noncurrent_version_sotrage_transitions:
noncurrent_storage_info += 'days={0}, storage_class={1} *** '.format(
storage_rule.noncurrent_days, storage_rule.storage_class)
# Periksa apakah objek dipindahkan kembali ke kelas penyimpanan Standard saat diakses lagi setelah dipindahkan ke kelas penyimpanan Infrequent Access. Pemeriksaan ini hanya didukung di Python SDK 2.16.1 dan versi yang lebih baru.
noncurrent_storage_info += 'is_access_time={0}, return_to_std_when_visit={1} ***'.format(
storage_rule.is_access_time, storage_rule.return_to_std_when_visit)
# Lihat aturan transisi kelas penyimpanan untuk versi noncurrent objek.
print('noncurrent_version_sotrage_transitions:', noncurrent_storage_info)
if rule.noncurrent_version_expiration is not None:
# Lihat aturan kedaluwarsa untuk versi noncurrent objek.
print('noncurrent_version_expiration days:', rule.noncurrent_version_expiration.noncurrent_days)Hapus aturan lifecycle
Kode berikut memberikan contoh cara menghapus semua aturan lifecycle untuk bucket `examplebucket`. Untuk informasi tentang cara menghapus satu atau beberapa aturan lifecycle tertentu, lihat Bagaimana cara menghapus satu atau beberapa aturan lifecycle?.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"
# Ganti examplebucket dengan nama bucket sebenarnya.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Hapus aturan lifecycle.
bucket.delete_bucket_lifecycle()
# Melihat kembali aturan lifecycle akan memunculkan pengecualian.
try:
lifecycle = bucket.get_bucket_lifecycle()
except oss2.exceptions.NoSuchLifecycle:
print('lifecycle belum dikonfigurasi')
Referensi
Untuk kode contoh lengkap aturan lifecycle, lihat Contoh GitHub.
Untuk informasi selengkapnya tentang operasi API yang digunakan untuk menetapkan aturan lifecycle, lihat PutBucketLifecycle.
Untuk informasi selengkapnya tentang operasi API yang digunakan untuk melihat aturan lifecycle, lihat GetBucketLifecycle.
Untuk informasi selengkapnya tentang operasi API yang digunakan untuk menghapus aturan lifecycle, lihat DeleteBucketLifecycle.