python类的生命周期_生命周期_存储空间_Python_SDK 示例_对象存储 OSS - 阿里云

OSS支持设置生命周期(Lifecycle)规则,自动删除过期的文件和碎片,或将到期的文件转储为低频或归档存储类型,从而节省存储费用。本文介绍如何管理生命周期规则。

背景信息

生命周期规则包含如下信息:

前缀或标签匹配策略:生命周期规则匹配的Object和碎片。

按前缀匹配:按指定前缀匹配Object和碎片。可创建多条规则匹配不同的前缀,前缀不能重复。

按标签匹配:按指定标签的Key和Value匹配Object。单条规则可配置多个标签,OSS对所有拥有这些标签的对象执行生命周期规则。标签匹配不可以作用于碎片。

说明 对象标签功能详情请参见对象标签。

按前缀+标签匹配:按指定前缀和一个或多个标签的筛选条件匹配对象。

配置到整个Bucket:匹配整个Bucket内的所有Object和碎片。此种方式只能创建一条规则。

文件过期策略:设置Object的过期时间及操作。

过期天数:指定一个过期天数N,并指定非版本状态下的所有Object、以及版本控制状态下的当前版本Object过期后执行什么操作。Object会在其最后修改时间的N天后过期,并执行指定的操作。

过期日期:指定一个过期日期,并指定非版本状态下的所有Object、以及版本控制状态下的当前版本Object过期后执行什么操作。最后修改时间在该日期之前的Object全部过期,并执行指定的操作。

Object成为非当前版本天数:指定一个过期天数N,并指定非当前版本Object过期后执行什么操作。Object会在其成为非当前版本的N天后过期,并执行指定的操作。

说明 您可以将过期Object转换为低频访问类型或归档类型,也可以选择删除过期Object。详情请参见生命周期配置元素。

碎片过期策略:设置碎片的过期时间及操作。

过期天数:可指定一个过期天数N,碎片会在其最后修改时间的N天后被删除。

过期日期:指定一个过期日期,最后修改时间在该日期之前的碎片会被全部删除。

通过uploadPart方法上传的分片也支持设置生命周期规则。文件最后修改时间以初始化分片上传事件的时间为准。

更多关于生命周期的内容请参见管理对象生命周期。

设置生命周期规则

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

# -*- coding: utf-8 -*-

import oss2

import datetime

from oss2.models import (LifecycleExpiration, LifecycleRule,

BucketLifecycle,AbortMultipartUpload,

TaggingRule, Tagging, StorageTransition,

NoncurrentVersionStorageTransition,

NoncurrentVersionExpiration)

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 设置object距其最后修改时间3天后过期。

rule1 = LifecycleRule('rule1', 'tests/',

status=LifecycleRule.ENABLED,

expiration=LifecycleExpiration(days=3))

# 设置object过期规则,指定日期之前创建的文件过期。

rule2 = LifecycleRule('rule2', 'tests2/',

status=LifecycleRule.ENABLED,

expiration=LifecycleExpiration(created_before_date=datetime.date(2018, 12, 12)))

# 设置分片过期规则,分片3天后过期。

rule3 = LifecycleRule('rule3', 'tests3/',

status=LifecycleRule.ENABLED,

abort_multipart_upload=AbortMultipartUpload(days=3))

# 设置分片过期规则,指定日期之前的分片过期。

rule4 = LifecycleRule('rule4', 'tests4/',

status=LifecycleRule.ENABLED,

abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2018, 12, 12)))

# 设置存储类型转换规则,指定Object在其最后修改时间20天之后转为低频访问类型,在其最后修改时间30天之后转为归档类型。

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)])

# 设置匹配的标签。

tagging_rule = TaggingRule()

tagging_rule.add('key1', 'value1')

tagging_rule.add('key2', 'value2')

tagging = Tagging(tagging_rule)

# 设置存储类型转换规则,指定Object在其最后修改时间超过365天后转为ARCHIVE类型。

# rule6与以上几个规则不同的是它指定了匹配的标签,同时拥有key1=value1,key2=value2两个标签的object才会匹配此规则。

rule6 = LifecycleRule('rule6', 'tests6/',

status=LifecycleRule.ENABLED,

storage_transitions=[StorageTransition(created_before_date=datetime.date(2018, 12, 12),storage_class=oss2.BUCKET_STORAGE_CLASS_IA)],

tagging = tagging)

# rule7针对版本控制状态下的Bucket。

# 设置object在其最后修改时间365天之后自动转为ARCHIVE类型。

# 设置自动移除过期删除标记。

# 设置非当前版本object 12天后转为IA类型。

# 设置非当前版本object 20天后转为ARCHIVE类型。

# 设置非当前版本object 30天后删除。

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)

查看生命周期规则

以下代码用于查看生命周期规则:

# -*- coding: utf-8 -*-

import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 查看生命周期规则。

lifecycle = bucket.get_bucket_lifecycle()

for rule in lifecycle.rules:

print('==========')

print('id:', rule.id)

print('prefix:', rule.prefix)

print('status', rule.status)

if rule.tagging is not None:

print('tagging:', rule.tagging)

if rule.abort_multipart_upload is not None:

if rule.abort_multipart_upload.days is not None:

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:

print('expiration days:', rule.expiration.days)

elif rule.expiration.expired_detete_marker is not None:

print('expiration expired_detete_marker:', rule.expiration.expired_detete_marker)

elif rule.expiration.created_before_date is not None:

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)

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)

print('noncurrent_version_sotrage_transitions:', noncurrent_storage_info)

if rule.noncurrent_version_expiration is not None:

print('noncurrent_version_expiration days:', rule.noncurrent_version_expiration.noncurrent_days)

清空生命周期规则

以下代码用于清空生命周期规则:

# -*- coding: utf-8 -*-

import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

#清空生命周期规则。

bucket.delete_bucket_lifecycle()

# 再次查看生命周期规则会抛出异常。

try:

lifecycle = bucket.get_bucket_lifecycle()

except oss2.exceptions.NoSuchLifecycle:

print('lifecycle is not configured')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以的,你可以通过阿里云提供的SDK来实现RAM子账号授权管理OSS对象存储。 首先,你需要在阿里云控制台中创建一个RAM子账号,并授予该子账号管理OSS的权限。然后,使用该子账号的 AccessKeyId 和 AccessKeySecret 进行SDK的初始化。 接下来,你可以使用SDK中的接口来执行授权操作。例如,使用Java SDK,可以使用以下代码来创建一个RAM用户并授予该用户对指定OSS Bucket的读取权限: ``` // 初始化一个RAM客户端 IAcsClient client = new DefaultAcsClient(profile); // 创建一个RAM用户 CreateUserRequest request = new CreateUserRequest(); request.setUserName("testuser"); CreateUserResponse response = client.getAcsResponse(request); // 授权该用户对指定Bucket的读取权限 AttachPolicyToUserRequest policyRequest = new AttachPolicyToUserRequest(); policyRequest.setPolicyName("AliyunOSSReadOnlyAccess"); policyRequest.setUserName("testuser"); policyRequest.setPolicyType(PolicyType.SYSTEM); policyRequest.setTargetType(TargetType.USER); policyRequest.setTargetIds(Collections.singletonList(response.getUser().getUserId())); AttachPolicyToUserResponse policyResponse = client.getAcsResponse(policyRequest); ``` 以上代码创建了一个名为 `testuser` 的RAM用户,并将系统预设的 `AliyunOSSReadOnlyAccess` 策略授予该用户,以授权该用户对指定的OSS Bucket进行读取操作。 你可以根据自己的需求修改上述代码,以实现其他的授权操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值