利用 API 实现资源和成本管理
利用 BssOpenAPI 实现资源和成本管理
BssOpenAPI 提供的功能
BssOpenAPI 是阿里云提供的实例、订单、账单和卡券管理等系列工具的API集合产品。 通过 BssOpenAPI 我们可以实现从产品基本信息查询,到钱账票的统一管理功能。
资源概念
BssOpenAPI 是面向资源概念设计的一套API。在使用的过程中,需要明确由哪些要素去确定一个唯一的云资源概念。
在 BssOpenAPI 中,我们使用 产品code + 产品类型 + 付费类型 + 实例ID 四个概念去唯一确定一个云资源。
比如我们想要查询 instanceID = roRDS-1, productCode = RDS, productType = roRDS, subscriptionType= Subscription 的实例属性详情,代表查询roRDS-1的预付费只读RDS的实例属性详情。
典型使用场景分析
在线交易
用户通过在阿里云上浏览产品特性,挑选和组装对应的云产品组合配置,对云产品的配置的价格进行估算。然后下单购买,创建一套云资源。 在云资源的具体使用过程中,会根据具体的业务场景,比如业务高低峰流量,对资源的配置做提升和降低。 同时我们也会查询和筛选出一批即将到期的实例列表,对实例执行续费动作。如果觉得手动续费的动作太繁琐,我们希望能够设置自动续费,阿里云自动续费服务将按照您的设定规则执行自动续费任务。
扩展开来,包含如下具体场景。
查询产品概览信息 QueryProductList
查询产品详细模块信息 DescribePricingModule
查询价格 GetSubscriptionPrice / GetPayAsYouGoPrice
我们通过 QueryProductList 查询到阿里云的产品列表概览,获取到了待购买的目标产品的 ProductCode & ProductType & SubscriptionType 等信息。而后可以通过 DescribePricingModule 去查询目标产品的具体细节配置信息。
比如我们通过 QueryProductList 去查询到了 后付费弹性公网IP 产品的基本信息,ProductCode=eip, SubscriptionType=PayAsYouGo。 想要去查看一款 eip 产品下面包含哪些具体配置,就可以通过 上述信息,去DescribePricingModule 接口查询详情信息,获取到 eip 包含 cn-qingdao-cm5-a01、cn-beijing-btc-a01 等可选region,可以选择按流量计费或者按固定带宽计费等。
最后根据我们的业务类型,选取了 cn-qingdao-cm5-a01 region下,按照固定带宽计费类型的 eip,可以使用 GetPayAsYouGoPrice 来获取具体的配置价格。
查询账户余额 QueryAccountBalance
各类可用卡券查询
在对具体配置进行下单购买之前,我们可以通过 QueryAccountBalance / QueryCashCoupons / QueryPrepaIDCaRDS / QueryRedeem 对账户余额和各类卡包情况进行查询,以初步判断当前用户状况满足目标配置的购买需求(比如余额+代金券总额,是否大于待购买配置的应付金额)。
创建实例 CreateInstance
实例配置变更 ModifyInstance
切换付费类型 ConvertChargeType
实例列表查询 QueryAvailableInstances
实例续费 RenewInstance
设置实例自动续费状态 SetRenewal
上面说到,我们通过 DescribePricingModule 查询得到了目标产品的具体配置信息,并对具体配置通过 GetPayAsYouGoPrice 询价接口获得了相应的价格。 当我们需要对目标配置执行购买和创建时,可以通过 CreateInstance 传入具体的 产品 + 配置信息 对具体配置的实例执行创建。 接口将返回创建实例关联的订单ID,和创建成功得到的实例ID。如果是预付费实例的话,CreateInstance 所需支付的费用,将在用户的账户余额、代金券等卡券上自动执行抵扣。
如果遇到业务高峰,我们需要对原有资源的配置进行升级,比如将 eip 的带宽峰值从 1M 升高到 2M,此时我们可以通过 ModifyInstance 对某个eip实例做配置升级动作。同时升级动作也将产生一个对应的订单号。
同时我们也可以通过 ConvertChargeType 来对资源的付费类型做转换,比如后付费转换为预付费。
我们可以通过 QueryAvailableInstances 来查询账户名下保有的所有资源列表,资源详情里面包含实例的到期时间、region等信息。
我们可以根据 QueryAvailableInstances 的结果,筛选出所有即将到期的资源列表。用 RenewInstance 对其进行续费动作。如果觉得手动续费太繁琐,那么可以通过 SetRenewal 接口对资源配置自动续费规则。阿里云的自动续费系统,将根据配置的规则,在到期时间前进行自动续费。
由于内部系统架构限制,BssOpenAPI 产品的 CreateInstance 接口不支持 ECS & RDS 系列产品的实例创建、续费、变配和转换付费类型服务。如需相关功能,可以去对应产品的API列表页查找和索取相关服务。
查询某个资源包服务详情 DescribeResourcePackageProduct
资源包产品询价 GetResourcePackagePrice
创建资源包 GetResourcePackagePrice
查询拥有的资源包列表 QueryResourcePackageInstances
资源包续费 QueryResourcePackageInstances
资源包升级 UpgradeResourcePackage
资源包是一类比较特殊的云资源,流量包可以自动抵扣对应类型资源的使用量费用。 BssOpenAPI同样提供了系列API来对资源包,提供查询产品详情、询价、创建、续费、升级、查询列表的服务。
计费财账
上面在线交易部分,介绍到了我们怎么通过系列API来对云资源实现查询、询价和创建、变配等管理功能。 资源的创建和使用过程中,会产生相关的费用。 预付费类型的资源,创建时的订单支付产生一笔确定的费用。 后付费类型的资源,在使用中,每个计费周期会持续产生账单费用。账单的结算也会持续地消耗用户的账户余额或卡券。
BssOpenAPI 提供了系列工具,使用户可以获取到账户下所有的订单、账单详情信息,以此基础数据,来再加工实现自己的资源成本分析的逻辑。
同时我们也可以获取到发票信息,结合账单信息,以此来实现钱、票、账一致的稽核对账逻辑。
订单列表查询 QueryOrders
订单详情查询 GetOrderDetail
通过订单查询接口,可以查询订单关联的资源实例、实付金额等信息。因为对预付费资源的任何操作:新购、续费、升级、降配、退款等操作,都会生成对应的操作订单。订单上关联了实例资源ID和费用信息,所以通过这部分数据,可以得到所有预付费资源操作相关的付费金额信息。
产品计量数据详情 QueryUserOmsData
计量详情数据,作为后付费产品计费账单的数据基础。有如下公式: 某计量项应付价格 = 计量数据使用量 * 该计量项的单价 单价信息,可以通过 GetPayAsYouGoPrice 接口获得。
账单总览查询 QueryBillOverview
账单查询 QueryBill
实例账单查询 QueryInstanceBill
月费用分摊服务 QueryInstanceGaapCost
账单查询接口,提供了总览、详情、按实例分组、月费用分摊等维度的账单数据。
比如 QueryBillOverview 呈现了 按照产品类型聚合的账单总览数据。如账户在 201908账期保有 A B C 三种类型的资源,那么总览数据将呈现 A B C 各消费 / 退款的金额信息。 因为每次账务额度的变化,都一定是由预付费订单或者后付费账单的支付结算引起的。所以QueryBill 接口,以 订单号/账单号 为最细维度,统计了对应的账单详情信息。 在获得了最细粒度的账单详情数据之后,我们往往希望得知,我的某台ECS实例,在一个账务周期内,一共消耗了我多少的成本。所以 QueryInstanceBill 提供了按照实例聚合的账单详情数据。 在以月为账期维度结算的场景下,除了获取实例资源关联的详细账单数据外,QueryInstanceGaapCost 提供了月费用分摊费用信息。 同时
上述账单接口,提供了各个维度的账单详情数据信息。结合订单详情数据,我们可以清晰地知道账户整体、或者某个具体的云资源的费用消耗情况。 以此实现资源和成本的有效管理的目的。
总结
BssOpenAPI 提供了从资源创建和管理,到订单账单详情管理的体系工具,用户能够据此实现自己的资源和成本管理体系。