Vue d’ensemble des prix de vente au détail Azure

Les clients Azure recherchent un moyen programmatique de récupérer les prix de détail de tous les services Azure. Vous pouvez maintenant utiliser l’API Prix de vente au détail pour obtenir les prix de détail de tous les services Azure. Auparavant, le seul moyen de récupérer les prix pour les services Azure consistait à utiliser la calculatrice de prix Azure ou le portail Azure. Cette API vous offre une expérience non authentifiée pour obtenir les tarifs de vente au détail relatifs à tous les services Azure. Utilisez l’API pour explorer les prix des services Azure par rapport à différentes régions et différentes références SKU. L’API programmatique peut également vous aider à créer vos propres outils d’analyse interne et de comparaison des prix entre les références SKU et les régions.

Important

La devise utilisée par Microsoft pour le prix de tous les services Azure est USD. Les prix affichés en usd sont les prix de détail Microsoft. D’autres prix autres que l’USD retournés par l’API sont à titre de référence pour vous aider à estimer les dépenses budgétaires.

Version préliminaire

Vous pouvez utiliser la nouvelle version de l’API 2023-01-preview à l’adresse https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview. La préversion est rétrocompatible avec les versions d’API précédentes. L’URL retourne l’ensemble complet de compteurs, y compris les compteurs principaux et les compteurs non primaires.

À l’aide https://prices.azure.com/api/retail/prices de ou https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview retourne l’ensemble complet de compteurs.

Les tarifs des plans d’économies ne sont disponibles qu’avec la https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview version.

Filtrage du compteur principal

Vous pouvez limiter les réponses pour récupérer uniquement les prix des compteurs principaux avec :

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

Le filtrage des compteurs principaux est pris en charge par et les 2021-10-01 versions ultérieures de l’API, y compris 2023-01-01.

La valeur du filtre respecte la casse

Dans les versions précédentes de l’API, la valeur du filtre ne respectait pas la casse. Toutefois, dans la 2023-01-01-preview version et les versions ultérieures, la valeur respecte la casse.

Par exemple :

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

Dans les versions antérieures de l’API, Virtual Machines et virtual machines fonctionnait.

Maintenant, ne fonctionne que Virtual Machines .

Prise en charge du plan d’enregistrement Azure

Comme mentionné précédemment, les prix de détail du plan d’économies Azure sont uniquement pris en charge avec la version préliminaire (https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview). Pour les compteurs éligibles à un plan d’économies, les résultats ont une section correspondante pour le plan d’économies. Lorsque vous vous engagez sur un plan d’économies, vous obtenez un prix moins cher que le OnDemand prix. Pour plus d’informations sur les plans d’économies Azure, consultez la documentation relative aux plans d’économies Azure.

Voici un exemple de réponse d’API avec des informations sur le plan d’économies :


        {
            "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"
                }
            ]
        },

Point de terminaison d’API

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

Exemples d’appels d’API

Voici quelques exemples :

Exemples d’appels filtrés pour les machines virtuelles uniquement :

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

Exemples d’appels filtrés pour les réservations uniquement :

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

Exemples d’appels filtrés pour les machines virtuelles réservées instance :

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

Exemples d’appels filtrés pour les ressources de calcul :

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

Exemples d’appels filtrés pour le calcul avec la devise en euro :

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

Exemples de réponse d’API

Voici un exemple de réponse d’API, sans prix de réservation.

{
            "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"
        }

Voici un exemple de réponse d’API avec les prix des réservations et le terme dans la réponse.

{
            "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"
        }

Voici un exemple de réponse avec une devise autre que l’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"
}

Pagination de la réponse de l’API

La réponse de l’API fournit une pagination. Pour chaque requête d’API, un maximum de 1 000 enregistrements sont retournés. À la fin de la réponse de l’API, elle a le lien vers la page suivante. Par exemple :

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

Détails de la propriété API

Voici tous les détails de la propriété qui font partie de la réponse de l’API.

Champ Exemples de valeurs Définition
currencyCode USD Devise dans laquelle les taux sont définis et retourne les prix en USD, sauf indication contraire.
tierMinimumUnits 0 Unités minimales de consommation pour bénéficier du prix
reservationTerm 1 an Durée de réservation : un an ou trois ans
retailPrice 0.176346 Prix sans remise
unitPrice 0.176346
armRegionName westeurope Azure Resource Manager région où le service est disponible. Cette version prend uniquement en charge les prix sur le cloud commercial.
Location Europe Ouest Centre de données Azure où la ressource est déployée
effectiveStartDate 2020-08-01T00 :00 :00Z Champ facultatif. Affiche la date d’entrée en vigueur des prix de détail.
meterId 000a794b-bdb0-58be-a0cd-0c3a0f222923 Identificateur unique de la ressource
meterName F16s Spot Nom du compteur
productid DZH318Z0BQPS UniqueID du produit
skuId DZH318Z0BQPS/00TG UniqueID pour la référence SKU
productName Machines Virtuelles série FS Windows Nom du produit
skuName F16s Spot Nom de la référence (SKU)
serviceName Machines Virtuelles Nom du service
serviceId DZH313Z7MMC8 UniqueID du service
serviceFamily Compute Famille de services de la référence SKU
unitOfMeasure 1 heure Comment l’utilisation est mesurée pour le service
Type DevTestConsumption Type de consommation du compteur. Les autres types sont Reservation et Consumption.
isPrimaryMeterRegion True Indique si la région du compteur est définie en tant que compteur principal ou non. Les compteurs principaux sont utilisés pour les frais et la facturation.
armSkuName Standard_F16s Nom de référence SKU inscrit dans Azure
term 3 ans Durée d’un plan d’économies Azure, associée savingsPlan à des informations.

Filtres d’API

Les filtres sont pris en charge pour les champs suivants :

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

Vous ajoutez les filtres au point de terminaison d’API, comme indiqué dans les exemples d’appels d’API.

Devises prises en charge

Vous ajoutez le code monétaire au point de terminaison de l’API, comme indiqué dans l’exemple d’appel d’API.

Code devise Détail
USD Dollar américain
AUD Dollar australien
BRL Real brésilien
CAD Dollar canadien
CHF Franc suisse
CNY Yuan chinois
DKK Couronne danoise
EUR Euro
GBP Livre britannique
INR Roupie indienne
JPY Yen japonais
KRW Coréen a gagné
NOK Couronne norvégienne
NZD Dollar néo-zélandais
FROTTER Rouble russe
SEK Couronne suédoise
TWD Dollar taïwanais

Exemple programmatique

L’application Python simple suivante utilise l’API pour interroger la tarification spot d’une machine virtuelle de la référence SKU NP20 standard dans la région USA Centre Sud. L’application filtre la sortie de la requête et présente les informations souhaitées dans un format de table.

#!/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()

L’exécution de ce code génère la sortie suivante :

+----------------+----------------+-------------------+----------------+------------+------------------------------------+
| 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         |
+----------------+----------------+-------------------+----------------+------------+------------------------------------+

Étapes suivantes