def rds_redis(AccessKeyId, AccessKeySecret, RegionId): # 获取服务器系统3天后日期 today = datetime.date.today() tomorrow = today + datetime.timedelta(days=3) day_sys, month_sys, year_sys = tomorrow.strftime('%d'), tomorrow.strftime( '%m'), tomorrow.strftime('%Y') # rds实例存放列表 rds_list = [] for reg in RegionId: client = AcsClient(AccessKeyId, AccessKeySecret, reg) # 查询实例详情的默认参数设置 request = CommonRequest() request.set_accept_format('json') request.set_domain('r-kvstore.aliyuncs.com') request.set_method('POST') request.set_version('2015-01-01') request.set_action_name('DescribeInstances') # 自定义添加查询参数 request.add_query_param('RegionId', reg) request.add_query_param('PageSize', '50') # 发送请求 response = client.do_action_with_exception(request) instance = json.loads(response)["Instances"]["KVStoreInstance"] for ins in instance: # 查询实例详情的默认参数设置 request = CommonRequest() request.set_accept_format('json') request.set_domain('r-kvstore.aliyuncs.com') request.set_method('POST') request.set_version('2015-01-01') request.set_action_name('DescribeInstanceAttribute') # 自定义添加查询参数 request.add_query_param('RegionId', reg) request.add_query_param('InstanceId', ins["InstanceId"]) # 发送请求 response = client.do_action_with_exception(request) try: rds_time = json.loads( response)["Instances"]["DBInstanceAttribute"][0]["EndTime"] ali_time = rds_time.split("-") #ali_time = ins["ExpiredTime"].split("-") year_ali, month_ali, day_ali = ali_time[0], ali_time[ 1], ali_time[2][:2] # 如果系统时间与获取到的阿里云rds过期时间相差小于或等于3天则告警 if int(day_ali) <= ( int(day_sys) + 3) and int(month_ali) <= int( month_sys) and int(year_ali) <= int(year_sys): rds_id = ins["InstanceId"] expire_time = rds_time[:10] rds_list.append([rds_id, expire_time]) except Exception as e: print(response) print("按量付费实例无到期时间", ins, e) # 如果有要过期的rds实例则打印列表,没有则不打印 #print(rds_list) if rds_list != []: return "redis rds would expired: ", rds_list else: return "no redis rds expired"
def DRUR(): request = DescribeResourceUsageRequest.DescribeResourceUsageRequest() request.set_accept_format('json') request.set_DBInstanceId('rm-bp18144qkyj20731o') response = json.loads(client.do_action_with_exception(request)) for key, values in response.items(): print(str(key) + '=' + str(unicode(values)))
def GetPerformance(DBInstanceID, MasterKey): ''' 阿里云返回的数据为 UTC 时间,因此要转换为东八区时间。其他时区同理。 最小时间间隔为 1 分钟,因此这里选择时间跨度为 1 分钟 ''' UTC_End = datetime.datetime.today() - datetime.timedelta(hours=8) UTC_Start = UTC_End - datetime.timedelta(minutes=1) StartTime = datetime.datetime.strftime(UTC_Start, '%Y-%m-%dT%H:%MZ') EndTime = datetime.datetime.strftime(UTC_End, '%Y-%m-%dT%H:%MZ') Performance = DescribeDBInstancePerformanceRequest.DescribeDBInstancePerformanceRequest( ) Performance.set_accept_format('json') Performance.set_DBInstanceId(DBInstanceID) Performance.set_Key(MasterKey) Performance.set_StartTime(StartTime) Performance.set_EndTime(EndTime) PerformanceInfo = client.do_action_with_exception(Performance) Info = json.loads(PerformanceInfo) Value = Info['PerformanceKeys']['PerformanceKey'] MetricToValue = dict() for i in Value: a = dict() if "&" in str(i): vf = i["ValueFormat"].split('&') vl = i["Values"]["PerformanceValue"][0]["Value"].split('&') l = len(vf) while l != 0: l -= 1 a[vf[l]] = vl[l] else: a[i['ValueFormat']] = i['Values']['PerformanceValue'][0]['Value'] MetricToValue.update(a) return MetricToValue
def DescribeVServerGroups(self): client = AcsClient(self.AccessKeyId, self.AccessKeySecret, 'cn-beijing') request = DescribeVServerGroupsRequest() request.set_accept_format('json') request.set_LoadBalancerId("lb-2zeqx4f9qglel963dmdzv") response = client.do_action_with_exception(request) # python2: print(response) print(str(response, encoding='utf-8'))
def MDBMR(): request1 = ModifyDBInstanceMonitorRequest.ModifyDBInstanceMonitorRequest() request1.set_accept_format('json') request1.set_DBInstanceId('rm-bp18144qkyj20731o') request1.set_Period('60') response1 = client.do_action_with_exception(request1) print response1
def snapshot(AccessKeyId, AccessKeySecret, RegionId): snapshot_list = [] for reg in RegionId: client = AcsClient(AccessKeyId, AccessKeySecret, reg) # 查询实例详情的默认参数设置 request = CommonRequest() request.set_accept_format('json') request.set_domain('ecs.aliyuncs.com') request.set_method('POST') request.set_version('2014-05-26') request.set_action_name('DescribeInstances') # 自定义添加查询参数 request.add_query_param('PageSize', '100') request.add_query_param('RegionId', reg) # 发送请求 response = client.do_action_with_exception(request) instance = json.loads(response)["Instances"]["Instance"] for ins in instance: # 查询实例快照的api默认参数设置 request = CommonRequest() request.set_accept_format('json') request.set_domain('ecs.aliyuncs.com') request.set_method('POST') request.set_version('2014-05-26') request.set_action_name('DescribeSnapshots') # 自定义添加查询参数 request.add_query_param('RegionId', reg) request.add_query_param('InstanceId', ins["InstanceId"]) # 发送请求 response = client.do_action_with_exception(request) try: snapshot_status = json.loads( response)["Snapshots"]["Snapshot"][0]["Status"] if snapshot_status != "accomplished": snapshot_list.append( [ins["InstanceId"], "snapshot failed"]) except: snapshot_list.append([ins["InstanceId"], "no snapshot"]) if snapshot_list != []: return snapshot_list else: return "all snapshot backup successfully"
def start_instance(self, instanceid): """ 启动实例 :param instanceid: :return: """ client = AcsClient(self.AccessKeyId, self.AccessKeySecret, instanceid) request = StartInstanceRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) res = json.loads(str(response, encoding='utf-8')) return res
def get_instancetype(self, region_id): """ 查看ECS实例规格信息 :param RegionId: :return: """ client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id) request = DescribeInstanceTypesRequest() request.set_accept_format('json') request.set_InstanceTypeFamily("ecs.t5") response = client.do_action_with_exception(request) res = str(response, encoding='utf-8') return json.loads(res).get("InstanceTypes").get("InstanceType")
def get_slb_detail(self, loadbalancer_id, region_id): """ 返回lb详细信息 :param loadbalancerid: lb-2zeqx4f9qglel963dmdzv :param regionid: cn-beijing :return: """ client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id) request = DescribeLoadBalancerAttributeRequest() request.set_accept_format('json') request.set_LoadBalancerId(loadbalancer_id) response = client.do_action_with_exception(request) return eval(str(response, encoding='utf-8'))
def GetRdsList(): RdsRequest = DescribeDBInstancesRequest.DescribeDBInstancesRequest() RdsRequest.set_accept_format('json') RdsRequest.set_DBInstanceId('rm-bp18144qkyj20731o') RdsInfo = json.loads(client.do_action_with_exception(RdsRequest)) print RdsInfo for RdsInfoJson in RdsInfo["Items"]["DBInstance"]: DBInstanceIdDict = {} DBInstanceIdDict["{#DBINSTANCEID}"] = RdsInfoJson['DBInstanceId'] #print DBInstanceIdDict["{#DBINSTANCEID}"] DBInstanceIdDict["{#InsId}"] = RdsInfoJson['InsId'] #print DBInstanceIdDict["{#InsId}"] DBInstanceIdList.append(DBInstanceIdDict)
def AllocatePublicIpAddress(self, region_id, InstanceId): """ 绑定外网IP :param region_id: 地域 :param InstanceId: 实例ID :return: {'IpAddress': '39.106.176.130'} """ client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id) request = AllocatePublicIpAddressRequest() request.set_accept_format('json') request.set_InstanceId(InstanceId) response = client.do_action_with_exception(request) res = json.loads(response, encoding='utf-8') return res
def DescribeRegions(self): """ 获取所有地域regionId :return: {'cn-qingdao': '华北 1'} """ client = AcsClient(self.AccessKeyId, self.AccessKeySecret) request = DescribeRegionsRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) res = json.loads(str(response, encoding='utf-8')) regions = {} for region in res['Regions']['Region']: regions[region['RegionId']] = region['LocalName'] return regions
def get_ecs(self): """ 获取所有区域ECS信息 :return: """ instances = [] region_ids = self.DescribeRegions() for region_id in region_ids.keys(): client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id, connect_timeout=30) request = DescribeInstancesRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) res = json.loads(str(response, encoding='utf-8')) instances += res['Instances']['Instance'] return instances
def send(self, identity, code): request = aliyunsdkcore.request.CommonRequest() request.set_accept_format('json') request.set_domain('dysmsapi.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') request.set_version('2017-05-25') request.set_action_name('SendSms') request.add_query_param('RegionId', 'default') request.add_query_param('PhoneNumbers', identity) request.add_query_param('SignName', 'Hackergame') request.add_query_param('TemplateCode', 'SMS_168560438') request.add_query_param('TemplateParam', json.dumps({'code': code})) response = json.loads(client.do_action_with_exception(request)) if response['Code'] != 'OK': raise ValueError(response['Code'])
def AvailableZones(self, region_id): """ 可用区 :param region_id: 计费方式 地域 :return: ['cn-huhehaote-a', 'cn-huhehaote-b'] """ client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id) request = DescribeZonesRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) # print(str(response, encoding='utf-8')) res = json.loads(str(response, encoding='utf-8')) zones = {} for zone in res['Zones']['Zone']: zones[zone['ZoneId']] = zone['LocalName'] return zones
def get_instance_disk_info(self, region_id, zone_id, instance_id): """ 获取实例下磁盘信息 :param regionid: cn-beijing :param zoneid: cn-beijing-g :param instanceid: i-2ze4wxcyl324952q8m7b :return: """ client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id) request = DescribeDisksRequest() request.set_accept_format('json') request.set_ZoneId(zone_id) request.set_InstanceId(instance_id) response = client.do_action_with_exception(request) # print((str(response, encoding='utf-8'))) res = json.loads((str(response, encoding='utf-8'))) return res['Disks']['Disk']
def get_slb(self): """ 获取所有地域下slb负载均衡实例 :return: """ balancers = [] regionids = self.DescribeRegions() try: for rid in regionids: client = AcsClient(self.AccessKeyId, self.AccessKeySecret, rid, connect_timeout=30) request = DescribeLoadBalancersRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) # print(response) res = json.loads(str(response, encoding='utf-8')) balancers += res.get("LoadBalancers").get("LoadBalancer") return balancers except Exception as ex: print(ex)
def expire_time(AccessKeyId, AccessKeySecret, RegionId): # 获取服务器系统3天后日期 today = datetime.date.today() tomorrow = today + datetime.timedelta(days=3) day_sys, month_sys, year_sys = tomorrow.strftime('%d'), tomorrow.strftime( '%m'), tomorrow.strftime('%Y') #print(day_sys, month_sys, year_sys) expire_list = [] for reg in RegionId: # 创建AcsClient实例 client = AcsClient(AccessKeyId, AccessKeySecret, reg) # 创建request,并设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(100) # 发起API请求并显示返回值 response = client.do_action_with_exception(request) #print(response) instance = json.loads(response)["Instances"]["Instance"] for ins in instance: ali_time = ins["ExpiredTime"].split("-") #print("alitime", ali_time) year_ali, month_ali, day_ali = ali_time[0], ali_time[1], ali_time[ 2][:2] # 如果系统时间与获取到的阿里云服务器过期时间相差小于或等于3天则告警 if int(day_ali) <= (int(day_sys) + 3) and int(month_ali) <= int( month_sys) and int(year_ali) <= int(year_sys): ip = ins["InnerIpAddress"]["IpAddress"] # 返回的json中ip可能会为空,为空则用instanceId代替 if ip == []: ip = ins["InstanceId"] expire_time = ins["ExpiredTime"][:10] expire_list.append([ip, expire_time]) # 如果有要过期的服务器则打印列表,没有则不打印 if expire_list != []: return "server would expired: ", expire_list else: return "there is no expire server now"
def GetRedisPerformance(DBInstanceID, MasterKey): ''' 阿里云返回的数据为 UTC 时间,因此要转换为东八区时间。其他时区同理。 最小时间间隔为 1 分钟,因此这里选择时间跨度为 1 分钟 ''' UTC_End = datetime.datetime.today() - datetime.timedelta(hours=8) UTC_Start = UTC_End - datetime.timedelta(minutes=1) StartTime = datetime.datetime.strftime(UTC_Start, '%Y-%m-%dT%H:%M:%SZ') EndTime = datetime.datetime.strftime(UTC_End, '%Y-%m-%dT%H:%M:%SZ') Performance = DescribeHistoryMonitorValuesRequest() Performance.set_accept_format('json') Performance.set_InstanceId(DBInstanceID) Performance.set_MonitorKeys(MasterKey) Performance.set_IntervalForHistory("01m") Performance.set_StartTime(StartTime) Performance.set_EndTime(EndTime) PerformanceInfo = client.do_action_with_exception(Performance) Info = json.loads(PerformanceInfo) a = json.loads(Info['MonitorHistory']) MetricToValue = dict() for i in a: MetricToValue = a[i] break return MetricToValue
def list_zones(self,region_id): """ This Function will list all the zones for all the regions of alibaba cloud """ error = False response = None try: client = AcsClient(self.access_key, self.secret_key, region_id) request = DescribeZonesRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) if response is not None: json_response = json.loads(response) Zones = json_response.get('Zones').get('Zone') zonesDetails = [] for Zone in Zones: zoneDetails = {} zoneDetails.update({'ZoneId': Zone.get('ZoneId')}) ResourcesInfo = Zone.get('AvailableResources').get('ResourcesInfo') if ResourcesInfo is None: print('availableResources is None') return for availableResource in ResourcesInfo: zoneDetails.update( {'SystemDiskCategory': availableResource.get('SystemDiskCategories').get( 'supportedSystemDiskCategory'), 'Instancelist': availableResource.get('InstanceTypes').get( 'supportedInstanceType')}) zonesDetails.append(zoneDetails) response = zonesDetails except Exception as e: error = True response = e print(e) finally: return error, response
return client.AcsClient(ACCESS_KEY, SECRET_KEY, REGION) def get_dimensions_json(): return json.dumps({ 'cenId': 'cen-io8olhs9j9bquumh9l', 'geographicSpanId': 'China' }) def get_request(dimensions_json): request = QueryMetricListRequest.QueryMetricListRequest() request.set_accept_format('json') request.set_Project('acs_cen') request.set_Metric('InternetOutRatePercentByConnectionRegion') start_time = "2019-03-01 10:00:00" timestamp_start = int( time.mktime(time.strptime(start_time, "%Y-%m-%d %H:%M:%S"))) * 1000 request.set_StartTime(timestamp_start) request.set_Dimensions(dimensions_json) request.set_Period('60') return request if __name__ == '__main__': client = get_client() dimensions_json = get_dimensions_json() request = get_request(dimensions_json) result = client.do_action_with_exception(request) print(result)
#--------------------------------------------------------------------------------- if ipv4 == 'true': #Judging whether IPV4 DDNS is open print('Your IPV4 DDNS is open.') #Describe IPV4 Records describev4 = DescribeDomainRecordsRequest() #Start Describe Domain Records describev4.set_accept_format('json') describev4.set_DomainName(domain) #Main Domain describev4.set_RRKeyWord(rr) #Your RRKeyWord describev4.set_TypeKeyWord("A") #Your Record Type describebackv4 = client.do_action_with_exception( describev4) #Get Back JSON # python2: print(response) print(str(describebackv4, encoding='utf-8')) #Print JSON #--------------------------------------------------------------------------------- #Read IPV4 JSON recordlistv4 = json.loads(describebackv4) #Read Back JSON recordidv4 = recordlistv4['DomainRecords']['Record'][0][ 'RecordId'] #Get RecordId From Back JSON print('Your IPV4 RecordId:') print(recordidv4) valuev4 = recordlistv4['DomainRecords']['Record'][0][ 'Value'] #Get Value From Back JSON print('Your IPV4 Value:') print(valuev4)
def list_instances(self, zone_id): """ list the instances of the zone :param zone_id: :return: """ error = False response = None instance_zone_list = [] instance_size = [] try: client = AcsClient(self.access_key, self.secret_key, self.region_id) request = DescribeZonesRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) instance_type_family_list = [] instance_type_list = [] if response is not None: json_response = json.loads(response) zones = json_response.get('Zones') if 'Zone' in zones: zone_list = zones.get('Zone') for zone in zone_list: if zone.get('ZoneId') in zone_id: available_instances = zone.get('AvailableInstanceTypes') if 'InstanceTypes' in available_instances: available_instances_types = available_instances.get('InstanceTypes') if available_instances_types is not None: for instance_type in available_instances_types: if not instance_type in instance_type_list: instance_type_list.append(instance_type) temp = str(instance_type).split(".") instance_type_family = temp[1] if not instance_type_family in instance_type_family_list: instance_type_family_list.append(instance_type_family) if not temp[2] in instance_size: instance_size.append(temp[2]) instance_list = [] for instance_type_family in instance_type_family_list: Instance = [] for instance_type in instance_type_list: if instance_type_family in str(instance_type): temp = str(instance_type).split(".") instance_family = temp[1] if len(instance_type_family) == len(instance_family): Instance.append(str(instance_type)) instance_list.append( {'instance_type_family': instance_type_family, 'instance_list': Instance}) instance_zone_list.append( {'zone_id': zone.get('ZoneId'), 'instance_zone_list': instance_list}) instance_new_zone_list = [] for instance_zone in instance_zone_list: for instance_type_family_zone in instance_zone.get('instance_zone_list'): instance_type_family = instance_type_family_zone.get('instance_type_family') client = AcsClient(self.access_key, self.secret_key, self.region_id) request = DescribeInstanceTypesRequest() request.set_accept_format('json') request.set_InstanceTypeFamily('ecs.%s' % instance_type_family) response = client.do_action_with_exception(request) instance_new_list = [] if response is not None: json_response = json.loads(response) if 'InstanceTypes' in json_response: instances_types_info_from_describe_family = json_response.get('InstanceTypes') instances_types_info_from_describe_family = instances_types_info_from_describe_family.get( 'InstanceType') for instances_types_from_describe_family in instances_types_info_from_describe_family: if instances_types_from_describe_family.get( 'InstanceTypeId') in instance_type_family_zone.get('instance_list'): instance_info = {} if int(instances_types_from_describe_family.get('CpuCoreCount') > 1) and int( instances_types_from_describe_family.get('MemorySize')) > 3: instance_info.update( {'instance_type': instances_types_from_describe_family.get( 'InstanceTypeId'), 'CpuCoreCount': instances_types_from_describe_family.get( 'CpuCoreCount'), 'MemorySize': instances_types_from_describe_family.get('MemorySize')}) if len(instance_info) > 0: instance_new_list.append(instance_info) instance_new_zone_list.append( {'instance_type_family': instance_type_family_zone.get('instance_type_family'), 'instance_spec': instance_new_list}) if len(instance_new_zone_list) is 0: raise Exception('No such zones exist.') response = instance_new_zone_list except Exception as e: error = True response = e.message print(e.message) finally: return error, response