阿里云导出云数据库RDS实例-python

前言 阿里云工作台支持调用openapi完成一系列操作,因为公司需要定期导出实例配置统计,所以尝试写了个python脚本。 api调用:DescribeDBInstanceAttribute:此api查询条件为实例ID,所以调用DescribeDBInstances获取

获取实例ID

说明:

  1. aliyun_Client模块为自定义模块,可以参考https://blog..net/weixin_46335835/article/details/120264405?spm=1001.2014.3001.5502
  2. 脚本分为两部分,第一部分:获取实例ID,第二部分采集实例数据
  3. 第一部分脚本命名: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("写入完毕!")
经验分享 程序员 微信小程序 职场和发展