前言
阿里云工作台支持调用openapi完成一系列操作,因为公司需要定期导出实例配置统计,所以尝试写了个python脚本。
api调用:aliyun-python-sdk-slb
说明
- aliyun_Client模块为自定义模块,可以参考https://blog.csdn.net/weixin_46335835/article/details/120264405?spm=1001.2014.3001.5502
- 脚本分为两部分,第一部分:获取实例ID,第二部分采集实例数据
- 第一部分脚本命名:aliyun_SLB.py , 因为涉及后续调用SLB,注意同步修改
采集实例ID
#!/usr/bin/env python
# author zoe chen
#coding=utf-8
import json
from aliyun_Client import client
from aliyunsdkcore.request import CommonRequest
def LBID():
count = 1
# 使用字典格式来收集最后实例的信息
total_dict = {}
# 构造请求,请求的参数在每个函数中指定
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('slb.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2014-05-15')
request.set_action_name('DescribeLoadBalancers')
request.add_query_param('PageSize', "30")
request.add_query_param('RegionId', "cn-hangzhou")
# 获取总页数,并循环获取实例信息
TotalCount = json.loads(client.do_action(request)).get('TotalCount')
for page in range(1, (TotalCount // 30) + 2):
# print(page)
request.add_query_param('PageNumber', page)
# 或得请求结果
response = client.do_action_with_exception(request)
# 结果解析为json格式
resj = json.loads(response, encoding='utf-8')
# 获得所有实例的所有信息
instances = resj['LoadBalancers']['LoadBalancer']
# 把需要手机的信息手机到total_dict
for item in instances:
insid = item['LoadBalancerId']
total_dict[count] = insid
count += 1
return total_dict
分隔大法
采集实例数据
#!/usr/bin/env python
# author zoe chen
#coding=utf-8
import json
import csv
from aliyun_Client import client
from datetime import datetime
from aliyunsdkcore.request import CommonRequest
from aliyun_SLB import LBID
def collection():
count = 1
# 使用字典格式来收集最后实例的信息
total_dict = {}
# 构造请求,请求的参数在每个函数中指定
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('slb.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2014-05-15')
request.set_action_name('DescribeLoadBalancerAttribute')
# 获取总页数,并循环获取实例信息
LoadBalancerId = LBID()
# print(LoadBalancerId)
for insid in LoadBalancerId.values():
# print(insid)
request.add_query_param('LoadBalancerId', insid)
# 或得请求结果
response = client.do_action_with_exception(request)
# 结果解析为json格式
resj = json.loads(response, encoding='utf-8')
# print(resj)
# 获得所有实例的所有信息
lbid = resj['LoadBalancerId']
lbip = resj['Address']
lbtype = resj['AddressType']
status = resj['LoadBalancerStatus']
endtime = resj['EndTime']
starttime = resj['CreateTime']
hostname = resj['LoadBalancerName']
bandwidth = resj['Bandwidth']
instances = [lbid, hostname,bandwidth,lbip,lbtype,starttime,endtime,status]
total_dict[count] = instances
count += 1
return total_dict
#
#
if __name__ == '__main__':
# 获得所有实例的相关信息
totaldict = collection()
# print(type(totaldict))
# print(totaldict)
time = datetime.now()
fname = 'D:\\Desktop\\aliyun_collection\\负载均衡_'
filename = fname + (time.strftime("%Y%m%d") + ".csv")
#
with open(filename,'w',newline="") as f:
headrow = ['实例ID','实例名称', '流量带宽', 'IP地址', '实例类型','创建时间','到期时间','状态']
write = csv.writer(f)
write.writerow(headrow)
for key in totaldict:
row = totaldict[key]
write = csv.writer(f)
write.writerow(row)
print("写入完毕!")