Introduction to the Azure Pricing API including examples

Introduction to the Azure Pricing API including examples

Last week Microsoft released an unauthenticated API for getting price information for all Azure services into public preview. Previously you could only get prices from the pricing calculator or the portal.

The availability of the API opens up a lot of possibilities for pricing analysis and comparison tools. Pricing for Azure services can vary from region to region, so apps which support comparing prices across regions provide at least one use case for the new API.

The endpoint is https://prices.azure.com/api/retail/prices and below I’ll compare API output to a few examples from the pricing calculator.

Virtual Machines

Below we see from the pricing calculator that a standard Linux F4 VM based in North Europe costs $0.226 per hour.

No alt text provided for this image

While the output from the pricing API for the same VM is below.

No alt text provided for this image

We can see the prices match, both being $0.226 per hour (see line 2, 4 and 18 above). Note the API currently only supports USD.

The type highlighted on line 19 is Consumption which is the equivalent of pay as you go option in the price calculator. Other possible types include Reservation and DevTestConsumption.

The JSON for the same VM on Windows is very similar but we can see that ‘Windows’ is appended into the productName field (line 13).

No alt text provided for this image

Lets take a look a what reservation prices look like. Reservation pricing if you don’t know allows you to get a discount on your VM compute costs by buying compute time in advance in 1 or 3 year blocks. Reservation pricing can be a great way to reduce your VM cost footprint if you have steady and predictable workloads.

Here’s the Linux VM from above but with 1 year reserved pricing.

No alt text provided for this image

We can see a price of $0.1542 per hour and here’s the equivalent entry in the price API.

No alt text provided for this image

Note the reservation term is 1 year as shown on line 4. The price on line 5 in this case is $1351, this is the per year cost. The calculation is 8760 (hours per year) * $0.1542 = 1350.792 and then rounded up. The unitOfMeasure on line 19 says 1 hour but the price given is per year so watch out for this.

Cosmos DB

Cosmos DB pricing can be confusing sometimes and I did find a number of entries in the price API that I couldn’t link back to the pricing calculator and vice versa. This could be a consequence of the API being in preview or more likely some misunderstanding on my side.

Below shows the pricing calculator for a standard provisioned Cosmos DB in North Europe with the multiple region write option set.

No alt text provided for this image

And the equivalent in the pricing API is below. Note the meterName and skuName fields which are the main differentiators to single region write provisioned Cosmos databases.

No alt text provided for this image

Storage

As a final example, shown below is the pricing calculator for cool blob storage with geo-zone-redundant storage (GZRS) redundancy based in the North Europe region. We can see the estimated price is $0.2 per 10,000 write operations.

No alt text provided for this image

And here’s the corresponding entry in the price API… Notice meterName explicitly calling out that this entry is for cool gzrs write operations. Also note the unitOfMeasure field (line 18) which shows 10k.

No alt text provided for this image

Price details for operations such as read and list and create container are in their own line item so to get an all in view of blob storage prices you’ll need to examine multiple entries.

Let’s now look at how we can pull out only specific prices we care about.

Filtering the Azure Price API

Unfiltered the base API URL just returns all prices for all services across all regions in batches of 100. Thankfully a number of filters can be applied using OData filter expressions. According to Microsoft…

No alt text provided for this image

This gives us a good bit of query power. Microsoft doesn’t give examples of using these filters but if you’ve used OData you'll be able to figure things out. Not all OData expressions will be supported on the API but some examples which do work are below. Note, while filter names are case insensitive the values to search for are case sensitive.

Equals filter (single)

The basic syntax to match on a single filter is $filter=FILTER eq ‘FILTERVALUE’. For example to only return services for the northeurope region we can query the following URL:

https://prices.azure.com/api/retail/prices?$filter=ArmRegionName%20eq%20%27northeurope%27

Equals filter (multiple)

If we want to search on multiple filters we just use the and/or operators. Eg. $filter=FILTER1 eq ‘FILTER1VALUE’ and FILTER2 eq ‘FILTER2VALUE’. For example to only return virtual machine pricing in northeurope we can hit the following URL:

https://prices.azure.com/api/retail/prices?$filter=ArmRegionName%20eq%20%27northeurope%27%20and%20serviceName%20eq%20%27Virtual%20Machines%27

Not equals

To return entries not equal to a value use the ne operator eg. $filter=FILTER ne ‘FILTERVALUE’. For example to get prices for all services except virtual machines we can use the following URL:

https://prices.azure.com/api/retail/prices?$filter=serviceName%20ne%20%27Virtual%20Machines%27

Startwith/Endswith filter

Find prices for all services whose region ends with ‘europe’

https://prices.azure.com/api/retail/prices?$filter=endswith(armRegionName,%20%27europe%27)

Barry Brandenburg

Global Product Manager VMware at Leaseweb/Marketing/Strategy Professional | Cloud | SaaS | MSP | B2B | Entrepreneurial | Visionary Leader | AI Enthusiast

4y

Dave, thanks for sharing.

To view or add a comment, sign in

Others also viewed

Explore topics