腾讯云ECS VS 阿里云ECS 打折比较

本文比较了腾讯云和阿里云的促销活动,腾讯云的1核1G云服务器168元/年,比阿里2折后的293元更具吸引力。

两边都在做促销,感觉腾讯的力度更大一些。

腾讯云是热卖云产品3折起,http://t.cn/E5ME86y 。新用户专享1核1G是168元/年,普通情况年付375元/年。带宽都选1M。

在这里插入图片描述
在这里插入图片描述

阿里现在在做ECS云服务器2折起活动,活动链接:http://t.cn/E5ME86L 。1核1G一年293元,新老用户都可以,但仅限一单。正常情况1核1G一年原价732元,打折往往是8-8.5折,那也要将近600元一年。

在这里插入图片描述

在这里插入图片描述

修改脚本功能: 1.原逻辑中需要从表中取相关信息,修改为磁盘价格从本地json文件获取 2.实例价格修改为从云厂商接口获取后直接计算,取折后价格,并且云接口所需参数需要从实例列表返回后传入,比如腾讯所需的镜像id等参数,其他云也类似 3.只有最终结果asktao_dist_pricedist_list区组对照表gs_info,其余不再入库,如果必须使用,写入本地json HuaWei SAS 0.35 HuaWei STAT 0.3 HuaWei SSD 1 Tencent CLOUD_BASIC 0.3 Tencent CLOUD_PREMIUM 0.35 Tencent CLOUD_SSD 1.1 AliCloud cloud 0.3 AliCloud cloud_efficiency 0.35 AliCloud cloud_ssd 1 AliCloud cloud_essd 1 Tencent CLOUD_BSSD 0.5 Tencent CLOUD_TSSD 0.65 Tencent CLOUD_HSSD 0.65 Volcengi ESSD_PL0 0.65 3.最终费用仍为实例价格+磁盘价格,不计算打折部分,价格直接是折后的 main.py -------- #_*_coding:utf-8_*_ from cloud import alicloud from cloud import tencent from cloud import huawei from cloud import volcengine import json import sys import MySQLdb as pymysql import datetime import time from decimal import Decimal if sys.version_info.major == 3: import urllib.request as urllib2 from functools import reduce else: import urllib2 reload(sys) sys.setdefaultencoding('utf-8') remove_dist = [-200, 11, 12, 35, 1, -100, 258, 259, 368, 20004, 440, 444, 10000] db_config = { "charset": "utf8", "db": "game_server_price", "host": "10.14.101.113", "passwd": "NGI", "port": 30001, "user": "grafana", } center_db_config = { "charset": "utf8", "db": "dw_game_wd", "host": "10.14.50.2", "passwd": "GW09iO", "port": 3306, "user": "ops_read", } def mysql_conn(sql, values_list=[], **config): try: conn = pymysql.connect(**config) cursor = conn.cursor() if values_list: cursor.executemany(sql, values_list) else: cursor.execute(sql) conn.commit() except Exception as e: print(e) #print(sql) sys.exit(e) conn.close() return cursor.fetchall() def get_online_number(): # 查询当月每日最大人数求平均值,去除最大值小于100的项,当新服未开放时无法查询出新服,后续使用try处理 # 去除最大值小于100项目用于解决问题:新服开放当月平均值会被开服前的0平均掉 sql = "select" \ " dist,avg(cnt_max) from dw_game_wd.fact_online_day " \ "where" \ " DATE_FORMAT( log_date, '%Y%m' ) = DATE_FORMAT( CURRENT_DATE, '%Y%m' ) and cnt_max > 100 group by dist;" result = mysql_conn(sql, **center_db_config) online_info = {} for dist in result: online_info[dist[0]] = dist[1] return online_info def get_servers(): all_servers_list = [] all_disks_list = [] #cloud_list = [huawei, alicloud, tencent, volcengine] cloud_list = [volcengine] for cloud in cloud_list: instances = cloud() result_cloud = instances.run_cloud() server_list = result_cloud["instences"] disk_list = result_cloud["disks"] if not server_list: continue all_servers_list = all_servers_list + server_list if not disk_list: continue all_disks_list = all_disks_list + disk_list mysql_conn("delete from game_server_price.disk_info where date=CURRENT_DATE;", **db_config) mysql_conn("delete from game_server_price.instances_info where date=CURRENT_DATE;", **db_config) values_list = [] for instance in all_servers_list: name = instance['name'] ip = instance['ip'] instance_type = instance['instance_type'] company = instance['company'] id = instance['id'] values_list.append([name, ip, instance_type, company, id]) sql = 'insert into game_server_price.instances_info value (%s,%s,%s,%s,%s,CURRENT_DATE)' mysql_conn(sql, values_list, **db_config) sql = 'insert into game_server_price.disk_info value (%s,%s,%s,%s,%s,0,CURRENT_DATE)' mysql_conn(sql, all_disks_list, **db_config) return all_servers_list def get_ucenter_info(mainid=2): ucurl = "http://creator-sre.gyyx.cn/app_ass_info?main_id=%s" % (mainid) result_url = urllib2.urlopen(ucurl, timeout=30) result_url_data = result_url.read() alldata = json.loads(result_url_data)['data'] #alldata = json.loads(result_url_data) dist_info_list = [] tmp_info = {} for data in alldata: if data['app_name'] in ['ldb_s', 'ldb', 'stat'] or int(data['dist_id']) in remove_dist: continue ip = data['ass_ip'] dist_id = data['dist_id'] name = data['ass_gysn'] if not name: print(data) app_name = data['app_name'] if app_name == "LB":continue disk_size_setting = data['setting'].replace('G', '').replace(' ', '').split("+")[1:] if disk_size_setting == []: disk_size = 0 else: disk_size = reduce(lambda x, y: x + y, map(int, disk_size_setting)) dist_info_list.append([dist_id, name, app_name, ip, disk_size]) tmp_info[data['ip']] = name line_info_list = [] ucurl_line = 'http://creator-sre.gyyx.cn/gamelinelist?mainid=2' result_url = urllib2.urlopen(ucurl_line, timeout=30) result_url_data = result_url.read() alldata = json.loads(result_url_data)['data'] #alldata = json.loads(result_url_data) for dist in alldata: if int(dist['dist_id']) in remove_dist or int(dist['dist_id']) > 10000: continue dist_id = int(dist['dist_id']) name = tmp_info[dist['ip']] line_num = len(dist['line_nums'].split(',')) line_info_list.append([dist_id, name, line_num]) mysql_conn("delete from game_server_price.gs_info where date=CURRENT_DATE;", **db_config) gs_info_sql = 'insert into game_server_price.gs_info value (%s,%s,%s,current_date);' mysql_conn(gs_info_sql, line_info_list, **db_config) mysql_conn("delete from game_server_price.instances_center where date=CURRENT_DATE;", **db_config) mysql_conn("truncate table game_server_price.dist_list;", **db_config) sql = 'insert into game_server_price.instances_center value (%s,%s,%s,%s,%s,CURRENT_DATE)' mysql_conn(sql, dist_info_list, **db_config) sub_data_sql = 'select dist_id,sub_name from center_app.sub_category where main_id = 2 and flag in (1,0) and dist_id BETWEEN 2 and 25000 and del_info=1;' result = mysql_conn(sub_data_sql, **center_db_config) sub_data = list(result) insert_sub_sql = 'insert into game_server_price.dist_list value (%s,%s)' mysql_conn(insert_sub_sql, sub_data, **db_config) return dist_info_list def count_instance_price(): SQL_PRICES = ''' select c.name ,sum(b.price_base*a.size) as disk_price ,d.instances_price ,(sum(b.price_base*a.size)+ d.instances_price) as total ,c.instance_type ,e.trade_discount ,((sum(b.price_base*a.size)+ d.instances_price)*e.trade_discount) as last_price from game_server_price.disk_info a ,game_server_price.disk_price_info b ,game_server_price.trade_discount_base e ,game_server_price.instances_info c left join game_server_price.ecs_price_base d on c.instance_type=d.instance_type where a.disk_type = b.disk_type and a.company = b.company and a.date=date_sub(CURDATE(),interval 1 day) and c.date=date_sub(CURDATE(),interval 1 day) and c.id=a.server_id and a.company = e.company group by a.server_id ; ''' price_dict = {} result = mysql_conn(SQL_PRICES, **db_config) for i in result: name = str(i[0]).strip() price = str(i[6]) price_dict[name] = price return price_dict def count_all_dist_price(): sql = 'select a.name,a.app_name,b.company,b.instance_type,a.disk_size,a.dist_id ' \ 'from instances_center a,instances_info b ' \ 'where a.name=b.name and b.date=date_sub(CURDATE(),interval 1 day) ' \ 'and a.date=date_sub(CURDATE(),interval 1 day);' result = mysql_conn(sql, **db_config) all_price_dict = count_instance_price() all_instance_price = {} instance_price_list = [] error_list = [] for instance in result: name = str(instance[0]) price = all_price_dict[name] if price == "None": print("ERROR: %s price count failed!" % name) error_list.append(name) else: price = Decimal(price) if instance[1] == "adb_s": price = price / 2 instance_price_list.append([instance[5], instance[0], price]) try: all_instance_price[instance[5]][instance[0]] = price except: all_instance_price[instance[5]] = {} all_instance_price[instance[5]][instance[0]] = price if error_list: print "Error list:", str(error_list) sys.exit(1) mysql_conn("delete from game_server_price.instances_price_history where date=date_sub(CURRENT_DATE,interval 1 day);", **db_config) sql = 'insert into game_server_price.instances_price_history value (%s,%s,%s,date_sub(CURRENT_DATE,interval 1 day));' print instance_price_list mysql_conn(sql, instance_price_list, **db_config) all_dist_price = {} for dist in all_instance_price: all_dist_price[dist] = [] price = 0 for instance in all_instance_price[dist]: price = price + all_instance_price[dist][instance] all_dist_price[dist].append(price) return all_dist_price def get_dist_idc(): SQL_IDC = ''' select a.dist_id ,b.company from instances_center a ,instances_info b where a.app_name ='ccs' and a.name=b.name and a.date=b.date and a.date=date_sub(CURDATE(),interval 1 day); ''' idc_dict = {} result = mysql_conn(SQL_IDC, **db_config) for i in result: dist_id = i[0] idc = str(i[1]) idc_dict[dist_id] = idc return idc_dict def main(): get_servers() get_ucenter_info() count_all_dist_price() date = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d") all_dist_price = count_all_dist_price() idc_dict = get_dist_idc() online_info = get_online_number() all_dist_price_per = [] for dist_id in all_dist_price: price = Decimal(all_dist_price[dist_id][0]) if dist_id not in idc_dict: continue idc = idc_dict[dist_id] try: online_num = Decimal(online_info[dist_id]) except: # 当新服部署后尚未开服时令人数为0 online_num = Decimal(0) if int(online_num) == 0: # 避免被除数为0 avg_price = price else: avg_price = Decimal(price / online_num).quantize(Decimal("0.000")) all_dist_price_per.append([dist_id, online_num, price, avg_price,idc, date]) date = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d") delete_sql = 'delete from game_server_price.asktao_dist_price where date = "%s";' % date mysql_conn(delete_sql, **db_config) sql = 'insert into game_server_price.asktao_dist_price value (%s,%s,%s,%s,%s,%s);' mysql_conn(sql, all_dist_price_per, **db_config) if __name__ == '__main__': main() ---------------- from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.cvm.v20170312 import cvm_client, models from tencentcloud.cbs.v20170312 import cbs_client from tencentcloud.cbs.v20170312 import models as cbsmodels from aliyunsdkcore.client import AcsClient from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest from aliyunsdkecs.request.v20140526.DescribeDisksRequest import DescribeDisksRequest from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from openstack import exceptions from openstack import connection import requests import signer import json class cloud(object): def __init__(self): self.DISK_TYPE = { "SAS": "premium", "STAT": "basic", "SSD": "ssd", "CLOUD_BASIC": "basic", "CLOUD_PREMIUM": "premium", "CLOUD_SSD": "ssd", "ESSD_PL0": "ssd" } def get_instances_from_api(self): pass def get_disk_from_api(self): pass def get_instances(self): pass def get_disks(self): pass class alicloud(cloud): def get_instances_from_api(self, offset): zone_list = ['cn-beijing','cn-shanghai'] server_list = [] for zone_i in zone_list: try: client = AcsClient('LTAI4G696nAcjQUPayU7FVyA', 'Rl6O82hLn0cfssOZ8PdiTQJYmoqAtj', zone_i) request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageNumber(offset) request.set_PageSize(100) response = client.do_action_with_exception(request) info = json.loads(response)['Instances']['Instance'] for instance in info: name = instance['InstanceName'] ip = instance['VpcAttributes']['PrivateIpAddress']['IpAddress'][0] instance_type = instance['InstanceType'] id = instance['InstanceId'] server_list.append({"name": name, "ip": ip, "instance_type": instance_type, "company": "AliCloud", "id": id}) except Exception as err: print(err) return 0, server_list def get_instances(self): try: server_list = [] for offset in range(20): offset = offset + 1 flag, server_list_tmp = self.get_instances_from_api(offset) if flag: raise Exception("get tencent instances error") if server_list_tmp == []: break server_list = server_list + server_list_tmp return server_list except Exception as err: print(err) return 1, err def get_disk_from_api(self, offset): zone_list = ['cn-beijing','cn-shanghai'] disks_list = [] for zone_i in zone_list: try: client = AcsClient('LTAI4G696nAcjQUPayU7FVyA', '', zone_i) request = DescribeDisksRequest() request.set_accept_format('json') request.set_PageNumber(offset) request.set_PageSize(100) response = client.do_action_with_exception(request) info = json.loads(response)['Disks']['Disk'] for disk in info: server_id = disk['InstanceId'] disk_id = disk['DiskId'] disk_type = disk['Category'] dist_size = disk['Size'] disk_info = ['AliCloud', disk_id, server_id, disk_type, dist_size] disks_list.append(disk_info) except Exception as err: print(err) return 0, disks_list def get_disks(self): try: disks_list = [] for offset in range(20): offset = offset + 1 flag, disks_list_tmp = self.get_disk_from_api(offset) if flag: raise Exception("get tencent disks error") if disks_list_tmp == []: break disks_list = disks_list + disks_list_tmp return disks_list except Exception as err: print(err, 11) return 1, err def run_cloud(self): instences = self.get_instances() disks = self.get_disks() return {"instences": instences, "disks": disks} class tencent(cloud): def get_instances_from_api(self, offset): zone_list = ['ap-beijing','ap-shanghai'] server_list = [] for zone_i in zone_list: try: cred = credential.Credential("AKIDiV3GSXs7brvQhkqYlkV7XkmDV7g0A6ub", "") httpProfile = HttpProfile() httpProfile.endpoint = "cvm.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cvm_client.CvmClient(cred, zone_i, clientProfile) req = models.DescribeInstancesRequest() params = {"Offset": offset, "Limit": 100} params = json.dumps(params) req.from_json_string(params) instance_result = client.DescribeInstances(req).to_json_string() instance_result = json.loads(instance_result) for instance in instance_result["InstanceSet"]: name = instance["InstanceName"] ip = instance["PrivateIpAddresses"][0] instance_type = instance["InstanceType"] id = instance["InstanceId"] status = instance["RestrictState"] print(instance) if status != "NORMAL":continue server_list.append({"name": name, "ip": ip, "instance_type": instance_type, "company": "Tencent", "id": id }) except Exception as err: print(err) return 0, server_list def get_instances(self): try: server_list = [] for offset in range(20): offset = offset * 100 flag, server_list_tmp = self.get_instances_from_api(offset) if flag: raise Exception("get tencent instances error") if server_list_tmp == []: break server_list = server_list + server_list_tmp return server_list except Exception as err: print(err) def get_disk_from_api(self, offset): disks_list = [] zone_list = ['ap-beijing','ap-shanghai'] for zone_i in zone_list: try: cred = credential.Credential("AKIDiV3GSXs7brvQhkqYlkV7XkmDV7g0A6ub", "") httpProfile = HttpProfile() httpProfile.endpoint = "cbs.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cbs_client.CbsClient(cred, zone_i, clientProfile) req = cbsmodels.DescribeDisksRequest() params = {"Offset": offset, "Limit": 100} params = json.dumps(params) req.from_json_string(params) disks_result = client.DescribeDisks(req).to_json_string() disks_result = json.loads(disks_result) for disk in disks_result['DiskSet']: disk_id = disk['DiskId'] try: server_id = disk['InstanceIdList'][0] except: server_id = 'not-mount' disk_type = disk['DiskType'] dist_size = disk['DiskSize'] disk_info = ['Tencent', disk_id, server_id, disk_type, dist_size] disks_list.append(disk_info) except TencentCloudSDKException as err: print(err) return 0, disks_list def get_disks(self): try: disks_list = [] for offset in range(20): offset = offset * 100 flag, disks_list_tmp = self.get_disk_from_api(offset) if flag: raise Exception("get tencent instances error") if disks_list_tmp == []: break disks_list = disks_list + disks_list_tmp return disks_list except Exception as err: print(err) def run_cloud(self): instences = self.get_instances() disks = self.get_disks() return {"instences": instences, "disks": disks} class volcengine(cloud): def get_instances_from_api(self): try: server_list = [] import volcenginesdkcore import volcenginesdkecs from volcenginesdkcore.rest import ApiException configuration = volcenginesdkcore.Configuration() configuration.ak = "AKLTNzgyNTFhODhhMzIwNDM4YTlmNjA2ZTY4OTg4MGFhZTY" configuration.sk = "" configuration.region = "cn-beijing" api_instance = volcenginesdkecs.ECSApi(volcenginesdkcore.ApiClient(configuration)) page_number = 1 page_size = 100 total_count = None while True: describe_instances_request = volcenginesdkecs.DescribeInstancesRequest( page_number=page_number, page_size=page_size ) try: response = api_instance.describe_instances(describe_instances_request) if total_count is None: total_count = response.total_count for instance in response.instances: name = instance.instance_name ip = instance.network_interfaces[0].primary_ip_address if instance.network_interfaces else "" instance_type = instance.instance_type_id id = instance.instance_id server_list.append( {"name": name, "ip": ip, "instance_type": instance_type, "company": "Volcengine", "id": id}) if len(response.instances) < page_size or page_number * page_size >= total_count: break page_number += 1 except ApiException as e: print("Exception when calling ECS API: {}".format(e)) break return 0, server_list except Exception as err: print("Error in get_instances_from_api: {}".format(err)) return 1, err def get_disks_from_api(self): try: disk_list = [] import volcenginesdkcore import volcenginesdkstorageebs from volcenginesdkcore.rest import ApiException configuration = volcenginesdkcore.Configuration() configuration.ak = "AKLTNzgyNTFhODhhMzIwNDM4YTlmNjA2ZTY4OTg4MGFhZTY" configuration.sk = "" configuration.region = "cn-beijing" api_instance = volcenginesdkstorageebs.STORAGEEBSApi(volcenginesdkcore.ApiClient(configuration)) page_number = 1 page_size = 100 total_count = None while True: describe_volumes_request = volcenginesdkstorageebs.DescribeVolumesRequest( page_number=page_number, page_size=page_size ) try: response = api_instance.describe_volumes(describe_volumes_request) if total_count is None: total_count = response.total_count for volume in response.volumes: disk_id = volume.volume_id server_id = volume.instance_id if hasattr(volume, 'instance_id') and volume.instance_id else "not-mount" disk_type = volume.volume_type disk_size = volume.size disk_info = ['Volcengine', disk_id, server_id, disk_type, disk_size] disk_list.append(disk_info) if len(response.volumes) < page_size or page_number * page_size >= total_count: break page_number += 1 except ApiException as e: print("Exception when calling STORAGEEBS API: {}".format(e)) break print(f"Total disks fetched: {len(disk_list)}") return 0, disk_list except Exception as err: print(f"Error in get_disks_from_api: {err}") return 1, err def get_instances(self): try: flag, server_list = self.get_instances_from_api() if flag: raise Exception("get volcengine instances error") return server_list except Exception as err: print(err) return [] def get_disks(self): try: flag, disk_list = self.get_disks_from_api() if flag: raise Exception("get volcengine disks error") return disk_list except Exception as err: print(err) return [] def run_cloud(self): instances = self.get_instances() disks = self.get_disks() return {"instances": instances, "disks": disks} ---------------- 腾讯查询价格api--------- # -*- coding: utf-8 -*- import os import json import types from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.cvm.v20170312 import cvm_client, models try: # 密钥信息从环境变量读取,需要提前在环境变量中设置 TENCENTCLOUD_SECRET_ID TENCENTCLOUD_SECRET_KEY # 使用环境变量方式可以避免密钥硬编码在代码中,提高安全性 # 生产环境建议使用安全的密钥管理方案,如密钥管理系统(KMS)、容器密钥注入等 # 请参见:https://cloud.tencent.com/document/product/1278/85305 # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 cred = credential.Credential(os.getenv("TENCENTCLOUD_SECRET_ID"), os.getenv("TENCENTCLOUD_SECRET_KEY")) # 使用临时密钥示例 # cred = credential.Credential("SecretId", "SecretKey", "Token") # 实例化一个http选项,可选的,没有特殊需求可以跳过 httpProfile = HttpProfile() httpProfile.endpoint = "cvm.tencentcloudapi.com" # 实例化一个client选项,可选的,没有特殊需求可以跳过 clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile # 实例化要请求产品的client对象,clientProfile是可选的 client = cvm_client.CvmClient(cred, "ap-beijing", clientProfile) # 实例化一个请求对象,每个接口都会对应一个request对象 req = models.InquiryPriceRunInstancesRequest() params = { "Placement": { "Zone": "ap-beijing-6" }, "ImageId": "img-p5nkhc2v", "InstanceChargeType": "PREPAID", "InstanceChargePrepaid": { "Period": 1 }, "InstanceType": "SA2.2XLARGE16" } req.from_json_string(json.dumps(params)) # 返回的resp是一个InquiryPriceRunInstancesResponse的实例,与请求对象对应 resp = client.InquiryPriceRunInstances(req) # 输出json格式的字符串回包 print(resp.to_json_string()) except TencentCloudSDKException as err: print(err) ----腾讯api返回: { "Response": { "Price": { "BandwidthPrice": {}, "InstancePrice": { "Discount": 60, "DiscountPrice": 286.98, "OriginalPrice": 478.3 } }, "RequestId": "bd16e011-f83d-4bbc-bb2d-c31361508e11" } } ------------------------------------------------------------------------------------------------------------------------- 阿里查询价格api--------- # -*- coding: utf-8 -*- # This file is auto-generated, don't edit it. Thanks. import os import sys from typing import List from alibabacloud_ecs20140526.client import Client as Ecs20140526Client from alibabacloud_credentials.client import Client as CredentialClient from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_ecs20140526 import models as ecs_20140526_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client() -> Ecs20140526Client: """ 使用凭据初始化账号Client @return: Client @throws Exception """ # 工程代码建议使用安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。 credential = CredentialClient() config = open_api_models.Config( credential=credential ) # Endpoint 请参考 https://api.aliyun.com/product/Ecs config.endpoint = f'ecs.cn-beijing.aliyuncs.com' return Ecs20140526Client(config) @staticmethod def main( args: List[str], ) -> None: client = Sample.create_client() describe_price_request = ecs_20140526_models.DescribePriceRequest( region_id='cn-beijing', instance_type='ecs.c5.xlarge', price_unit='Month', period=1 ) runtime = util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值 client.describe_price_with_options(describe_price_request, runtime) except Exception as error: # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 # 错误 message print(error.message) # 诊断地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: client = Sample.create_client() describe_price_request = ecs_20140526_models.DescribePriceRequest( region_id='cn-beijing', instance_type='ecs.c5.xlarge', price_unit='Month', period=1 ) runtime = util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值 await client.describe_price_with_options_async(describe_price_request, runtime) except Exception as error: # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 # 错误 message print(error.message) # 诊断地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:]) --------阿里api返回: { "RequestId": "D1F58F14-AAF7-585D-B3A5-1523CC5D94A1", "PriceInfo": { "Price": { "OriginalPrice": 365, "ReservedInstanceHourPrice": 0, "DiscountPrice": 146, "Currency": "CNY", "DetailInfos": { "DetailInfo": [ { "OriginalPrice": 0, "DiscountPrice": 0, "Resource": "image", "TradePrice": 0 }, { "OriginalPrice": 358, "DiscountPrice": 143.2, "Resource": "instanceType", "TradePrice": 214.8 }, { "OriginalPrice": 7, "DiscountPrice": 2.8, "Resource": "systemDisk", "TradePrice": 4.2 }, { "OriginalPrice": 0, "DiscountPrice": 0, "Resource": "bandwidth", "TradePrice": 0 } ] }, "TradePrice": 219 }, "Rules": { "Rule": [ { "Description": "合同优惠_整单_6.0折", "RuleId": 2000019367043 } ] } } } ------------------------------------------------------------------------------------------------------------------ 火山云询价api # Example Code generated by Beijing Volcanoengine Technology. from __future__ import print_function import volcenginesdkcore import volcenginesdkbilling from volcenginesdkcore.rest import ApiException if __name__ == '__main__': # 注意示例代码安全,代码泄漏会导致AK/SK泄漏,有极大的安全风险。 configuration = volcenginesdkcore.Configuration() configuration.ak = "Your AK" configuration.sk = "Your SK" configuration.region = "cn-beijing" # set default configuration volcenginesdkcore.Configuration.set_default(configuration) # use global default configuration api_instance = volcenginesdkbilling.BILLINGApi() query_price_for_renew_request = volcenginesdkbilling.QueryPriceForRenewRequest( instance_id_list=["i-ye3aogjxfkwh2yrey86c"], product="ECS", use_duration=1, ) try: # 复制代码运行示例,请自行打印API返回值。 api_instance.query_price_for_renew(query_price_for_renew_request) except ApiException as e: # 复制代码运行示例,请自行打印API错误信息。 # print("Exception when calling api: %s\n" % e) pass --------火山云询价api调用返回结果 { "ResponseMetadata": { "RequestId": "20250924090622B58F540645656224EA78", "Action": "QueryPriceForRenew", "Version": "2022-01-01", "Service": "billing", "Region": "cn-beijing" }, "Result": { "Currency": "CNY", "TotalOriginalAmount": "561.17", "TotalDiscountAmount": "252.53", "InstanceAmountList": [ { "InstanceID": "i-ye3aogjxfkwh2yrey86c", "Product": "ECS", "ConfigurationCode": "ecs.c3a.2xlarge.month", "OriginalAmount": "561.17", "DiscountAmount": "252.53" } ], "CalSerialNo": "CSN_d39k83j65irjk3r3543g", "BaseResp": { "StatusMessage": "", "StatusCode": 0, "HTTPStatusCode": 0, "ErrorCode": "" } } }
最新发布
09-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值