In Microsoft Azure gibt es den neuen App Plan PremiumV2. Neuste Funktionen sind vor allem bessere Performance der aktuellen CPU Generation, sowie SSD Speicher – yeah. Hört sich vielversprechend an, also gleich mal ausprobieren.
Doch die erste Hürde kommt gleich, ich gehe im App Service Plan auf “Scale up”… Aber wo ist PremiumV2?

Schnell stellt sich heraus, dass PremiumV2 nur in neuen App Plänen zur Verfügung steht. Zusätzlich muss auch eine neue Resource Group angelegt werden.
Wie bekomme ich aber meine bestehende Anwendung möglichst einfach auf den neuen App Plan?
Eine Variante ist natürlich auf der grünen Wiese zu beginnen, jedoch gibt es für bestehende einen eleganteren Weg.
App klonen
Es gibt einen PowerShell Befehl, um eine App zu klonen. Hintergedanke davon ist zwar primär die Erstellung für mehrere Instanzen, um diese dann mithilfe von Traffic Manager zu skalieren, lässt sich aber auch für unsere Anforderung hervorragend verwenden.
Nächste Hürde – dies geht nur, wenn der (bestehende) App Plan bereits auf Premium läuft. Sollte das nicht der Fall sein, kann man für diesen Zweck, den App Plan temporär hochskalieren (Scale up) und danach wieder reduzieren.
Vorbereitung
Da es sich ja um eine bestehende App handelt, werden ja auch Benutzer darauf arbeiten. Der Klon kann quasi parallel erzeugt werden, jedoch sollten Sie entsprechend für die Umstellung auf die neue URL bzw. neue IP entsprechend vorbereitet sein. Konkret:
- Traffic Manager Profil anpassen und “Alt” auf “Neu” schwenken
- DNS A oder CNAME Eintrag vor der Umstellung auf eine TTL (Time-to-live) auf 5 Minuten reduzieren (Standard 2 Tage), anschließend Eintrag ändern.
- Möglichst eine Niedriglastzeit verwenden und die möglichst nur Read-only Operationen während der Zeit zulassen.
Vorgehen
- Neue Resource Group anlegen, mit der richtigen Location
- Neuen App Plan in der zuvor erzeugten Resource Group anlegen, auf PremiumV2
- Per PowerShell den Quell App Service in einer Variable speichern
- Per PowerShell den Ziel App Service erzeugen und dabei den Parameter -SourceWebApp angeben
Hier der “Zweizeiler” – achja, das ganze geht entweder per Azure Cloud Shell, oder mithilfe vom AzureRM PowerShell Modul:
# Optional # Install-Module AzureRM -AllowClobber #Get new App Service Plan (Already PremiumV2) $AppPlan = Get-AzureRMAppServicePlan -ResourceGroupName DestinationAzureResourceGroup -Name NewAppServicePlan #Get clone source App Service $SourceApp = Get-AzureRmWebApp -ResourceGroupName SourceAzureResourceGroup -Name source-webapp #Clone # Parameter -IncludeSourceWebAppSlots didn't work for me. I assume it only works when deploying into a different region, maybe because of the new URL $destapp = New-AzureRmWebApp -ResourceGroupName DestinationAzureResourceGroup -Name dest-webapp -Location "West Europe" -AppServicePlan $AppPlan.Name -SourceWebApp $SourceApp
Die letzte Aktion kann mehrere Minuten dauern, je nachdem wie groß die App ist.
Abschluss
Sobald die App geklont wurde, am besten den App Service über die neue URL aufrufen und den Zugriff testen. Wenn das alles funktioniert, kann die TTL im DNS wieder auf 2 Tage gestellt werden, Traffic Manager Profil der Endpunkt hinzugefügt werden etc.
Ich konnte mithilfe des neuen App Service Plans deutliche Performance Verbesserungen feststellen, das vermutlich primär an den SSD’s liegt – in meinem Fall. Diese Anwendung hat viele IOPS auf das Dateisystem.
Referenz
- Azure App Service App Cloning Using PowerShell https://docs.microsoft.com/en-us/azure/app-service/app-service-web-app-cloning
- Azure App Service Premium V2 in Public Preview https://azure.microsoft.com/en-us/blog/azure-app-service-premium-v2-in-public-preview/