oss存储类型转换及解冻(下)
这篇就干货满满了,搞了我一天多,差点把我老命送走,也差点把阿里客服搞吐血,各种问题各种问(为了快速出结果),给领导交待
上篇提到,归档后的文件是无法访问的(除去归档直读),也说到我把一个月的测试文件分了三批,对应三种类型。
一、筛选不同类型的文件
之前已经知道,阿里是没有接口帮筛选某一段时间范围内的文件出来的(官方叫object),需要自己写逻辑:根据文件元数据信息的 LastModifiedTime 找出来。找出来是为了后续测试:验证文件是否如期转换了类型,是否已经解冻,批量处理同一批类型文件等等。
所以第一个问题,根据生效了的生命周期规则,验证文件类型是否已经成功转化,我用的是ossutil(事实上经测试,这个命令行工具比sdk遍历整个object快很多!)命令行处理:
./ossutil64 ls oss://{bucket名字}/{bucket下某个目录} | awk '$1 >= "2020-01-21" && $1 <= "2020-01-31"' | sort > 2020-01-31_filelist
二、对单个冷归档文件进行解冻访问和类型转换
方法1:直接从控制台设置
方法2:用 ossutil 方式
a)解冻访问
参考:https://help.aliyun.com/zh/oss/developer-reference/restore?spm=a2c4g.11186623.0.0.2b721bd0XjQgta
(1)编写 config.xml,配置解冻天数、解冻优先级等参数(预算高可以选择优先级最高的极速解冻)
(2)运行
./ossutil64 restore oss://{bucket名字}/{bucket下某个目录}/{需要解冻的文件名} config.xml
b)类型转换
下面命令是从标准类型转冷归档类型
./ossutil64 cp oss://{bucket名字}/{bucket下某个目录}/某个已经冷归档的文件 oss://{bucket名字}/{bucket下某个目录}/某个已经冷归档的文件 --meta X-oss-Storage-Class:ColdArchive
这个方法逻辑是做一个原文件的副本,然后进行类型转换,处理完后覆盖原文件,期间会有个是否覆盖的提示(这导致我写入脚本报错)
未转换前:
转换后(类型从 Standard变成 ColdArchive):
细心点的读者会发现转了类型之后,这个文件的 lastModifiedTime 都变了,变了会影响到是否能转为归档、低频的条件,标准存储转换别的存储类型对于文件存放到oss的时间是有限制的,大家可以找下阿里的帮助文档看看。
方式3:用sdk方式 我用的是python3,阿里的oss2库导入后貌似很多问题 环境搭建和oss凭据配置可以参考: https://help.aliyun.com/zh/oss/developer-reference/installation-14?spm=a2c4g.11186623.0.0.2bf3265fqjn1S7 https://help.aliyun.com/zh/oss/developer-reference/python-configuration-access-credentials?spm=a2c4g.11186623.0.0.d31a4f33GwPgmx 解冻参考:https://help.aliyun.com/zh/oss/developer-reference/restore-objects-1?spm=5176.smartservice_service_robot_chat_new.0.0.73f33f1biVAeMB 赶着睡觉,所以直接贴脚本(调这个脚本调了蛮久的,有啥问题可以找我哦~)
1 # coding: utf-8 2 3 import time 4 import os 5 6 from datetime import datetime 7 import pytz # 需要安装 pytz 包 8 9 import oss2 10 from oss2.credentials import EnvironmentVariableCredentialsProvider 11 12 ## 解冻模块 13 from oss2.models import RestoreConfiguration 14 15 from oss2.models import (RestoreJobParameters, 16 RestoreConfiguration, 17 RESTORE_TIER_EXPEDITED, 18 RESTORE_TIER_STANDARD, 19 RESTORE_TIER_BULK) 20 21 22 # 使用环境变量中获取的RAM用户的访问密钥配置访问凭证。 23 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) 24 25 bucket = oss2.Bucket(auth, 'https://oss-cn-shenzhen.aliyuncs.com', 'bucket名字') 26 27 28 ### 转换类型api:https://github.com/aliyun/aliyun-oss-python-sdk/blob/master/examples/object_storage_type.py 29 30 ## 读取文件列表 31 with open('oss/file_list', 'r') as file: 32 ## 逐行读取文件内容 33 for line in file: 34 # 使用空格分隔行内容 35 columns = line.split() 36 37 # 检查是否有足够的列 38 if len(columns) >= 8: 39 # 获取第8列内容(索引从0开始) 40 file_name = columns[7] 41 42 # 删除关键字 "oss://{bucket名字}/", 不然拿不到元信息 43 # 填写不包含Bucket名称在内的归档类型Object的完整路径。 44 if "oss://{bucket名字}/" in file_name: 45 object_name = file_name.replace("oss://{bucket名字}/", "") 46 meta = bucket.head_object(object_name) 47 48 ## 获取object类型:冷归档才进行处理 49 storagetype = meta.resp.headers['x-oss-storage-class'] 50 if storagetype == "ColdArchive": 51 #print(f"{file_name} {meta.resp.headers['x-oss-storage-class']}") 52 53 # 先解冻 https://help.aliyun.com/zh/oss/developer-reference/restore-objects-1?spm=a2c4g.11186623.0.0.623ffbd4 54 Nrdo62 55 # 配置解冻状态持续时间,默认为1天。本代码示例以解冻状态持续时间为2天为例。 56 days = 2 57 58 ## 设置解冻优先级:https://github.com/aliyun/aliyun-oss-python-sdk/blob/master/examples/object_restore.py 59 job_parameters = RestoreJobParameters(RESTORE_TIER_EXPEDITED) 60 61 restore_config= RestoreConfiguration(days=days,job_parameters=job_parameters) 62 # 发起解冻请求 63 bucket.restore_object(object_name, input=restore_config) 64 65 66 # 再 更改文件存储类型。 67 ## 冷归档转为标准存储 68 headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD} 69 70 bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)
其中 oss/file_list 文件内容如下,是用ossutil 过滤出来的
标签:类型转换,name,oss,object,bucket,解冻,aliyun From: https://www.cnblogs.com/windysai/p/17756033.html