#!/usr/bin/env python3.6 #coding=utf-8 import os import urllib.request, json, datetime, time import ssl from aliyunsdkcore.client import AcsClient from aliyunsdkr_kvstore.request.v20150101.DescribeBackupsRequest import DescribeBackupsRequest from aliyunsdkr_kvstore.request.v20150101.DescribeInstancesRequest import DescribeInstancesRequest client = AcsClient('********************', '**************************', 'cn-xxx') #获取阿里云redis实例列表 def get_redis_insts(): request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageNumber(1) request.set_PageSize(100) = client.do_action_with_exception Response (Request) Print ( "the Selected Folder not exist,try to create it.") json.loads return (Response) .get ( 'the Instances') [ 'KVStoreInstance'] # Download obtain the backup ID list according to Example DEF get_bak_urls (instId, the startTime, endTime): Request = DescribeBackupsRequest () request.set_accept_format ( 'JSON' ) request.set_StartTime (the startTime) request.set_EndTime (endTime) request.set_InstanceId (instId) Response = client.do_action_with_exception (Request) return json.loads (Response) .get ( 'Backups'). GET ( 'Backup') # The Download to download a backup local (IDC backup machine 111.11.11.11) DEF get_redis_bak (folder_path, URL): IF Not os.path.exists (folder_path): os.makdirs (folder_path) filename = url.split ( '/') [ -1] .split ( '?') [0] filepath = folder_path + '/' + filename if os.path.exists(filepath): print("File have already exist. skip") else: try: print("Try downloading file: {}".format(url)) ssl._create_default_https_context = ssl._create_unverified_context #导入ssl时关闭证书验 urllib.request.urlretrieve(url, filename=filepath) print("Done") except Exception as e: print("Error occurred when downloading file, error message:") print(e) #清理30天前的备份文件 def fileremove(filename, remove_time): timeInt = os.path.getmtime(filename) sec = remove_time * 86400 cc = time.time() if int(timeInt) < int(cc)-int(sec): os.remove(filename) def delFilesOfDirAndSubdir(filedir, deltime): if os.path.isfile(filedir): fileremove(filedir, deltime) else: try: for i in os.listdir(filedir): if os.path.isfile(filedir + '/' +i): fileremove(filedir + '/' + i, deltime) else: new_dir = filedir + '/' + i delFilesOfDirAndSubdir(new_dir, deltime) except Exception as e: print("Error occurred when remove file, error message:") print(e) if __name__ == "__main__": delFilesOfDirAndSubdir('/backup/aliyun_redis_bak', 30) now = datetime.datetime.now() thirtyDaysAgo = (datetime.datetime.now() - datetime.timedelta(days=30)) endTime = now.strftime("%Y-%m-%dT%H:%MZ") startTime = thirtyDaysAgo.strftime("%Y-%m-%dT%H:%MZ") for kvs in get_redis_insts(): print('Begin get baks of: '+ kvs['InstanceName']) bakList = get_bak_urls(kvs['InstanceId'], startTime, endTime) for bak in bakList: get_redis_bak(kvs['InstanceName'],bak['BackupDownloadURL']) print('End get baks of: '+ kvs['InstanceName']) #pip install aliyun-python-sdk-core-v3 #pip install aliyun-python-sdk-r-kvstore