Introducción a los precios de venta al por menor de Azure

Los clientes de Azure han estado buscando una manera programática de recuperar los precios minoristas de todos los servicios de Azure. Ahora puede usar la API Precios de precios de venta al por menor para obtener precios de venta al por menor para todos los servicios de Azure. Anteriormente, la única manera de recuperar los precios de los servicios de Azure era usar la Calculadora de precios de Azure o Azure Portal. Esta API le ofrece una experiencia sin autenticación para obtener las tarifas comerciales de todos los servicios de Azure. Use la API para explorar los precios de los servicios de Azure en distintas regiones y SKU. La API de programación también puede ayudarle a crear sus propias herramientas para el análisis interno y la comparación de precios entre SKU y regiones.

Importante

La moneda que Microsoft usa para precios de todos los servicios de Azure es USD. Los precios que se muestran en moneda de USD son los precios de venta al por menor de Microsoft. Otros precios que no son de USD devueltos por la API son para su referencia para ayudarle a calcular los gastos presupuestarios.

Versión preliminar

Puede usar la nueva versión de la API 2023-01-01-preview en https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview. La versión preliminar es compatible con versiones anteriores de la API. La dirección URL devuelve el conjunto completo de medidores, incluidos los medidores principales y los medidores no primarios.

Con o https://prices.azure.com/api/retail/priceshttps://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview devuelve el conjunto completo de medidores.

Las tarifas de los planes de ahorro solo están disponibles con la https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview versión.

Filtrado de medidor principal

Puede limitar las respuestas para recuperar solo los precios de los medidores principales con:

https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&meterRegion='primary'

El filtrado de medidores principal es compatible con 2021-10-01 y versiones posteriores de la API, incluidas 2023-01-01.

El valor de filtro distingue mayúsculas de minúsculas

En versiones anteriores de la API, el valor del filtro no distingue mayúsculas de minúsculas. Sin embargo, en la 2023-01-01-preview versión y versiones posteriores, el valor distingue mayúsculas de minúsculas.

Por ejemplo:

https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines' Obras.

En versiones anteriores de la API y Virtual Machinesvirtual machines funcionaban.

Ahora, solo Virtual Machines funciona.

Compatibilidad con el plan de ahorro de Azure

Como se mencionó anteriormente, los precios comerciales del plan de ahorro de Azure solo se admiten con la versión preliminar (https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview). Para los medidores aptos para un plan de ahorro, los resultados tienen una sección correspondiente para el plan de ahorro. Cuando se compromete a un plan de ahorro, obtendrá un precio más barato que el OnDemand precio. Para más información sobre los planes de ahorro de Azure, consulte la documentación sobre los planes de ahorro de Azure.

Esta es una respuesta de API de ejemplo con información del plan de ahorro:


        {
            "currencyCode": "USD",
            "tierMinimumUnits": 0.0,
            "retailPrice": 2.305,
            "unitPrice": 2.305,
            "armRegionName": "southindia",
            "location": "IN South",
            "effectiveStartDate": "2019-05-14T00:00:00Z",
            "meterId": "0084b086-37bf-4bee-b27f-6eb0f9ee4954",
            "meterName": "M8ms",
            "productId": "DZH318Z0BQ4W",
            "skuId": "DZH318Z0BQ4W/00BQ",
            "availabilityId": null,
            "productName": "Virtual Machines MS Series",
            "skuName": "M8ms",
            "serviceName": "Virtual Machines",
            "serviceId": "DZH313Z7MMC8",
            "serviceFamily": "Compute",
            "unitOfMeasure": "1 Hour",
            "type": "Consumption",
            "isPrimaryMeterRegion": true,
            "armSkuName": "Standard_M8ms",
            "savingsPlan": [
                {
                    "unitPrice": 0.8065195,
                    "retailPrice": 0.8065195,
                    "term": "3 Years"
                },
                {
                    "unitPrice": 1.5902195,
                    "retailPrice": 1.5902195,
                    "term": "1 Year"
                }
            ]
        },

Punto de conexión de la API

https://prices.azure.com/api/retail/prices

Llamadas de ejemplo de API

Estos son algunos ejemplos:

Llamadas de ejemplo filtradas solo para máquinas virtuales:

https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines'

Llamadas de ejemplo filtradas solo para reservas:

https://prices.azure.com/api/retail/prices?$filter=priceType eq 'Reservation'

Llamadas de ejemplo filtradas para máquinas virtuales de instancia reservada:

https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines' and priceType eq 'Reservation'

Llamadas de ejemplo filtradas para recursos de proceso:

https://prices.azure.com/api/retail/prices?$filter=serviceFamily eq 'Compute'

Llamadas de ejemplo filtradas para proceso con moneda en euros:

https://prices.azure.com/api/retail/prices?currencyCode='EUR'&$filter=serviceFamily eq 'Compute'

Ejemplos de respuesta de API

Esta es una respuesta de API de ejemplo, sin precios de reserva.

{
            "currencyCode": "USD",
            "tierMinimumUnits": 0.0,
            "retailPrice": 0.176346,
            "unitPrice": 0.176346,
            "armRegionName": "westeurope",
            "location": "EU West",
            "effectiveStartDate": "2020-08-01T00:00:00Z",
            "meterId": "000a794b-bdb0-58be-a0cd-0c3a0f222923",
            "meterName": "F16s Spot",
            "productId": "DZH318Z0BQPS",
            "skuId": "DZH318Z0BQPS/00TG",
            "productName": "Virtual Machines FS Series Windows",
            "skuName": "F16s Spot",
            "serviceName": "Virtual Machines",
            "serviceId": "DZH313Z7MMC8",
            "serviceFamily": "Compute",
            "unitOfMeasure": "1 Hour",
            "type": "DevTestConsumption",
            "isPrimaryMeterRegion": true,
            "armSkuName": "Standard_F16s"
        }

Esta es una respuesta de API de ejemplo con precios de reserva y término en la respuesta.

{
            "currencyCode": "USD",
            "tierMinimumUnits": 0.0,
            "reservationTerm": "1 Year",
            "retailPrice": 25007.0,
            "unitPrice": 25007.0,
            "armRegionName": "southcentralus",
            "location": "US South Central",
            "effectiveStartDate": "2020-08-01T00:00:00Z",
            "meterId": "0016083a-928f-56fd-8eeb-39287dcf676d",
            "meterName": "E64 v4",
            "productId": "DZH318Z0D1L7",
            "skuId": "DZH318Z0D1L7/018J",
            "productName": "Virtual Machines Ev4 Series",
            "skuName": "E64 v4",
            "serviceName": "Virtual Machines",
            "serviceId": "DZH313Z7MMC8",
            "serviceFamily": "Compute",
            "unitOfMeasure": "1 Hour",
            "type": "Reservation",
            "isPrimaryMeterRegion": true,
            "armSkuName": "Standard_E64_v4"
        }

Esta es una respuesta de ejemplo con una moneda que no es de USD.

{
  "currencyCode": "EUR",
  "tierMinimumUnits": 0,
  "retailPrice": 0.6176,
  "unitPrice": 0.6176,
  "armRegionName": "westeurope",
  "location": "EU West",
  "effectiveStartDate": "2021-04-01T00:00:00Z",
  "meterId": "000a794b-bdb0-58be-a0cd-0c3a0f222923",
  "meterName": "F16s Spot",
  "productId": "DZH318Z0BQPS",
  "skuId": "DZH318Z0BQPS/00TG",
  "productName": "Virtual Machines FS Series Windows",
  "skuName": "F16s Spot",
  "serviceName": "Virtual Machines",
  "serviceId": "DZH313Z7MMC8",
  "serviceFamily": "Compute",
  "unitOfMeasure": "1 Hour",
  "type": "Consumption",
  "isPrimaryMeterRegion": true,
  "armSkuName": "Standard_F16s"
}

Paginación de respuesta de API

La respuesta de la API proporciona paginación. Para cada solicitud de API, se devuelve un máximo de 1000 registros. Al final de la respuesta de la API, tiene el vínculo a la página siguiente. Por ejemplo:

"NextPageLink": https://prices.azure.com:443/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27&$skip=1000

Detalles de la propiedad de API

Estos son todos los detalles de la propiedad que forman parte de la respuesta de la API.

Campo Valores de ejemplo Definición
currencyCode USD Moneda en la que se definen las tarifas y devuelve los precios en USD a menos que se especifique.
tierMinimumUnits 0 Unidades mínimas de consumo para aprovechar el precio
reservationTerm 1 año Período de reserva: un año o tres años
retailPrice 0.176346 Precios sin descuento
unitPrice 0.176346
armRegionName westeurope Azure Resource Manager región en la que el servicio está disponible. Esta versión solo admite precios en Commercial Cloud.
Location Oeste de Europa Centro de datos de Azure donde se implementa el recurso
effectiveStartDate 2020-08-01T00:00:00Z Campo opcional. Muestra la fecha en que los precios de venta al por menor son efectivos.
meterId 000a794b-bdb0-58be-a0cd-0c3a0f222923 Identificador único del recurso
meterName F16s Spot Nombre del medidor
productid DZH318Z0BQPS UniqueID del producto
skuId DZH318Z0BQPS/00TG UniqueID para la SKU
productName Windows de la serie FS de Virtual Machines Nombre de producto
skuName F16s Spot Nombre de SKU
serviceName Virtual Machines Nombre del servicio
serviceId DZH313Z7MMC8 UniqueID del servicio
serviceFamily Compute Familia de servicios de la SKU
unitOfMeasure 1 hora Cómo se mide el uso para el servicio
Type DevTestConsumption Tipo de consumo de medidor. Otros tipos son Reservation y Consumption.
isPrimaryMeterRegion True Indica si la región del medidor está establecida como un medidor principal o no. Los medidores principales se usan para cargos y facturación.
armSkuName Standard_F16s Nombre de SKU registrado en Azure
term 3 años Longitud del período de un plan de ahorro de Azure, asociado a savingsPlan la información.

Filtros de API

Los filtros se admiten para los campos siguientes:

  • armRegionName
  • Location
  • meterId
  • meterName
  • productid
  • skuId
  • productName
  • skuName
  • serviceName
  • serviceId
  • serviceFamily
  • priceType
  • armSkuName

Los filtros se anexan al punto de conexión de la API, como se muestra en las llamadas de ejemplo de API.

Monedas admitidas

Anexe el código de moneda al punto de conexión de la API, como se muestra en la llamada de ejemplo de API.

Código de moneda Detalle
USD Dólar estadounidense
AUD Dólar australiano
BRL Real brasileño
CAD Dólar canadiense
CHF Franco suizo
CNY Yuan chino
DKK Corona danesa
EUR Euro
GBP Libra británica
INR Rupia india
JPY Yen japonés
KRW Coreano ganado
NOK Corona noruega
NZD Dólar neozelandés
FROTAR Rublo ruso
SEK Corona sueca
TWD Dólar taiwanés

Ejemplo de programación

La siguiente aplicación de Python sencilla emplea la API para consultar los precios de spot comercial de una máquina virtual de la SKU NP20 estándar en la región Centro-sur de EE. UU. La aplicación filtra la salida de la consulta y presenta la información deseada en un formato de tabla.

#!/usr/bin/env python3
import requests
import json
from tabulate import tabulate 


def build_pricing_table(json_data, table_data):
    for item in json_data['Items']:
        meter = item['meterName']
        table_data.append([item['armSkuName'], item['retailPrice'], item['unitOfMeasure'], item['armRegionName'], meter, item['productName']])
        
def main():
    table_data = []
    table_data.append(['SKU', 'Retail Price', 'Unit of Measure', 'Region', 'Meter', 'Product Name'])
    
    api_url = "https://prices.azure.com/api/retail/prices?api-version=2021-10-01-preview"
    query = "armRegionName eq 'southcentralus' and armSkuName eq 'Standard_NP20s' and priceType eq 'Consumption' and contains(meterName, 'Spot')"
    response = requests.get(api_url, params={'$filter': query})
    json_data = json.loads(response.text)
    
    build_pricing_table(json_data, table_data)
    nextPage = json_data['NextPageLink']
    
    while(nextPage):
        response = requests.get(nextPage)
        json_data = json.loads(response.text)
        nextPage = json_data['NextPageLink']
        build_pricing_table(json_data, table_data)

    print(tabulate(table_data, headers='firstrow', tablefmt='psql'))
    
if __name__ == "__main__":
    main()

La ejecución de este código genera la siguiente salida:

+----------------+----------------+-------------------+----------------+------------+------------------------------------+
| SKU            |   Retail Price | Unit of Measure   | Region         | Meter      | Product Name                       |
|----------------+----------------+-------------------+----------------+------------+------------------------------------|
| Standard_NP20s |       0.828503 | 1 Hour            | southcentralus | NP20s Spot | Virtual Machines NP Series Windows |
| Standard_NP20s |       0.448207 | 1 Hour            | southcentralus | NP20s Spot | Virtual Machines NP Series         |
+----------------+----------------+-------------------+----------------+------------+------------------------------------+

Pasos siguientes