azure 400x400

Azure – Kostenoptimierungen für “Unattached Disks”

cropped Andreas Hartig 003Veröffentlicht von

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.

Disk Performance Tier aendern
Disk Performance Tier ändern

Preis für die HDD bei circa 1 TB Kapazität:

Managed Disk HDD Premium 1024GiB
Managed Disk HDD Premium 1024GiB

Preis bei der SSD für circa 1 TB Kapazität:

Managed Disk SSD Premium 1024GiB
Managed Disk SSD Premium 1024GiB

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.

Snapshot erstellen und die Orginaldisk loeschen
Snapshot erstellen und die Orginaldisk loeschen

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

test rg disks container
test rg disks container name

storageaccountkey = 9lUL3jKT/PG2cYTiffFcUyTYTZ/28YBsQ7U59mi6YFpX2dO/gfpYYmXlikb7YBBsP3j0cZgh4qaE+AStKSGT1A==

Hier findet ihr den Storage Account Schlüssel
Hier findet ihr den Storage Account Schlüssel – diesen solltet ihr nie in Screenshots haben 🙂

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.

Disk to VHD
Disk to VHD

Danach habe ich meinen Azure Zugriffsschlüssel neu generiert. Dazu einfach auf “Schlüssel rotieren” clicken.

Schluessel routieren
Schluessel routieren

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

Kommentar hinterlassen