Drücke "Enter", um den Text zu überspringen.

Schlagwort: Optimization

Azure und PowerShell – Preise abfragen

Immer wieder ist es für Automatisierungs- oder Optimierungsthemen sinnvoll, Preise für Azure Services abzufragen – und zwar so, dass man sie automatisiert bzw. in Skripten verwerten kann.

Dazu gibt es eine recht simple Lösung – und natürlich hat sie mit PowerShell zu tun 🙂

Es gibt eine API, die man abfragen kann. Diese ist unter

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

zu erreichen. Sie liefert bei direkter Abfrage eine riesige Menge an Daten, so dass es sinnvoll ist, schon bei der Abfrage zu filtern. Außerdem muss man die Abfrage in mehreren Durchläufen verwenden, sonst kommt es ggf. zu Timeouts oder es kommenden nicht alle Daten zurück.

Das Code-Schnippselchen, dass das erledigt, sieht dann folgendermaßen aus:

$pricelistApiUrl = "https://prices.azure.com/api/retail/prices?`$filter=armRegionName eq 'westeurope' and serviceName eq 'Virtual Machines'"
$reponseSkus = @()
do
{
    $webRequest = Invoke-WebRequest -Uri $pricelistApiUrl | ConvertFrom-Json
    $pricelistApiUrl = $webRequest.NextPageLink
    $reponseSkus += $webRequest.Items
    #$pricelistApiUrl
}
while ($pricelistApiUrl -ne $null)
$vmPrices = $reponseSkus | Where-Object {($_.type -eq "Consumption") -and ($_.skuName -notlike "*Low Priority*") -and ($_.skuName -notlike "*Spot*") }|  Sort-Object armSkuName,retailPrice -Descending
$vMPrices | Export-Csv -Path "VMPrices.csv" -Encoding UTF8 -NoTypeInformation -ErrorAction SilentlyContinue # In case the CSV is still open; For German systems, use '-Delimiter ";"'<p></p>

$pricelistApiUrl = "https://prices.azure.com/api/retail/prices?`$filter=armRegionName eq 'westeurope' and serviceName eq 'Virtual Machines'" $reponseSkus = @() do { $webRequest = Invoke-WebRequest -Uri $pricelistApiUrl | ConvertFrom-Json $pricelistApiUrl = $webRequest.NextPageLink $reponseSkus += $webRequest.Items #$pricelistApiUrl } while ($pricelistApiUrl -ne $null) $vmPrices = $reponseSkus | Where-Object {($_.type -eq "Consumption") -and ($_.skuName -notlike "*Low Priority*") -and ($_.skuName -notlike "*Spot*") }| Sort-Object armSkuName,retailPrice -Descending $vMPrices | Export-Csv -Path "VMPrices.csv" -Encoding UTF8 -NoTypeInformation -ErrorAction SilentlyContinue # In case the CSV is still open; For German systems, use '-Delimiter ";"'<p></p>

Das Ganze lässt sich natürlich auch auf beliebige andere Regionen und Services oder auch auf die anderen Attribute / Spalten filtern. Allerdings werden die Preise ausschließlich in Dollar geliefert! Mehr dazu siehe:

Azure Retail Prices REST API overview | Microsoft Docs

Es gibt noch weitere API für Preise, die teilweise auch andere Funktionen, z.B. auch Währungsumrechnung, haben. Diese sind aber erstens scheinbar nicht vollständig und zweitens auch komplizierter in der Handhabung.

Viel Spaß beim Ausprobieren und Verwenden!

Schreibe einen Kommentar...