Topik ini menjelaskan cara menggunakan Python SDK V2 untuk mengelola aturan siklus hidup bucket.
Informasi latar belakang
Di OSS, tidak semua data yang diunggah memerlukan akses yang sering. Namun, untuk kepatuhan data atau tujuan pengarsipan, beberapa data harus disimpan sebagai penyimpanan dingin. Berdasarkan kebutuhan bisnis Anda, Anda dapat memilih salah satu dari opsi berikut:
Aturan siklus hidup berdasarkan waktu modifikasi terakhir: Jika data belum dimodifikasi dalam waktu lama dan tidak perlu lagi disimpan, Anda dapat menggunakan jenis aturan ini untuk menghapus data secara batch atau mengubah kelas penyimpanannya menjadi kelas penyimpanan dingin guna membebaskan ruang penyimpanan.
Aturan siklus hidup berdasarkan waktu akses terakhir: Anda dapat mengaktifkan jenis aturan ini agar OSS secara otomatis memantau pola akses data. OSS mengidentifikasi data yang tidak diakses dalam waktu lama dan mengubahnya ke kelas penyimpanan dingin yang lebih hemat biaya. Proses ini menerapkan Penyusunan Tingkat Penyimpanan Otomatis dan mengurangi biaya penyimpanan.
Prasyarat
Sebelum mengonfigurasi aturan siklus hidup berdasarkan waktu modifikasi terakhir atau waktu akses terakhir, pastikan Anda memahami fitur tersebut. Untuk informasi lebih lanjut, lihat Aturan Siklus Hidup Berdasarkan Waktu Modifikasi Terakhir dan Aturan Siklus Hidup Berdasarkan Waktu Akses Terakhir.
Kode contoh dalam topik ini menggunakan Wilayah China (Hangzhou) dengan ID wilayah
cn-hangzhou. Secara default, titik akhir publik digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.Untuk menetapkan aturan siklus hidup, Anda harus memiliki izin
oss:PutBucketLifecycle. Untuk melihat aturan siklus hidup, Anda harus memiliki izinoss:GetBucketLifecycle. Untuk menghapus semua aturan siklus hidup, Anda harus memiliki izinoss:DeleteBucketLifecycle. Untuk informasi lebih lanjut tentang cara melakukan operasi tersebut, lihat Memberikan Izin Kustom kepada Pengguna RAM.
Tetapkan aturan siklus hidup
Kode contoh berikut memberikan contoh cara menetapkan aturan siklus hidup berdasarkan waktu modifikasi terakhir dan waktu akses terakhir. Untuk memodifikasi satu atau lebih aturan siklus hidup setelah ditetapkan, lihat Bagaimana Cara Memodifikasi Konfigurasi Satu atau Lebih Aturan Siklus Hidup?
Ubah kelas penyimpanan objek berdasarkan kebijakan yang menggunakan waktu modifikasi terakhir
Kode contoh berikut memberikan contoh cara menetapkan aturan siklus hidup untuk bucket guna mengubah kelas penyimpanan objek berdasarkan waktu modifikasi terakhir mereka.
import argparse
import datetime
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah untuk menerima parameter yang dimasukkan pengguna.
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini diperlukan.
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():
# Parsing 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 dari SDK.
cfg = oss.config.load_default()
# Tetapkan penyedia kredensial.
cfg.credentials_provider = credentials_provider
# Tetapkan wilayah tempat bucket berada.
cfg.region = args.region
# Jika titik akhir kustom disediakan oleh pengguna, tetapkan di 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 diubah 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, # Diatur ke false, yang menunjukkan bahwa kebijakan ini 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 secara otomatis dihapus jika objek berada di bucket dengan pengendalian versi aktif dan hanya memiliki penanda hapus. Versi non-terkini dari objek kedaluwarsa dan dihapus setelah 30 hari. Versi non-terkini dari objek diubah ke kelas penyimpanan IA setelah 10 hari.
id='rule2',
status='Enabled',
prefix='dir/',
expiration=oss.LifecycleRuleExpiration(
days=10,
expired_object_delete_marker=True
),
noncurrent_version_expiration=oss.NoncurrentVersionExpiration(
noncurrent_days=30,
),
noncurrent_version_transition=oss.NoncurrentVersionTransition(
noncurrent_days=10,
storage_class=oss.StorageClassType.IA,
is_access_time=False, # Diatur ke false, yang menunjukkan bahwa kebijakan ini berdasarkan waktu modifikasi terakhir.
),
)]
),
))
# Cetak kode status dan ID permintaan dari 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 untuk debugging.
if __name__ == "__main__":
# Titik masuk program yang memanggil fungsi utama untuk mengeksekusi logika.
main()Ubah kelas penyimpanan objek yang tidak memiliki awalan atau tag tertentu berdasarkan kebijakan yang menggunakan waktu modifikasi terakhir
Kode contoh berikut memberikan contoh cara mengubah objek dalam bucket ke kelas penyimpanan Infrequent Access 30 hari setelah terakhir dimodifikasi. Aturan ini berlaku untuk objek yang memenuhi persyaratan ukuran tertentu, tidak memiliki awalan log, dan tidak memiliki tag dengan kunci key1 dan nilai value1.
import argparse
import datetime
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah untuk menerima parameter yang dimasukkan pengguna.
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini diperlukan.
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():
# Parsing 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 dari SDK.
cfg = oss.config.load_default()
# Tetapkan penyedia kredensial.
cfg.credentials_provider = credentials_provider
# Tetapkan wilayah tempat bucket berada.
cfg.region = args.region
# Jika titik akhir kustom disediakan oleh pengguna, tetapkan di 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 logs/ dan ukuran antara 500 byte dan 1.000 byte diubah ke kelas penyimpanan Infrequent Access (IA) 30 hari setelah terakhir dimodifikasi. Aturan ini tidak berlaku untuk objek yang juga memiliki awalan logs/log dan tag key:key1 dan value:value1.
id='rule1',
status='Enabled',
prefix='logs/',
transitions=[oss.LifecycleRuleTransition(
days=30,
storage_class=oss.StorageClassType.IA,
is_access_time=False, # Diatur ke false, yang menunjukkan bahwa kebijakan ini berdasarkan waktu modifikasi terakhir.
)],
filter=oss.LifecycleRuleFilter(
object_size_greater_than=500,
object_size_less_than=1000,
filter_not=[oss.LifecycleRuleNot(
prefix='logs/log',
tag={
'key': 'key1',
'value': 'value1',
},
)],
)
)]
),
))
# Cetak kode status dan ID permintaan dari 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 untuk debugging.
if __name__ == "__main__":
# Titik masuk program yang memanggil fungsi utama untuk mengeksekusi logika.
main()Ubah kelas penyimpanan objek berdasarkan kebijakan yang menggunakan waktu akses terakhir
Kode contoh berikut memberikan contoh cara menetapkan aturan siklus hidup untuk bucket guna mengubah kelas penyimpanan objek berdasarkan waktu akses terakhir mereka.
import argparse
import datetime
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah untuk menerima parameter yang dimasukkan pengguna.
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini diperlukan.
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():
# Parsing 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 dari SDK.
cfg = oss.config.load_default()
# Tetapkan penyedia kredensial.
cfg.credentials_provider = credentials_provider
# Tetapkan wilayah tempat bucket berada.
cfg.region = args.region
# Jika titik akhir kustom disediakan oleh pengguna, tetapkan di 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(
# Dalam aturan siklus hidup rule1, semua objek yang memiliki awalan data/ diubah ke kelas penyimpanan Infrequent Access (IA) 200 hari setelah terakhir diakses. Ketika objek-objek ini diakses lagi, mereka tetap berada di kelas penyimpanan IA.
id='rule1',
status='Enabled',
prefix='data/',
transitions=[oss.LifecycleRuleTransition(
days=200,
storage_class=oss.StorageClassType.IA,
is_access_time=True, # Diatur ke true, yang menunjukkan bahwa kebijakan ini berdasarkan waktu akses terakhir.
return_to_std_when_visit=False
)],
), oss.LifecycleRule(
# Dalam aturan siklus hidup rule2, semua objek yang memiliki awalan log/ diubah ke kelas penyimpanan Infrequent Access (IA) 120 hari setelah terakhir diakses. Ketika objek-objek ini diakses lagi, mereka tetap berada di kelas penyimpanan IA.
# Dalam aturan yang sama, semua objek yang memiliki awalan log/ diubah ke kelas penyimpanan Arsip 250 hari setelah terakhir diakses.
id='rule2',
status='Enabled',
prefix='log/',
transitions=[oss.LifecycleRuleTransition(
days=120,
storage_class=oss.StorageClassType.IA,
is_access_time=True, # Diatur ke true, yang menunjukkan bahwa kebijakan ini berdasarkan waktu akses terakhir.
return_to_std_when_visit=False
), oss.LifecycleRuleTransition(
days=250,
storage_class=oss.StorageClassType.ARCHIVE,
is_access_time=True, # Diatur ke true, yang menunjukkan bahwa kebijakan ini berdasarkan waktu akses terakhir.
return_to_std_when_visit=False
)],
)]
),
))
# Cetak kode status dan ID permintaan dari 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 untuk debugging.
if __name__ == "__main__":
# Titik masuk program yang memanggil fungsi utama untuk mengeksekusi logika.
main()Lihat aturan siklus hidup
Kode contoh berikut memberikan contoh cara melihat aturan siklus hidup.
import argparse
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah untuk menerima parameter yang dimasukkan pengguna.
parser = argparse.ArgumentParser(description="get bucket lifecycle sample")
# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini diperlukan.
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():
# Parsing 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 dari SDK.
cfg = oss.config.load_default()
# Tetapkan penyedia kredensial.
cfg.credentials_provider = credentials_provider
# Tetapkan wilayah tempat bucket berada.
cfg.region = args.region
# Jika titik akhir kustom disediakan oleh pengguna, tetapkan di konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Inisialisasi klien OSS menggunakan objek konfigurasi.
client = oss.Client(cfg)
# Panggil metode get_bucket_lifecycle untuk mendapatkan aturan siklus hidup bucket.
result = client.get_bucket_lifecycle(
oss.GetBucketLifecycleRequest(
bucket=args.bucket, # Tentukan nama bucket tujuan.
)
)
# Cetak kode status dan ID permintaan dari 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 untuk debugging.
# Jika koleksi aturan siklus hidup yang dikembalikan berisi aturan, cetak detail setiap aturan satu per satu.
if result.lifecycle_configuration.rules: # Periksa apakah aturan siklus hidup ada.
for r in result.lifecycle_configuration.rules: # Lintasi semua aturan.
print(f'aturan: {r}') # Cetak isi setiap aturan.
if __name__ == "__main__":
# Titik masuk program yang memanggil fungsi utama untuk mengeksekusi logika.
main()
Hapus semua aturan siklus hidup
Kode contoh berikut memberikan contoh cara menghapus semua aturan siklus hidup untuk bucket bernama examplebucket. Jika Anda ingin menghapus satu atau lebih aturan siklus hidup, lihat Bagaimana Cara Menghapus Satu atau Lebih Aturan Siklus Hidup?
import argparse
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah untuk menerima parameter yang dimasukkan pengguna.
parser = argparse.ArgumentParser(description="delete bucket lifecycle sample")
# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini diperlukan.
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():
# Parsing 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 dari SDK.
cfg = oss.config.load_default()
# Tetapkan penyedia kredensial.
cfg.credentials_provider = credentials_provider
# Tetapkan wilayah tempat bucket berada.
cfg.region = args.region
# Jika titik akhir kustom disediakan oleh pengguna, tetapkan di konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Inisialisasi klien OSS menggunakan objek konfigurasi.
client = oss.Client(cfg)
# Panggil metode delete_bucket_lifecycle untuk menghapus aturan siklus hidup bucket.
result = client.delete_bucket_lifecycle(
oss.DeleteBucketLifecycleRequest(
bucket=args.bucket, # Tentukan nama bucket tujuan.
)
)
# Cetak kode status dan ID permintaan dari 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 untuk debugging.
if __name__ == "__main__":
# Titik masuk program yang memanggil fungsi utama untuk mengeksekusi logika.
main()
Referensi
Untuk kode contoh lengkap untuk menetapkan aturan siklus hidup, lihat put_bucket_lifecycle.py.
Untuk kode contoh lengkap untuk melihat aturan siklus hidup, lihat get_bucket_lifecycle.py.
Untuk kode contoh lengkap untuk menghapus semua aturan siklus hidup, lihat delete_bucket_lifecycle.py.