阿里云导出云数据库RDS实例-python
前言 阿里云工作台支持调用openapi完成一系列操作,因为公司需要定期导出实例配置统计,所以尝试写了个python脚本。 api调用:DescribeDBInstanceAttribute:此api查询条件为实例ID,所以调用DescribeDBInstances获取
获取实例ID
说明:
- aliyun_Client模块为自定义模块,可以参考https://blog..net/weixin_46335835/article/details/120264405?spm=1001.2014.3001.5502
- 脚本分为两部分,第一部分:获取实例ID,第二部分采集实例数据
- 第一部分脚本命名:aliyun_RDS_ID.py , 因为涉及后续调用,注意同步修改
# 这是第一部分
#!/usr/bin/env python
# author zoe chen
#coding=utf-8
import json
from aliyun_Client import client
from aliyunsdkcore.request import CommonRequest
def DBInstances():
total_dict = {}
count = 1
request = CommonRequest()
request.set_accept_format(json)
request.set_domain(rds.aliyuncs.com)
request.set_method(POST)
request.set_protocol_type(https) # https | http
request.set_version(2014-08-15)
request.set_action_name(DescribeDBInstances)
request.add_query_param(PageSize, "30")
request.add_query_param(RegionId, "cn-hangzhou")
TotalCount = json.loads(client.do_action(request)).get(TotalRecordCount)
for page in range(1,(TotalCount // 30) + 2):
# print(page)
request.add_query_param(PageNumber, page)
response = client.do_action(request)
resj = json.loads(response, encoding=utf-8)
instances = resj[Items][DBInstance]
for item in instances:
insid = item[DBInstanceId]
total_dict[count] = insid
count += 1
# print(total_dict)
return total_dict
分隔大法
采集实例数据
# 这是第二部分
#!/usr/bin/env python
# author zoe chen
#coding=utf-8
import json
import csv
from aliyun_Client import client
from aliyunsdkcore.request import CommonRequest
from aliyun_RDS_ID import DBInstances
from datetime import datetime
def Collection_Results():
count = 1
total_dict = {}
rdsid = DBInstances()
for insid in rdsid.values():
request = CommonRequest()
request.set_accept_format(json)
request.set_domain(rds.aliyuncs.com)
request.set_method(POST)
request.set_protocol_type(https) # https | http
request.set_version(2014-08-15)
request.set_action_name(DescribeDBInstanceAttribute)
request.add_query_param(DBInstanceId, insid)
response = client.do_action(request)
# python2: print(response)
resj = json.loads(response, encoding = utf-8)
instances = resj[Items][DBInstanceAttribute]
for result in instances:
hostname = result[DBInstanceDescription]
cpu = result[DBInstanceCPU]
mem = result[DBInstanceMemory]//1024
storage = result[DBInstanceStorage]
starttime = result[CreationTime]
endtime = result[ExpireTime]
ctstr = result[ConnectionString]
status = result[DBInstanceStatus]
insinfolist = [insid,hostname,cpu,mem,storage,starttime,endtime,ctstr,status]
total_dict[count] = insinfolist
count += 1
return total_dict
if __name__ == __main__:
totaldict = Collection_Results()
# 定义文件路径文件名
time = datetime.now()
fname = D:\Desktop\aliyun_collection\RDS_
filename = fname + (time.strftime("%Y%m%d") + ".csv")
#将收集的实例信息写入文件中
with open(filename,w,newline="") as f :
headrow = [实例id,主机名,CPU,内存(G),数据盘(G),创建时间,到期时间,内网连接地址,状态]
write = csv.writer(f)
write.writerow(headrow)
for key in totaldict:
row = totaldict[key]
write = csv.writer(f)
write.writerow(row)
print("写入完毕!")
