全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

管理存储空间生命周期规则(Python)

最近更新时间:2026-06-03 21:32:12

设置生命周期规则

以下代码用于设置生命周期规则:

from ks3.connection import Connection
from datetime import datetime

# 金山云主账号AccessKey拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号进行API访问或日常运维,请登录https://uc.console.ksyun.com/pro/iam/#/user/list创建子账号。
c = Connection('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>', host='<YOUR_REGION_ENDPOINT>')

# 获取存储空间实例
b = c.get_bucket('<YOUR_BUCKET_NAME>')

from ks3.xmlParsers.bucketLifecycle import BucketLifecycle, Rule as LifecycleRule, Filter as LifecycleFilter, \
    Expiration as LifecycleExpiration, Transition as LifecycleTransition, AbortIncompleteMultipartUpload
from ks3.objectTagging import Tag

tag = Tag(key="tag1", value="test1")
# 筛选前缀为prefix1、标签为tag1:test1的objects,设置过期规则,在其最后修改时间3天后过期。
rule1 = LifecycleRule('rule1', LifecycleFilter('prefix1', tags=[tag]),
                      status='Enabled',
                      expiration=LifecycleExpiration(days=3))

# 设置过期规则,筛选标签为tag1:test1 的objects,最后修改时间在指定日期之前的,过期
rule2 = LifecycleRule('rule2', LifecycleFilter(tags=[tag]),
                      status='Enabled',
                      expiration=LifecycleExpiration(
                          date=datetime(2021, 12, 12).isoformat(timespec='seconds') + '+08:00'))

# 设置存储类型转换规则,筛选前缀为prefix3的objects,在其最后修改时间20天之后转为低频访问类型,在其最后修改时间30天之后转为归档类型。
rule3 = LifecycleRule('rule3', LifecycleFilter('prefix3'),
                      status='Enabled',
                      transitions=[LifecycleTransition(days=20, storage_class='STANDARD_IA'),
                                   LifecycleTransition(days=30, storage_class='ARCHIVE')])

# 设置存储类型转换规则,筛选前缀为prefix4的objects,最后修改时间在指定日期之前的,转为低频访问类型
rule4 = LifecycleRule('rule4', LifecycleFilter('prefix4'),
                      status='Enabled',
                      transitions=[
                          LifecycleTransition(date=datetime(2021, 12, 12).isoformat(timespec='seconds') + '+08:00',
                                              storage_class='STANDARD_IA')])

# 设置分片上传碎片清理规则,筛选前缀为prefix5的part,在最后修改时间7天后删除
rule5 = LifecycleRule('rule5', LifecycleFilter('prefix5'),
                      status='Enabled',
                      abort_incomplete_multipart_upload=AbortIncompleteMultipartUpload(days_after_initiation=7))
# 设置分片上传碎片清理规则,筛选前缀为prefix5的part,文件碎片生成时间早于指定日期的,文件碎片删除。
# rule5 = LifecycleRule('rule5', LifecycleFilter('prefix5'),
#                       status='Enabled',
#                       abort_incomplete_multipart_upload=AbortIncompleteMultipartUpload(date=datetime(2021, 12, 12).isoformat(timespec='seconds') + '+08:00'))
lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5])
# 设置生命周期规则
ret = b.set_bucket_lifecycle(lifecycle)
print("set_bucket_lifecycle, request_id: ", ret.response_metadata.request_id)

有关设置生命周期相关API,请参见Put Bucket Lifecycle

查看生命周期规则

from ks3.connection import Connection

# 金山云主账号AccessKey拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号进行API访问或日常运维,请登录https://uc.console.ksyun.com/pro/iam/#/user/list创建子账号。
c = Connection('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>', host='<YOUR_REGION_ENDPOINT>')

# 获取存储空间实例
b = c.get_bucket('<YOUR_BUCKET_NAME>')

# 查看生命周期规则
lifecycle = b.get_bucket_lifecycle()
print("get_bucket_lifecycle, request_id: ", lifecycle.response_metadata.request_id)
print(lifecycle.to_xml())

有关查看生命周期规则相关API,请参见Get Bucket Lifecycle

删除生命周期规则

from ks3.connection import Connection

# 金山云主账号AccessKey拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号进行API访问或日常运维,请登录https://uc.console.ksyun.com/pro/iam/#/user/list创建子账号。
c = Connection('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>', host='<YOUR_REGION_ENDPOINT>')

# 获取存储空间实例
b = c.get_bucket('<YOUR_BUCKET_NAME>')

# 删除生命周期规则
resp = b.delete_bucket_lifecycle()
print("delete_bucket_lifecycle, request_id: ", resp.response_metadata.request_id)

有关删除生命周期规则相关API,请参见Delete Bucket Lifecycle

设置带对象大小过滤的生命周期规则

以下代码用于设置带对象大小(ObjectSize)过滤条件的生命周期规则,仅对指定大小范围内的对象生效:

from ks3.connection import Connection
from ks3.xmlParsers.bucketLifecycle import BucketLifecycle, Rule as LifecycleRule, Filter as LifecycleFilter, \
    Expiration as LifecycleExpiration

# 金山云主账号AccessKey拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号进行API访问或日常运维,请登录https://uc.console.ksyun.com/pro/iam/#/user/list创建子账号。
c = Connection('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>', host='<YOUR_REGION_ENDPOINT>')
b = c.get_bucket('<YOUR_BUCKET_NAME>')

# 使用 object_size_greater_than 和 object_size_less_than 过滤对象大小
# 仅对大于 500 字节且小于 64000 字节的对象生效
rule = LifecycleRule(
    'size-filter-rule',
    LifecycleFilter('logs/', object_size_greater_than=500, object_size_less_than=64000),
    status='Enabled',
    expiration=LifecycleExpiration(days=30)
)

lifecycle = BucketLifecycle([rule])
ret = b.set_bucket_lifecycle(lifecycle)
print("set_bucket_lifecycle, request_id:", ret.response_metadata.request_id)

object_size_greater_thanobject_size_less_than 可单独使用或组合使用,单位为字节。当同时指定前缀和对象大小时,两个条件需同时满足。

设置带排除条件(Not)的生命周期规则

以下代码用于设置带排除条件(Not)的生命周期规则,排除特定前缀或标签的对象:

from ks3.connection import Connection
from ks3.xmlParsers.bucketLifecycle import BucketLifecycle, Rule as LifecycleRule, Filter as LifecycleFilter, \
    Expiration as LifecycleExpiration, Not
from ks3.objectTagging import Tag

# 金山云主账号AccessKey拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号进行API访问或日常运维,请登录https://uc.console.ksyun.com/pro/iam/#/user/list创建子账号。
c = Connection('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>', host='<YOUR_REGION_ENDPOINT>')
b = c.get_bucket('<YOUR_BUCKET_NAME>')

# 方式一:排除特定前缀
not_condition = Not(prefix='documents/important/')
rule = LifecycleRule(
    'exclude-important-rule',
    LifecycleFilter('documents/', nots=[not_condition]),
    status='Enabled',
    expiration=LifecycleExpiration(days=30)
)

# 方式二:排除带有特定标签的对象
exclude_tag = Tag()
exclude_tag.key = 'retain'
exclude_tag.value = 'true'
not_with_tag = Not(prefix='temp/', tag=exclude_tag)
rule2 = LifecycleRule(
    'exclude-tagged-rule',
    LifecycleFilter('temp/', nots=[not_with_tag]),
    status='Enabled',
    expiration=LifecycleExpiration(days=7)
)

# 方式三:多个 Not 条件
not1 = Not(prefix='prefix1/')
not2 = Not(prefix='prefix2/')
rule3 = LifecycleRule(
    'multi-exclude-rule',
    LifecycleFilter('', nots=[not1, not2]),
    status='Enabled',
    expiration=LifecycleExpiration(days=90)
)

lifecycle = BucketLifecycle([rule, rule2, rule3])
ret = b.set_bucket_lifecycle(lifecycle)
print("set_bucket_lifecycle, request_id:", ret.response_metadata.request_id)

Not 条件用于排除匹配的对象,支持按前缀(prefix)和标签(tag)进行排除。一个 Filter 中可以包含多个 Not 条件,对象只要匹配任一 Not 条件即被排除。

设置允许相同操作重叠的生命周期规则

以下代码用于设置允许相同操作重叠(AllowSameActionOverlap)的生命周期规则:

from ks3.connection import Connection
from ks3.xmlParsers.bucketLifecycle import BucketLifecycle, Rule as LifecycleRule, Filter as LifecycleFilter, \
    Expiration as LifecycleExpiration, Transition as LifecycleTransition

# 金山云主账号AccessKey拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号进行API访问或日常运维,请登录https://uc.console.ksyun.com/pro/iam/#/user/list创建子账号。
c = Connection('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>', host='<YOUR_REGION_ENDPOINT>')
b = c.get_bucket('<YOUR_BUCKET_NAME>')

rule = LifecycleRule(
    'overlap-rule',
    LifecycleFilter('data/'),
    status='Enabled',
    transitions=[
        LifecycleTransition(days=30, storage_class='STANDARD_IA'),
        LifecycleTransition(days=60, storage_class='ARCHIVE')
    ],
    expiration=LifecycleExpiration(days=90)
)

# 设置 allow_same_action_overlap=True,允许多条规则对同一对象执行相同操作
# 此选项通过 x-kss-allow-same-action-overlap 请求头传递
lifecycle = BucketLifecycle([rule], allow_same_action_overlap=True)
ret = b.set_bucket_lifecycle(lifecycle)
print("set_bucket_lifecycle, request_id:", ret.response_metadata.request_id)

allow_same_action_overlap 参数控制是否允许多条生命周期规则对同一对象执行相同操作。默认情况下,如果多条规则对同一对象有冲突操作,请求会被拒绝。设置为 True 后可允许此类重叠。

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈