Au cours des billets suivants, je vais vous proposer de travailler sur les APIs de billings qui permettent d’avoir une vue d’ensemble de votre consommation tarifaire au niveau de votre environnement Azure.
Une introduction des possibilités est disponible à l’adresse suivante :
https://azure.microsoft.com/fr-fr/documentation/articles/billing-usage-rate-card-overview/
Il y a 2 API à connaitre :
- Resource Usage Api qui permet de :
- connaitre l’utilisation des services azure (à l’heure ou au jour)
- d’avoir les informations de métadonnées des services (Tag etc…)
- Resource RateCard API qui permet de :
- connaitre de connaitre les services disponibles sur l’offre azure choisit
- connaitre l’estimation tarifaire d’une unité de service dans la devise choisi.
Ces 2 APIs sont sécurisés via le RBAC, et il est nécessaire d’avoir à minima un accès Lecteur à la souscription pour être en mesure d’utiliser ses APIs. Une application sur l’Azure Active Directory de la souscription sera alors crée pour gérer les authentifications via le framework ADAL.
Vous pouvez retrouver les exemples de code fournit par Microsoft sur ce gitHub. Ces exemples montre l’utilisation de chacune des APIs de manière indépendantes. Je vous proposerais au fur & à mesure de l’explication de faire la jonction entre les 2 APIs.
https://github.com/Azure/BillingCodeSamples
Intéressons au sample concernant l’usage : https://github.com/Azure-Samples/billing-dotnet-usage-api
Après avoir configuré votre Azure Active Directory de votre souscription pour lui rajouter une application et définir votre application native, vous pouvez ,à l’aide d’un compte ayant à minima les droits Reader sur la souscription, récupérer les informations d’usage.
Le sample propose une authentification interactive au démarrage de l’application console à l’aide d’ADAL.
Pour démarrer l’application, il vous suffit de précisé quelques éléments dans le fichier de configuration :
- Tenant Domain
- Subscription ID
- Client Id
Egalement, il est nécessaire d’aller un peu dans le code afin de modifier l’appel d’Api du sample afin de configurer un intervalle de temps reflétant l’utilisation de votre souscription :
(J’ai rajouté dans le program.cs la modification de l’uri avec les dates d’intervalles voulus)
string startDate = "2016-07-01"; string endDate = "2016-07-31"; // Build up the HttpWebRequest string requestURL = String.Format("{0}/{1}/{2}/{3}", ConfigurationManager.AppSettings["ARMBillingServiceURL"], "subscriptions", ConfigurationManager.AppSettings["SubscriptionID"], "providers/Microsoft.Commerce/UsageAggregates?api-version=2015-06-01-preview&reportedstartTime="+startDate+"+00%3a00%3a00Z&reportedEndTime="+endDate+"+00%3a00%3a00Z"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURL);
on a alors un retour avec 2 types d’enregistrements :
{ "id": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Commerce/UsageAggregates/Daily_BRSDT_20160701_0000", "name": "Daily_BRSDT_20160701_0000", "type": "Microsoft.Commerce/UsageAggregate", "properties": { "subscriptionId": "00000000-0000-0000-0000-000000000000", "usageStartTime": "2016-06-30T00:00:00+00:00", "usageEndTime": "2016-07-01T00:00:00+00:00", "meterName": "Free App Service", "meterCategory": "Azure App Service", "unit": "Apps", "instanceData": "{\"Microsoft.Resources\":{\"resourceUri\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Default-Web-westus/providers/Microsoft.Web/sites/moskitosnugetgallery\",\"location\":\"westus\",\"additionalInfo\":{\"AppServicePlanUri\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Default-Web-westus/providers/Microsoft.Web/serverfarms/Default0\"}}}", "meterId": "c0f5cb45-6fb1-41c9-8545-72ad400d9da4", "infoFields": { }, "quantity": 0.004032 } }, { "id": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Commerce/UsageAggregates/Daily_BRSDT_20160701_0000", "name": "Daily_BRSDT_20160701_0000", "type": "Microsoft.Commerce/UsageAggregate", "properties": { "subscriptionId": "00000000-0000-0000-0000-000000000000", "usageStartTime": "2016-06-30T00:00:00+00:00", "usageEndTime": "2016-07-01T00:00:00+00:00", "meterName": "Standard IO - Table/ Queue (GB)", "meterCategory": "Storage", "meterSubCategory": "Locally Redundant", "unit": "GB", "meterId": "bd69546d-19b0-4776-865f-8753b800883b", "infoFields": { "meteredRegion": "West Europe", "meteredService": "Storage", "meteredServiceType": "", "project": "storeage91284058" }, "quantity": 0.000010 } }
les enregistrement avec le champs infoField correspond à l’ancien format des objets Azure et le chamsp InstanceData correspond au nouveau format de données des resources Azure.
Tout les détails sur ses champs sont référencés sur la documentation de l’API : https://msdn.microsoft.com/en-us/library/azure/mt219001.aspx
Les champs importants à prendre en compte pour être en mesure de rapprocher l’usage à la facturation sont les champs :
- meterId : identifiant unique du type de service
- quantity : quantité consommé
Ces 2 champs nous serons utile par la suite pour calculer le coût de la souscription Azure à l’aide de l’API RateCard !
Pingback: Utilisation de l’API Billing d’Azure – Part 2 : RateCardApi | Jérémie – an other BizTalker
Pingback: Azure Billing Export – Comment recréer votre consommation Azure | Jérémie – an other BizTalker