阿里雲獲取所有例項資訊 API 使用
阿里雲獲取所有例項資訊 API 使用
使用前需安裝依賴的sdk模組,可以在阿里雲後臺查詢相關API使用方式:
示例程式碼:
! /usr/bin/env python
-*- coding: utf-8 -*-
__author__ = "shuke"
Date: 2017/9/26
import json, yaml
try: from aliyunsdkcore.client import AcsClient from aliyunsdkcore import client from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest except ImportError as e: print("Error: ", e) exit()
class AliCloudApi(object): """ 阿里雲API獲取資料 """ # 例項編號 hid = 1 # 所有region的主機 all_instances_dic = {}
def \_\_init\_\_(self, key, secret, zone="cn-beijing"): self.key = key self.secret = secret self.zone = zone self.client = AcsClient(self.key, self.secret, self.zone) def instances\_count(self, page\_size=10): """ 返回頁碼數量 :param page\_size: :return: """ # 建立 request,並設定引數 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set\_PageSize(page\_size) # 發起 API 請求並列印返回 response = self.client.do\_action\_with\_exception(request) ret = json.loads(response, encoding='utf-8') # 頁碼 total\_page, b = divmod(ret\['TotalCount'\], page\_size) if b: total\_page = total\_page + 1 return total\_page def queryinstances(self): """ 獲取各region的例項資訊 :return: region下所有的例項資訊 """ per\_region\_instances = \[\] try: total\_page = self.instances\_count() for page\_num in range(1, total\_page + 1): num = " 第%d頁 " % page\_num print(num.center(100, "\*")) # 建立 request,並設定引數 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set\_PageNumber(page\_num) # 發起 API 請求並列印返回 response = self.client.do\_action\_with\_exception(request) ret = json.loads(response, encoding='utf-8') # print(json.dumps(ret), indent=4, ensure\_ascii=False)) instances = ret\['Instances'\]\['Instance'\] for item in instances: ele = {} ele\['ZoneId'\] = item\['ZoneId'\] ele\['InstanceId'\] = item\['InstanceId'\] ele\['InstanceType'\] = item\['InstanceType'\] ele\['HostName'\] = item\['HostName'\] ele\['InstanceName'\] = item\['InstanceName'\] # 公網IP if item\['PublicIpAddress'\]\['IpAddress'\]: ele\['PublicIpAddress'\] = item\['PublicIpAddress'\]\['IpAddress'\]\[0\] else: ele\['PublicIpAddress'\] = "" # 私網IP if item\['InnerIpAddress'\]\['IpAddress'\]: ele\['InnerIpAddress'\] = item\['InnerIpAddress'\]\['IpAddress'\]\[0\] else: ele\['InnerIpAddress'\] = item\['VpcAttributes'\]\['PrivateIpAddress'\]\['IpAddress'\]\[0\] print(AliCloudApi.hid, ele\['ZoneId'\], ele\['InstanceId'\], ele\['InstanceType'\], ele\['HostName'\], ele\['InstanceName'\], ele\['PublicIpAddress'\], ele\['InnerIpAddress'\]) AliCloudApi.hid += 1 # 每個例項放入列表中 # print(ele) per\_region\_instances.append(ele) page\_num += 1 except Exception as e: print("ERROR: ", e) return per\_region\_instances def get\_all\_instances(self, region\_li): """ 獲得所有region例項 :param region\_li: region列表 :return: """ for zone in region\_li: self.zone = zone print("\\033\[0;32mNow,start query %s region\\033\[0m" % zone) obj = AliCloudApi(self.key, self.secret, zone) per\_region\_instances = obj.queryinstances() AliCloudApi.all\_instances\_dic\[zone\] = per\_region\_instances return AliCloudApi.all\_instances\_dic
if __name__ == '__main__': # 載入阿里雲訪問key key_pair = yaml.load(open('aliyun.yml')) key = key_pair['key'] secret = key_pair['secret'] zones = ["cn-qingdao", "cn-hangzhou", "cn-beijing"] # for zone in zones: # print("\033[1;32mNow,start query %s region\033[0m" % zone) # obj = AliCloudApi(key, secret, zone) # per_region_instances = obj.queryinstances() # all_instances_li[zone] = per_region_instances obj = AliCloudApi(key, secret) ret = obj.get_all_instances(zones)