Wie optimiert man Kosten in Azure, das ist diese Woche einer der Hauptthemen für viele Azure DevOps Teams und Architekten.
Ich habe hier vor einigen Tagen schon ein Werkzeug gezeigt, dass euch die „verwaisten“ Resourcen in eurer Azure Umgebung finden lässt. Solltet ihr den Artikel verpasst haben, dann unbedingt hier schauen.
Häufig unterschätzt werden noch die Kosten für „Storage“ und damit „Azure Managed Disks“. In den letzten Jahren sind aber Daten in den Fokus gerückt und Compute (CPU / RAM) spielt weniger eine Rolle. Häufig fehlen „Retention Policies / Aufbewahrungsrichtlinien“ und das Problem skaliert also linear mit der Zeit. In Kombination mit Backup und Replikationen für Ausfallsicherheit, wird das sehr schnell dann auch sehr teuer.
Nun habt ihr mit Azure Budget Tools und einer Recherche oder dem oben genannten „Azure Orphan Resources“ einige Azure Managed Disks gefunden. Aber was nun? Einfach löschen? Welche Vorgaben gibt es im Unternehmen? Habt ihr keinen Eigentümer gefunden?
Es gibt einige Möglichkeiten die ihr habt, wenn löschen keine Option ist:
- Die Performance Tier reduzieren
- Ein Snapshort erstellenund die Orginaldisk löschen
- Die Azure Managed Disk in eine VHD exportieren und auf einen „cold Blob Storage“ packen.
Für diese Optionen habe ich Beispiele auf der Azure Testumgebung aus meinen anderen Blogeinträgen erstellt und zeige euch diese kurz. Dabei benutze ich verschiedene Techniken von GUI bis BASH.
Performance Tier reduzieren
Dies geht am einfachsten und ist auch am schnellsten jederzeit wieder änderbar.
Disk im Azure Resource Manager öffnen und unter „Größe und Leistung“ von z.B. der SSD Premium SKU auf Standard SSD ändern.
Preis für die HDD bei circa 1 TB Kapazität:
Preis bei der SSD für circa 1 TB Kapazität:
Mit wenigen Clicks hat man so schnell einiges gespart und kann bei Problemen auch schnell wieder auf die SSD Performance wechseln. Die Ersparnisse sind damit jeden Monat realisiert und summieren sich schnell.
Snapshot erstellen und die Orginaldisk löschen
Ähnliches lässt sich mit dem Snapshot erreichen. Hier lohnt es sich häufig, da man nur für den tatsächlich belegten Plattenplatz bezahlt, dass heißt aus einem P30 mit 1024 GiB könnten schnell nur Kosten für die tatsächlich genutzten 10 GiB werden. Quelle: https://azure.microsoft.com/de-de/pricing/details/managed-disks/
Den Weg schaut ihr euch am besten auf dem Video an. Ich lege dort einen Snapshot mit dem Namen „Momentaufnahme-Test-RG-Disk“ im HDD Storage Tier an und gebe dort sicherheitshalber den Orginalnamen mit. Danach lösche die Orginal Managed Disk.
Export in VHD und Ablage auf cold Blob storage
Der richtige Weg ist hier dies über das Skript zu tun. Anbei findet ihr den von Microsoft dafür empfohlenen Code.
#Provide the subscription Id where managed disk is created
subscriptionId="<subscriptionId>"
#Provide the name of your resource group where managed disk is created
resourceGroupName=myResourceGroupName
#Provide the managed disk name
diskName=myDiskName
#Provide Shared Access Signature (SAS) expiry duration in seconds e.g. 3600.
#Know more about SAS here: https://docs.microsoft.com/en-us/azure/storage/storage-dotnet-shared-access-signature-part-1
sasExpiryDuration=3600
#Provide storage account name where you want to copy the underlying VHD file of the managed disk.
storageAccountName=mystorageaccountname
#Name of the storage container where the downloaded VHD will be stored
storageContainerName=mystoragecontainername
#Provide the key of the storage account where you want to copy the VHD
storageAccountKey=mystorageaccountkey
#Provide the name of the destination VHD file to which the VHD of the managed disk will be copied.
destinationVHDFileName=myvhdfilename.vhd
az account set --subscription $subscriptionId
sas=$(az disk grant-access --resource-group $resourceGroupName --name $diskName --duration-in-seconds $sasExpiryDuration --query [accessSas] -o tsv)
az storage blob copy start --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-name $storageAccountName --account-key $storageAccountKey --source-uri $sas
Sammeln wir dafür die Variablen zusammen:
<subscriptionId> = 613874b9-8e33-449a-b9be-aa82d4de0631
resourceGroupName = Test-RG-Disks
diskName = Test-RG-Disks
storageAccountName=weuazurebackupstaging
storageContainerName = test-rg-disks-container
storageaccountkey = 9lUL3jKT/PG2cYTiffFcUyTYTZ/28YBsQ7U59mi6YFpX2dO/gfpYYmXlikb7YBBsP3j0cZgh4qaE+AStKSGT1A==
destinationVHDFileName = Test-RG-Disks-VHD
#Provide the subscription Id where managed disk is created
subscriptionId="613874b9-8e33-449a-b9be-aa82d4de0631"
#Provide the name of your resource group where managed disk is created
resourceGroupName=Test-RG-Disks
#Provide the managed disk name
diskName=Test-RG-Disks
#Provide Shared Access Signature (SAS) expiry duration in seconds e.g. 3600.
#Know more about SAS here: https://docs.microsoft.com/en-us/azure/storage/storage-dotnet-shared-access-signature-part-1
sasExpiryDuration=3600
#Provide storage account name where you want to copy the underlying VHD file of the managed disk.
storageAccountName=weuazurebackupstaging
#Name of the storage container where the downloaded VHD will be stored
storageContainerName=test-rg-disks-container
#Provide the key of the storage account where you want to copy the VHD
storageAccountKey=9lUL3jKT/PG2cYTiffFcUyTYTZ/28YBsQ7U59mi6YFpX2dO/gfpYYmXlikb7YBBsP3j0cZgh4qaE+AStKSGT1A==
#Provide the name of the destination VHD file to which the VHD of the managed disk will be copied.
destinationVHDFileName=Test-RG-Disks-VHD.vhd
az account set --subscription $subscriptionId
sas=$(az disk grant-access --resource-group $resourceGroupName --name $diskName --duration-in-seconds $sasExpiryDuration --query [accessSas] -o tsv)
az storage blob copy start --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-name $storageAccountName --account-key $storageAccountKey --source-uri $sas
Wenn man das aus der BASH der Azure Cloud Shell startet, dann sieht da so aus und läuft bei 32 GiB ca 1 Minute. Das animated GIF ist diesmal in Realtime, damit man keine Instant Jobs erwartet.
Danach habe ich meinen Azure Zugriffsschlüssel neu generiert. Dazu einfach auf „Schlüssel rotieren“ clicken.
Dazu gibt es auch noch zwei Übungen von Microsoft:
https://learn.microsoft.com/de-de/azure/virtual-machines/windows/find-unattached-disks
https://learn.microsoft.com/de-de/azure/virtual-machines/disks-find-unattached-portal
Und etwas Lektüre für das Routieren der Zugriffsschlüssel der Speicherkonten / Storage Accounts:
https://learn.microsoft.com/de-de/azure/storage/common/storage-account-keys-manage?tabs=azure-portal