生命周期规则可针对前缀或对象标签生效,您也可以同时指定两者作为生命周期规则生效的条件。

说明 标签条件中标签的Key和Value必须同时匹配。同一个规则中,如果同时配置了前缀和多个对象标签,则只有同时满足前缀且匹配规则中所有对象标签的对象(Object),才视为适用于该规则。

生命周期规则中添加标签匹配规则

以下代码用于在生命周期规则中添加标签匹配规则。
# -*- coding: utf-8 -*-
import oss2
import datetime
from oss2.models import (LifecycleExpiration, LifecycleRule, 
                        BucketLifecycle,AbortMultipartUpload, 
                        TaggingRule, Tagging, StorageTransition)

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')

# 设置Object过期规则,距最后修改时间3天后过期。
# 设置过期规则名称和Object的匹配前缀。
rule1 = LifecycleRule('rule1', 'tests/',
                      # 启用过期规则。
                      status=LifecycleRule.ENABLED,
                      # 设置过期规则为距最后修改时间3天后过期。
                      expiration=LifecycleExpiration(days=3))

# 设置Object过期规则,指定日期之前创建的文件过期。
# 设置过期规则名称和Object的匹配前缀。
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)))

# 设置Object的匹配标签。
tagging_rule = TaggingRule()
tagging_rule.add('key1', 'value1')
tagging_rule.add('key2', 'value2')
tagging = Tagging(tagging_rule)

# 设置转储规则,最后修改时间超过365天后转为归档存储(ARCHIVE)。 
# rule5中指定了Object的匹配标签,只有同时拥有key1=value1和key2=value2两个标签的Object才会匹配此规则。
rule5 = LifecycleRule('rule5', 'logging2-',
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(days=365, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
                      tagging = tagging)

lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5])

bucket.put_bucket_lifecycle(lifecycle)

查看生命周期规则中匹配的标签信息

以下代码用于查看生命周期规则中匹配的标签信息。
# -*- coding: utf-8 -*-
import oss2

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')

# 查看生命周期规则。
lifecycle = bucket.get_bucket_lifecycle()

for rule in lifecycle.rules:
    # 查看分片过期规则。
    if rule.abort_multipart_upload is not None:
        print('id={0}, prefix={1}, tagging={2}, status={3}, days={4}, created_before_date={5}'
                .format(rule.id, rule.prefix, rule.tagging, rule.status,
                    rule.abort_multipart_upload.days,
                    rule.abort_multipart_upload.created_before_date))

    # 查看Object过期规则。
    if rule.expiration is not None:
        print('id={0}, prefix={1}, tagging={2}, status={3}, days={4}, created_before_date={5}'
                .format(rule.id, rule.prefix, rule.tagging, rule.status,
                    rule.expiration.days,
                    rule.expiration.created_before_date))
    # 查看转储规则。
    if len(rule.storage_transitions) > 0: 
        storage_trans_info = ''
        for storage_rule in rule.storage_transitions:
            storage_trans_info += 'days={0}, created_before_date={1}, storage_class={2} **** '.format(
                storage_rule.days, storage_rule.created_before_date, storage_rule.storage_class)

        print('id={0}, prefix={1}, tagging={2}, status={3},, StorageTransition={4}'
                .format(rule.id, rule.prefix, rule.tagging, rule.status, storage_trans_info))