【产品功能】价格信息支持下载

简介: 本文主要解读了实例,磁盘,带宽价格JSON的结构,介绍了各站点的下载地址,给出了一种搜索最低价格的方式。

背景

目前阿里云的ECS实例规格已经达到大约300种,有17个region,分成Io优化和非Io优化,操作系统分为windows和非windows类型,网络类型分为vpc和classic,再加上价格单位 按小时、按周、按月、1年、2年、3年、4年、5年有不同力度的打折,如果笼统的计算,不同的组合方式达到了300 17 2 2 2 * 8=32万种,除去阿里云不支持的组合大概也有4万种有效组合方式,除此之外还有磁盘 带宽的价格。面对如此庞大的服务器组合方式,到底哪种组合方式既满足业务需求,又花最少的钱?用户可以到价格界面进行搜索,也可以下载价格JSON自行实现搜索脚本。

价格JSON结构解读

实例、磁盘、带宽价格

{
    "currency": "CNY", //货币类型
    "description": "", //价格组合key介绍,实例:RegionId::InstanceType::NetworkType::OSType::IoOptimized,磁盘:RegionId::DiskCategory::DiskType,带宽:RegionId
    "disclaimer": "This pricing list is for informational purposes only.The actual price completely depends on ecs-buy.aliyun.com", //声明
    "publicationDate": "2018-08-06T07:00:04Z", //价格JSON生成时间
    "site": "CN", //站点
    "type": "Instance", //资源类型
    "version": "2.0.5", //版本
    "pricingInfo": {
        "ap-northeast-1::ecs.e4.2xlarge::vpc::linux::optimized": {
            "hours": [ //价格单位,所有单位:hours weeks months years traffic
                {
                    "period": "1", //数量
                    "price": "4.414" //价格
                    "unit": "GB", //实例:无此项,磁盘:磁盘存储大小单位,带宽:价格单位 1.hours 按量计费 2.months 包年包月计费,带宽大小上限单位unit=Mbps 3.traffic 按流量计费,流量单位unit=GB
                    "value": "1", //实例:无此项,磁盘和带宽:以unit为单位的个数。
                }
            ]
        }
    }
}

各站点下载地址介绍

价格调整或有新规格上限,价格JSON版本会相继更新。
1.国内站,控制台界面

实例:https://g.alicdn.com/aliyun/ecs-price-info/2.0.5/price/download/instancePrice.json
磁盘:https://g.alicdn.com/aliyun/ecs-price-info/2.0.5/price/download/diskPrice.json
带宽:https://g.alicdn.com/aliyun/ecs-price-info/2.0.5/price/download/bandWidthPrice.json

2.国际站,控制台界面

实例:https://g.alicdn.com/aliyun/ecs-price-info-intl/2.0.3/price/download/instancePrice.json
磁盘:https://g.alicdn.com/aliyun/ecs-price-info-intl/2.0.3/price/download/diskPrice.json
带宽:https://g.alicdn.com/aliyun/ecs-price-info-intl/2.0.3/price/download/bandWidthPrice.json

3.日本站,控制台界面

实例:https://g.alicdn.com/aliyun/ecs-price-info-jp/2.0.1/price/download/instancePrice.json
磁盘:https://g.alicdn.com/aliyun/ecs-price-info-jp/2.0.1/price/download/diskPrice.json
带宽:https://g.alicdn.com/aliyun/ecs-price-info-jp/2.0.1/price/download/bandWidthPrice.json

搜索最低价格脚本示例

import urllib2
import json
from decimal import Decimal


# load price data
def load_url_price(url):
    response = urllib2.urlopen(url)
    priceStr = response.read()
    priceJson = json.loads(priceStr)
    return priceJson


# filtering according to conditions
def filter_by_condition(pricingInfo, regionId, instanceType, networkType, osType, ioType):
    filterPricingInfo = {}
    for key in pricingInfo:
        if (regionId != None):
            if (regionId not in key):
                continue
        if (instanceType != None):
            if (instanceType not in key):
                continue
        if (networkType != None):
            if (networkType not in key):
                continue
        if (osType != None):
            if (osType not in key):
                continue
        if (ioType != None):
            if (ioType not in key):
                continue
        filterPricingInfo[key] = pricingInfo[key]
    return filterPricingInfo


# converted into monthly price
def get_month_price(priceItem, priceUnit):
    price = Decimal(priceItem["price"])
    period = Decimal(priceItem["period"])
    if priceUnit == "hours":
        return price * 24 * 30 / period
    if priceUnit == "weeks":
        return price / 7 * 30 / period
    if priceUnit == "months":
        return price / period
    if priceUnit == "years":
        return price / period / 12


# small item calculation
def get_min_price_item(result, priceItemList, period, priceUnit, pricingKey):
    for priceItem in priceItemList:
        if period == None or str(period) == str(priceItem["period"]):
            monthPriceResult, monthPrice = 0, 0
            if result != None:
                monthPriceResult = get_month_price(result, result["priceUnit"])
                monthPrice = get_month_price(priceItem, priceUnit)
            if (monthPrice <= monthPriceResult or result == None):
                result = priceItem
                result["priceUnit"] = priceUnit
                result["pricingKey"] = pricingKey
    return result


# param validate
def param_validate(pricingInfo, regionId, instanceType, networkType, osType, ioType, priceUnit, period):
    filterPricingInfo = filter_by_condition(pricingInfo, regionId, instanceType, networkType, osType, ioType)
    checkMessageHeader = "Failed entry parameter check, "
    if filterPricingInfo:
        priceItem = filterPricingInfo.values()[0]
        if priceUnit != None:
            if not priceItem.has_key(priceUnit):
                raise RuntimeError(
                    checkMessageHeader + "the priceUnit:{0} your input is not support.".format(priceUnit))
        if period != None:
            periodExisted = False
            for tmpPriceUnit in priceItem:
                for tmpPeriodItem in priceItem[tmpPriceUnit]:
                    checkPriceUnit = True if (priceUnit == None) else (tmpPriceUnit == priceUnit)
                    if str(tmpPeriodItem["period"]) == str(period) and checkPriceUnit:
                        periodExisted = True
                        break
            if not periodExisted:
                raise RuntimeError(
                    checkMessageHeader + "the priceUnit:{0} period:{1} your input is not support.".format(priceUnit,
                                                                                                          period))
    else:
        raise RuntimeError(checkMessageHeader + "please check your regionId,instanceType,networkType,osType,ioType")
    return filterPricingInfo


# query minimum price
def query_min_price(url, regionId, instanceType, networkType, osType, ioType, priceUnit, period):
    result = None
    priceJson = load_url_price(url)
    pricingInfo = priceJson["pricingInfo"]
    filterPricingInfo = param_validate(pricingInfo, regionId, instanceType, networkType, osType, ioType, priceUnit,
                                       period)
    for key in filterPricingInfo:
        if priceUnit != None:
            if filterPricingInfo[key].has_key(priceUnit):
                result = get_min_price_item(result, filterPricingInfo[key][priceUnit], period, priceUnit, key)
        else:
            for priceUnitKey in filterPricingInfo[key]:
                result = get_min_price_item(result, filterPricingInfo[key][priceUnitKey], period, priceUnitKey, key)
    return result


if __name__ == '__main__':
    url = "https://g.alicdn.com/aliyun/ecs-price-info/2.0.6/price/download/instancePrice.json"
    regionId = None
    instanceType = "ecs.g5.2xlarge"
    # vpc classic
    networkType = None
    # linux windows
    osType = None
    # optimized none
    ioType = None
    # hours weeks months years
    priceUnit = None
    # 1-5
    period = None
    try:
        print json.dumps(query_min_price(url, regionId, instanceType, networkType, osType, ioType, priceUnit, period))
    except RuntimeError, e:
        print e.message

小结

购买实例之前可以在价格界面搜索一下满足自己需求最低价格的实例类型,或者自行编写搜索脚本。这样您可以买到最实惠的机器,尽量为您节省成本。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
移动开发 小程序
知识付费小程序注册时类目该如何选择?
知识付费小程序注册时类目该如何选择?
434 0
|
1月前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
2月前
|
运维 负载均衡 Linux
阿里云轻量服务器最新收费标准与价格参考
阿里云轻量服务器具有灵活的镜像选择、快速上手、简便运维等优势,轻量服务器适合个人开发者和学生用来搭建网站、云端学习等场景使用,2024年截至目前国内地域有60元/月、80元/月等套餐可选,国外地域有24元/月、34元/月、67元/月等套餐可选,目前轻量应用服务器2核2G3M带宽82元1年、2核4G4M带宽298元1年。
|
5月前
|
SQL 分布式计算 DataWorks
享受成本分析自由,体验账单数据订阅及查询分析功能
使用DataWorks进行账单数据订阅和查询分析,您可以有效地管理和可视化您的阿里云消费数据。本指南提供了详细步骤和示例,帮助您快速入门实现账单数据的高效分析。
721 8
享受成本分析自由,体验账单数据订阅及查询分析功能
|
云安全 运维 安全
阿里云安全产品购买详细介绍_版本_价格_功能优势
阿里云安全产品购买详细介绍_版本_价格_功能优势,云安全中心基础版免费、防病毒班432元一年、高级版优惠价969元一年,还有企业版和旗舰版可选,阿里云百科分享阿里云安全中心详细介绍,包括云安全中心功能、不同版本价格表以及有必要购买说明
325 0
|
Android开发
Android系统开发中产品信息文件说明
Android系统开发中产品信息文件说明
129 1
|
7月前
|
机器学习/深度学习 人工智能 开发工具
视觉智能平台常见问题之设置默认使用单类目资源包而不是通用资源包如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
7月前
|
小程序 IDE API
社区每周丨小程序基础库更新至 2.8.21及小程序商品新增商品营销功能(9.11-9.15)
社区每周丨小程序基础库更新至 2.8.21及小程序商品新增商品营销功能(9.11-9.15)
187 11
|
存储 弹性计算 负载均衡
阿里云新增新老用户多场景组合购,多种业务场景可选,灵活选择解决方案
很多购买阿里云产品的用户在购买云服务器产品的同时往往还需要搭配购买其他云产品,例如备案管家服务、对象存储服务、负载均衡CLB、无影云桌面等,为此,阿里云新增了组合购套餐,最低仅需1532.04元起。
阿里云新增新老用户多场景组合购,多种业务场景可选,灵活选择解决方案
|
存储 监控 安全
阿里云存储简介和购买流程
阿里云存储是阿里巴巴集团旗下的一项云计算服务,为用户提供可靠、安全、弹性扩展的云存储解决方案。通过阿里云存储,用户可以高效地管理、存储和传输各类数据。 阿里云存储的核心功能包括对象存储、文件存储和块存储。对象存储是一种分布式存储模型,适用于存储海量非结构化数据,如图片、视频等。文件存储提供了类似于传统文件系统的共享存储服务,可方便地共享和访问文件。块存储则为云服务器提供了持久性的块级存储设备,可挂载到云服务器上使用。

热门文章

最新文章