Aus der Praxis: Azure Coding – Lokale Workbench
In modernen Cloud-Lösungen werden häufig Speicherstrukturen wie Table-, Blob- oder Queue-Storage verwendet, um die zu verarbeitenden Daten speichern. Diese Art von Speicher gehört in Microsoft Azure allerdings zum “Premium Storage”-Paket und ist daher u.a. nicht in der freien Test Subscription enthalten. Wer dieses Angebot dennoch nutzen möchte, muss einen separaten “Azure Storage Account” buchen.
Um den “teuren” Azure Speicher nicht durch entwicklungsbezogene Ressourcen unnötig zu belasten, hat Microsoft eine lokale Alternative geschaffen. Diese funktioniert exakt wie die Cloud-variante, so dass lediglich durch den Austausch des ConnectionStrings auf den Azurespeicher gewechselt werden kann.
Wie bekomme ich den lokalen Azure Storage Emulator?
- Download des Azure SDK oder als separater Installer (https://azure.microsoft.com/de-de/downloads/). Danach durchführen der Installation.
- Die Console öffnen und nach “C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator” navigieren
- Initialisieren (einmalig): AzureStorageEmulator.exe init /forceCreate (Verwendung von LocalDB)
- Starten: AzureStorageEmulator.exe start
Nun ist der Emulator einsatzbereit und kann mit dem Cloud Explorer verbunden werden.
Da der Azure Storage Emulator nun bereit ist kann der lokale Speicher in der Entwicklung genutzt werden. Um eine Verbindung aufzubauen, muss der Connectionstring “UseDevelopmentStorage=true” verwendet werden, wie nachfolgend in den AppSettings dargestellt.
<appSettings>
<add key=”StorageConnectionString” value=”UseDevelopmentStorage=true” />
<add key=”AzureFunctionQueue” value=”provisioningqueuef” />
<add key=”AzureWebJobQueue” value=”provisioningqueuew” />
</appSettings>
Mit nachfolgendem Code kann nun eine neue Queue erstellt werden – falls diese noch nicht existiert – und ein neuer Eintrag/Nachricht hinzugefügt werden. Die Funktionalität hierfür wird durch das Nuget Pakt ”WindowsAzure.Storage” (https://www.nuget.org/packages/WindowsAzure.Storage) bereitgestellt.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); // Get queue ... and create if it does not exist CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); CloudQueue queue = queueClient.GetQueueReference(targetQueue); queue.CreateIfNotExists(); // Add entry to queue queue.AddMessage(new CloudQueueMessage(modernSiteCreation));
Achtung!
Bei meinen ersten Versuchen die Queue zu erstellen und zu füllen, kam ein “400 Bad Request”. Bitte beachtet nachfolgende zwei Regeln für die Namensvergabe der Queue.
- Only lowercase letters, numbers, and dash are allowed
- Must be 3 to 63 characters
Lokale Azure Functions
Über Visual Studio 2017 kann nun ein neues “Azure Function” Projekt hinzugefügt werden. In diesem Projekt kann anschließend ein Queue Trigger hinzugefügt werden, um die Nachrichten aus der Queue automatisch abzuarbeiten.
In der Konfigurationsdatei “local.settings.json” wird nun der ConnectionString zum lokalen Storage Emulator eingetragen.
{
“IsEncrypted”: false,
“Values”: {
“AzureWebJobsStorage”: “UseDevelopmentStorage=true“,
“AzureWebJobsDashboard”: “UseDevelopmentStorage=true”
}
}
Beim ersten Debuggen der Azure Function wird darauf hingewiesen, dass die “Azure Functions-CLI-Tools” installiert werden müssen.
Nach der Installation können nun Azure Functions lokal entwickelt und getestet werden. Somit steht nun eine lokale Workbench zur Verfügung.
Der Trigger greift und die Funktion kann im Debugger analysiert werden.
Fazit:
Sowohl der Azure Storage Emulator als auch die “Azure Functions-CLI-Tools” machen einen super soliden Eindruck und erleichtern die Entwicklung erheblich. Ich kann diese lokale Workbench nur jedem empfehlen!