OSS支援設定生命週期(Lifecycle)規則,自動刪除過期的檔案和碎片,或將到期的檔案轉儲為低頻或Archive Storage類型,從而節省儲存費用。每條規則包含:
- 規則ID。用於標識一條規則,同一儲存空間內規則ID不能重複。
- 策略。有以下兩種設定方式。同一儲存空間內僅支援一種設定方式。
- 按首碼匹配。此種方式允許建立多條規則,首碼不能重複。
- 配置到整個儲存空間。此種方式只能建立一條規則。
- 過期時間。有兩種指定方式:
- 指定距檔案最後修改時間N天后過期。
- 指定日期建立前的檔案過期,之後的不過期。
- 是否生效。
通過upload_part方法上傳的分區也支援設定生命週期規則。檔案最後修改時間以初始化分區上傳事件的時間為準。
更多關於生命週期的內容請參見管理對象生命週期。
設定生命週期規則
以下代碼用於設定生命週期規則:
# -*- coding: utf-8 -*-
import oss2
from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle,AbortMultipartUpload
import datetime
# 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州為例,其它Region請按實際情況填寫。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
# 距最後修改時間3天后過期。
rule1 = LifecycleRule('rule1', 'tests/',
status=LifecycleRule.ENABLED,
expiration=LifecycleExpiration(days=3))
# 指定日期之前建立的檔案過期。
rule2 = LifecycleRule('rule2', 'logging-',
status=LifecycleRule.DISABLED,
expiration=LifecycleExpiration(created_before_date=datetime.date(2018, 12, 12)))
# 分區3天后過期。
rule3 = LifecycleRule('rule3', 'tests1/',
status=LifecycleRule.ENABLED,
abort_multipart_upload=AbortMultipartUpload(days=3))
# 指定日期之前的分區過期。
rule4 = LifecycleRule('rule4', 'logging1-',
status=LifecycleRule.DISABLED,
abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2018, 12, 12)))
lifecycle = BucketLifecycle([rule1, rule2,rule3,rule4])
bucket.put_bucket_lifecycle(lifecycle)
查看生命週期規則
以下代碼用於查看生命週期規則:
# -*- coding: utf-8 -*-
import oss2
# 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州為例,其它Region請按實際情況填寫。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
lifecycle = bucket.get_bucket_lifecycle()
for rule in lifecycle.rules:
if rule.abort_multipart_upload is None:
print('id={0}, prefix={1}, status={2}, days={3}, created_before_date={4}'
.format(rule.id, rule.prefix, rule.status,
rule.expiration.days,
rule.expiration.created_before_date))
else:
print('id={0}, prefix={1}, status={2}, days={3}, created_before_date={4}'
.format(rule.id, rule.prefix, rule.status,
rule.abort_multipart_upload.days,
rule.abort_multipart_upload.created_before_date))
清空生命週期規則
以下代碼用於清空生命週期規則:
# -*- coding: utf-8 -*-
import oss2
# 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州為例,其它Region請按實際情況填寫。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
bucket.delete_bucket_lifecycle()
# 再次查看生命週期規則會拋出異常。
try:
lifecycle = bucket.get_bucket_lifecycle()
except oss2.exceptions.NoSuchLifecycle:
print('lifecycle is not configured')