Wir haben uns bereits in einigen Artikeln mit den Azure App Services auseinandergesetzt. Nun wollen wir eine ASP.Net-Core-Frontend-App (Linux) auf dem Azure App Service hosten und mit einer verwalteten, mittels Azure Cache für Redis beschleunigten Azure SQL-Server-Datenbank integrieren.
Der Build- und Bereitstellungsprozess in GitHub.
(Bild: GitHub)
Wie üblich beginnen wir erst einmal damit, die für dieses Beispiel erforderlichen Azure-Ressourcen bereitzustellen: den App Service selbst, die Azure SQL Datenbank und den Redis Cache. Dieses Beispiel orientiert sich nahe an einem entsprechenden ASP-Quickstart der App-Services-Dokumentation.
Die Anwendungseinstellungen und Verbindungszeichenfolgen einer Web App in Azure.
(Bild: Microsoft)
Im Azure-Portal erstellen wir zunächst einen neuen App Service und wählen dabei die Variante „Web-App und Datenbank“. Es gilt nun, das Azure-Abonnement, eine vorhandene Ressourcengruppe (oder neu zu erstellende), die Region, den Laufzeitstapel „.NET 7 (STS)“ und die Datenbank-Engine „SQL Azure“ (Datenbank- und Servername werden dabei automatisch vorgeschlagen) auszuwählen. Mit „Ja“ aktivieren wir die Redis-Integration (hierbei ist ein Cachename erforderlich) und nutzen zunächst den Hosting-Plan „Basic“ (ein Upgrade ist später jederzeit möglich), der serverlos berechnet wird und bei Bedarf jederzeit skaliert.
Das „Forken“ eines öffentlichen GitHub-Repos.
(Bild: GitHub)
Das Erstellen samt SQL-Datenbank und Cache wird einige Minuten in Anspruch nehmen. Danach geht es in den Abschnitt „Konfiguration“ der Web App zu den automatisch erstellten „Anwendungseinstellungen“ und/oder „Verbindungszeichenfolgen“. Hier notieren wir die „Namen“ für die Anwendungseinstellung „AZURE_REDIS_CONNECTIONSTRING“ sowie die „Verbindungszeichenfolge“ „AZURE_SQL_CONNECTIONSTRING“. Die zugehörigen Werte lassen sich jeweils mit einem Klick auf das Auge-Symbol sichtbar machen oder ändern.
Das Code-Beispiel für diesen Beitrag stammt aus Microsofts GitHub-Repository Azure-Samples . Es gibt, wie wir schon in anderen Beiträgen demonstriert haben, zahlreiche Möglichkeiten, individuellen Code auf einer Azure Web App bereitzustellen – mit und ohne Continuous Integration. Der Code lässt sich beispielsweise vom öffentlichen Microsoft-GitHub-Repo als Zip-File herunterladen und lokal entpacken oder mittels git in ein lokales Verzeichnis klonen, sofern git installiert ist.
Im Anschluss ist es möglich, die Web App im Bereitstellungscenter mit dem Quellcode-Anbieter „Git (lokal)“ remote an das lokale Arbeitsverzeichnis anzubinden und Änderungen via git push zu veröffentlichen. Für dieses Beispiel haben wir uns hingegen für die populäre Kombination von GitHub als Quellcode-Repository und GitHub Actions als Workflow-Engine (Build-Dienst) entschieden. Der Quellcode muss dann gar nicht erst heruntergeladen werden. Da es sich um ein öffentliches Repo handelt, kann man direkt mit einem Fork arbeiten.
Das initiale Bereitstellen der Web App aus dem Deployment Center.
(Bild: Microsoft)
Wir navigieren also zu https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore und klicken rechts oben auf „Fork“. GitHub schickt den User – sofern angemeldet – direkt in dessen GitHub-Konto und schlägt einen passenden Repository-Namen vor. Nun gilt es noch, unten auf die grüne Schaltfläche „Create fork“ zu klicken. Im „geforkten“ Repository erscheint dann initial die Meldung „This branch is up to date with Azure-Samples/msdocs-app-service-sqldb-dotnetcore:main.“
Die Deployment-Protokolle im Bereitstellungscenter.
(Bild: Microsoft)
Jetzt müssen wir nur noch im Bereitstellungscenter der Web App als Code-Quelle „GitHub“ auswählen (GitHub Actions wird dann automatisch als Build-Anbieter verwendet) und uns beim GitHub-Konto anmelden. Wir wählen das eben geforkte Repository mit dem Branch „main“ als Quelle und klicken auf „Speichern“, wodurch die initiale Bereitstellung der Web App ausgelöst wird.
Das Anpassen der appsetting.json direkt in der Online-Version von VS Code.
(Bild: GitHub)
Die Bereitstellungsprotokolle lassen sich im Tab „Protokolle“ live mitverfolgen – der Build-Prozess wiederum in GitHub, wenn man den Link in den Bereitstellungsprotokollen betätigt.
Aus GitHub heraus ist öffnen wir danach die Datei „DotNetCoreSqlDb/appsettings.json“ in der Browser-Version von VS Code. Dazu gilt es, einfach die Datei im Code-Browser von GitHub zu markieren und die Taste „.“ Zu betätigen. Hier muss der Bezeichner „MyDbConnection“ in „AZURE_SQL_CONNECTIONSTRING“, also der vom App Service zuvor generierten Verbindungszeichenfolge, geändert werden.
Der Azure_SQL_Connectionsstring muss auch in der Program.cs angepasst warden.
(Bild: GitHub)
Auf die gleiche Weise öffnen wir die Datei „DotNetCoreSqlDb/Program.cs“ und ändern in der Methode „options.UseSqlServer“-Methode den Namen „MyDbConnection“ zu „AZURE_SQL_CONNECTIONSTRING“, da hier der Name der Verbindungszeichenfolge von der Beispielanwendung verwendet wird.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Das Anbinden eines Redis-Cache erfolgt über die erzeugten Azure-Redis-Verbindungszeichenfolge.
(Bild: Microsoft)
Im Code-Beispiel enthalten ist die „leere“ Methode builder.Services.AddDistributedMemoryCache(); – diese muss gelöscht und durch folgenden Beispiel-Code ersetzt werden, …
… um damit den Code zur Nutzung eines In-Memory-Caches für den Redis-Cache in Azure vorzubereiten. Das geschieht mit Hilfe des oben notierten AZURE_REDIS_CONNECTIONSTRING.
Das Installieren des Entity Framework „Core-Tools“ im Rahmen des GitHub-Actions-Workflows
(Bild: GitHub)
Nun will noch der Workflow für die Bereitstellung in GitHub Actions angepasst werden. Wir öffnen dazu die Datei .github/workflows/main_<name-ihrer-app>.yml, welche vom Erstellungs-Assistenten des App Service erstellt wurde, im Online-Editor von VS Code. Hier muss man unterhalb des Schrittes „dotnet publish“ einen weiteren Schritt hinzufügen, der das Entity Framework Core-Tool mit dem Kommando „dotnet tool install -g dotnet-ef“ installiert.
An dieser Stelle wird noch ein weiterer Schritt benötigt. Dieser generiert im Bereitstellungspaket ein passendes Datenbankmigrationspaket mittels:
dotnet ef migrations bundle --runtimelinux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate.
Das Erweitern des Workflows mit dem Migration-Bundle.
(Bild: GitHub)
Hierbei handelt es sich um eine eigenständige Datei, die sich dann später in der Produktionsumgebung (z. B. mittels ssh-Zugang) ausführen lässt. Sie dient dem Anpassen des Datenbankschemas und funktioniert auch, wenn das .NET SDK nicht installiert ist, denn der Linux-Container im App Service enthält nur die .NET-Runtime, nicht aber das .NET SDK.
Das Comitten der jüngsten Anpassungen aus der GitHub-Extension von VS Code.
(Bild: GitHub)
Nun ist es möglich, die Änderungen aus GitHub erneut zu veröffentlichen. Hierfür klicken wir in der Browser-Version von VS Code auf die Extension „Quellcodeverwaltung“, denken uns eine Commit-Message aus und klicken auf „Commit und Push“.
Die Bereitstellungsprotokolle im App-Services-Deployment-Center.
(Bild: Microsoft)
Bei Erfolg leitet VS Code wieder an das GitHub-Repository zurück, in dem man das Ausführen der GitHub-Aktion verfolgen kann – genauso übrigens, wie in den Bereitstellungscenter-Protokollen der Web App.
In der Workflow-Datei sind unübersehbar zwei separate Phasen „build“ und „deploy“ definiert. Daher dauert es durchaus ein paar Minuten, bis die GitHub-Ausführung den Status „Abgeschlossen“ hat.
Die Entwicklertools erlauben auch SSH-Zugang zur Web-App, wenn Diese durch die Network-Injektion geschützt ist.
(Bild: Microsoft)
Da der Zugang zur SQL-Datenbank durch das virtuelle Netzwerk geschützt ist, können wir zum Ausführen der Dotnet-Datenbankmigration eine SSH-Sitzung zum App Service-Container herstellen. Hierfür ist es notwendig, im Azure-Portal der Web App im Abschnitt „Entwicklungstools“ auf „SSH“ und dann auf „Los“ zu klicken.
Zum Generieren des Datenbank-Schemas müssen wir mit …
/home/site/wwwroot
… in das Site-Root der App wechseln und dann dort das vom eben durchgeführten Workflow bereitgestellte Migrationspaket ausführen:
./migrate
Anschließend sollte sich die Linux-basierte .Net-Core-Web-Site mit MS-SQL-Server-Datenbank-Backend und Redis-Cache problemlos aufrufen lassen.