Tutorial: Bereitstellen einer ASP.NET Core- und Azure SQL-Datenbank-App in Azure App Service

In diesem Tutorial erfahren Sie, wie Sie eine datengestützte ASP.NET Core-Web-App in Azure App Service bereitstellen und eine Verbindung mit einer Azure SQL-Datenbank-Instanz herstellen. Darüber hinaus stellen Sie eine Azure Cache for Redis bereit, um den Zwischenspeicherungscode in Ihrer Anwendung zu aktivieren. Azure App Service ist ein hochgradig skalierbarer Webhostingdienst mit Self-Patching, der Apps problemlos unter Windows oder Linux bereitstellen kann. Obgleich in diesem Tutorial eine ASP.NET Core 7.0-App verwendet wird, ist der Prozess für andere Versionen von ASP.NET Core und ASP.NET Framework identisch.

Für dieses Tutorial ist Folgendes erforderlich:

Beispielanwendung

Um die in diesem Tutorial verwendete Beispielanwendung zu erkunden, laden Sie sie aus dem Repository https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore herunter, oder klonen Sie sie mit dem folgenden Git-Befehl:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

1. Erstellen des App Service, der Datenbank und des Caches

In diesem Schritt erstellen Sie die Azure-Ressourcen. Die in diesem Tutorial ausgeführten Schritte erstellen eine Reihe standardmäßig sicherer Ressourcen, die App Service, Azure SQL-Datenbank und Azure Cache umfassen. Für den Erstellungsprozess geben Sie Folgendes an:

  • Den Namen für die Web-App. Dieser Name wird als Teil des DNS-Namens für Ihre Web-App im Format https://<app-name>.azurewebsites.net verwendet.
  • Die Region für die physische Ausführung der App in der Welt
  • Der Runtimestapel für die App. Hier wählen Sie die Version von .NET aus, die für Ihre App verwendet werden soll.
  • Der Hostingplan für die App. Dies ist der Tarif, der die Features und Skalierungskapazität für Ihre App enthält.
  • Die Ressourcengruppe für die App. Mit einer Ressourcengruppe können Sie (in einem logischen Container) alle für die Anwendung benötigten Azure-Ressourcen gruppieren.

Melden Sie sich beim Azure-Portal an, und führen Sie die folgenden Schritte aus, um Ihre Azure App Service-Ressourcen zu erstellen.

Schritt 1: Im Azure-Portal:

  1. Geben Sie auf der Suchleiste oben im Azure-Portal „Web App Datenbank“ ein.
  2. Wählen Sie das Element mit der Bezeichnung Web-App + Datenbank unter der Überschrift Marketplace aus. Sie können auch direkt zum Erstellungs-Assistenten navigieren.

A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.

Schritt 2: Füllen Sie das Formular auf der Seite Web-App und Datenbank erstellen wie folgt aus.

  1. Ressourcengruppe → Wählen Sie die Option Neu erstellen aus, und verwenden Sie einen Namen wie msdocs-core-sql-tutorial.
  2. Region → Eine beliebige Azure-Region in Ihrer Nähe.
  3. Namemsdocs-core-sql-XYZ, wobei XYZ für drei beliebige Zeichen steht. Dieser Name muss innerhalb von Azure eindeutig sein.
  4. Runtimestapel.NET 7 (STS).
  5. Hinzufügen von Azure Cache for Redis?Ja.
  6. HostingplanBasic. Wenn Sie bereit sind, können Sie später auf einen Produktionstarif hochskalieren.
  7. SQLAzure ist standardmäßig als Datenbank-Engine ausgewählt. Azure SQL-Datenbank ist eine vollständig verwaltete PaaS-Datenbank-Engine (Platform-as-a-Service), die immer auf der neuesten stabilen Version von SQL Server ausgeführt wird.
  8. Klicken Sie auf Überprüfen + erstellen.
  9. Wenn die Überprüfung abgeschlossen ist, wählen Sie Erstellen aus.

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

Schritt 3: Die Durchführung der Bereitstellung dauert einige Minuten. Wählen Sie nach Abschluss der Bereitstellung die Schaltfläche Zu Ressource wechseln aus. Sie werden direkt zur App Service App weitergeleitet, aber die folgenden Ressourcen werden erstellt:

  • Ressourcengruppe → Der Container für alle erstellten Ressourcen.
  • App Service-Plan → Definiert die Berechnungsressourcen für App Service. Ein Linux-Plan im Basic-Tarif wird erstellt.
  • App Service → Stellt Ihre App dar und wird im App Service Plan ausgeführt.
  • Virtuelles Netzwerk → Integriert mit der App Service App und isoliert den Backend-Netzwerkdatenverkehr.
  • Private Endpunkte → Access-Endpunkte für den Datenbankserver und den Redis-Cache im virtuellen Netzwerk.
  • Netzwerkschnittstellen → Stellt private IP-Adressen dar, eine für jeden privaten Endpunkt.
  • Azure SQL-Datenbankserver → Nur von hinter seinem privaten Endpunkt aus zugänglich.
  • Azure SQL-Datenbank → Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
  • Azure Cache for Redis → Nur von hinter seinem privaten Endpunkt aus zugänglich.
  • Privates DNS Zonen → Aktivieren der DNS-Auflösung des Datenbankservers und des Redis-Caches im virtuellen Netzwerk.

A screenshot showing the deployment process completed.

2. Überprüfen von Verbindungszeichenfolgen

Der Erstellungsassistent hat bereits Verbindungszeichenfolgen für die SQL-Datenbank und den Redis-Cache generiert. Suchen Sie in diesem Schritt nach der generierten Verbindungszeichenfolge zur späteren Verwendung.

Schritt 1: Wählen Sie auf der App Service-Seite im Menü auf der linken Seite „Konfiguration“ aus.

A screenshot showing how to open the configuration page in App Service.

Schritt 2:

  1. Scrollen Sie nach unten auf der Seite, und suchen Sie im Abschnitt Verbindungszeichenfolgen nach AZURE_SQL_CONNECTIONSTRING. Diese Zeichenfolge wurde vom Erstellungsassistenten aus der neuen SQL-Datenbank generiert. Um Ihre Anwendung einzurichten, benötigen Sie nur diesen Namen.
  2. Darüber hinaus finden Sie AZURE_REDIS_CONNECTIONSTRING im Abschnitt Anwendungseinstellungen. Diese Zeichenfolge wurde vom Erstellungsassistenten aus dem neuen Redis-Cache generiert. Um Ihre Anwendung einzurichten, benötigen Sie nur diesen Namen.
  3. Wenn Sie möchten, können Sie rechts neben jeder Einstellung die Schaltfläche Bearbeiten auswählen und deren Wert anzeigen oder kopieren. Später ändern Sie Ihre Anwendung so, dass AZURE_SQL_CONNECTIONSTRING und AZURE_REDIS_CONNECTIONSTRING verwendet werden.

A screenshot showing how to create an app setting.

3. Bereitstellen von Beispielcode

In diesem Schritt konfigurieren Sie die GitHub-Bereitstellung mithilfe von GitHub Actions. Es ist nur eine der vielen Möglichkeiten, um App Service bereitzustellen, aber auch eine hervorragende Möglichkeit, eine kontinuierliche Integration in Ihren Bereitstellungsprozess zu haben. Standardmäßig startet jede git push in Ihrem GitHub-Repository die Build- und Bereitstellungsaktion.

Schritt 1: In einem neuen Browserfenster:

  1. Melden Sie sich bei Ihrem GitHub-Konto an.
  2. Navigiere zu https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
  3. Wählen Sie Fork aus.
  4. Wählen Sie Fork erstellen aus.

A screenshot showing how to create a fork of the sample GitHub repository.

Schritt 2: Wählen Sie auf der App Service-Seite im Menü auf der linken Seite Bereitstellungscenter aus.

A screenshot showing how to open the deployment center in App Service.

Schritt 3: Auf der Seite „Bereitstellungscenter“:

  1. Wählen Sie in Quelle die Option GitHub aus. Standardmäßig wird GitHub Actions als Buildanbieter ausgewählt.
  2. Melden Sie sich bei Ihrem GitHub-Konto an und folgen Sie der Aufforderung, Azure zu autorisieren.
  3. Wählen Sie in Organisation Ihr Konto aus.
  4. Wählen Sie unter Repository den Wert msdocs-app-service-sqldb-dotnetcore aus.
  5. Wählen Sie in Branch die Option Hauptbereich aus.
  6. Wählen Sie im oberen Menü Speichern aus. App Service committet eine Workflowdatei in das ausgewählte GitHub-Repository im .github/workflows-Verzeichnis.

A screenshot showing how to configure CI/CD using GitHub Actions.

Schritt 4: Öffnen Sie auf der GitHub-Seite des geforkten Beispiels Visual Studio Code im Browser, indem Sie die .-Taste drücken.

A screenshot showing how to open the Visual Studio Code browser experience in GitHub.

Schritt 5: In Visual Studio Code im Browser:

  1. Öffnen Sie DotNetCoreSqlDb/appsettings.json im Explorer.
  2. Ändern Sie den Namen MyDbConnection der Verbindungszeichenfolge in AZURE_SQL_CONNECTIONSTRING, was der zuvor in App Service erstellten Verbindungszeichenfolge entspricht.

A screenshot showing connection string name changed in appsettings.json.

Schritt 6:

  1. Öffnen Sie DotNetCoreSqlDb/Program.cs im Explorer.
  2. Ändern Sie in der options.UseSqlServer-Methode den Namen MyDbConnection der Verbindungszeichenfolge in AZURE_SQL_CONNECTIONSTRING. Hier wird die Verbindungszeichenfolge von der Beispielanwendung verwendet.
  3. Entfernen Sie die builder.Services.AddDistributedMemoryCache();-Methode, und ersetzen Sie sie durch den folgenden Code. Dabei wird Ihr Code von der Verwendung eines In-Memory-Caches in den Redis-Cache in Azure geändert, und dies geschieht mithilfe von AZURE_REDIS_CONNECTIONSTRING, welches Sie zuvor zur späteren Verwendung gesucht haben.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

A screenshot showing connection string name changed in Program.cs.

Schritt 7:

  1. Öffnen Sie .github/workflows/main_msdocs-core-sql-XYZ im Explorer. Diese Datei wurde vom Erstellungs-Assistenten in App Service erstellt.
  2. Fügen Sie unter dem Schritt dotnet publish einen Schritt hinzu, um das Entity Framework Core-Tool mit dem Befehl dotnet tool install -g dotnet-ef --version 7.0.14 zu installieren.
  3. Fügen Sie unter dem neuen Schritt einen weiteren Schritt hinzu, um ein Datenbankmigrationspaket im Bereitstellungspaket zu generieren: dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate. Das Migrationspaket ist eine eigenständige ausführbare Datei, die Sie in der Produktionsumgebung ausführen können, ohne das .NET SDK zu benötigen. Der Linux-Container in App Service verfügt nur über die .NET-Runtime, nicht über das .NET SDK.

A screenshot showing steps added to the GitHub workflow file for database migration bundle.

Schritt 8:

  1. Wählen Sie die Quellsteuerungserweiterung aus.
  2. Geben Sie im Textfeld eine Commitnachricht ein, z. B. Configure DB & Redis & add migration bundle.
  3. Wählen Sie dann Commit und Push aus.

A screenshot showing the changes being committed and pushed to GitHub.

Schritt 9: Zurück auf der Seite „Bereitstellungscenter“ im Azure-Portal:

  1. Wählen Sie Protokolle aus. Eine neue Bereitstellungsausführung wurde bereits durch Ihre committeten Änderungen gestartet.
  2. Wählen Sie in dem Protokollelement für die Bereitstellungsausführung den Eintrag Build/Deploy Logs mit dem neuesten Zeitstempel aus.

A screenshot showing how to open deployment logs in the deployment center.

Schritt 10: Sie werden zu Ihrem GitHub-Repository weitergeleitet und sehen, dass die GitHub-Aktion ausgeführt wird. Die Workflowdatei definiert zwei separate Phasen, Erstellen und Bereitstellen. Warten Sie, bis die GitHub-Ausführung den Status Abgeschlossen anzeigt. Das dauert ein paar Minuten.

A screenshot showing a GitHub run in progress.

4. Generieren des Datenbankschemas

Mit der durch das virtuelle Netzwerk geschützten SQL-Datenbank besteht die einfachste Möglichkeit zum Ausführen von dotnet-Datenbankmigrationsvorgängen in einer SSH-Sitzung mit dem App Service-Container.

Schritt 1: Wählen Sie auf der App Service-Seite im Menü auf der linken Seite SSH aus.

A screenshot showing how to open the SSH shell for your app from the Azure portal.

Schritt 2: Im SSH-Terminal:

  1. Führen Sie cd /home/site/wwwroot aus. Hier finden Sie alle Ihre bereitgestellten Dateien.
  2. Führen Sie das vom GitHub-Workflow generierte Migrationspaket mit ./migrate aus. Wenn dies erfolgreich ist, stellt App Service erfolgreich eine Verbindung mit der SQL-Datenbank her. Nur Änderungen an Dateien in /home können über den Neustart der App hinaus beibehalten werden. Änderungen außerhalb von /home bleiben nicht erhalten.

A screenshot showing the commands to run in the SSH shell and their output.

5. Navigieren zur App

Schritt 1: Auf der App Service-Seite:

  1. Wählen Sie im Menü auf der linken Seite die Option Übersicht aus.
  2. Wählen Sie die URL Ihrer App aus. Sie können auch direkt zu https://<app-name>.azurewebsites.net navigieren.

A screenshot showing how to launch an App Service from the Azure portal.

Schritt 2: Fügen Sie der Liste einige Aufgaben hinzu. Glückwunsch! Sie führen eine sichere datengesteuerte ASP.NET Core-App in Azure App Service aus.

A screenshot of the .NET Core app running in App Service.

Tipp

Die Beispielanwendung implementiert das Cache-Aside-Muster. Wenn Sie eine Datenansicht zum zweiten Mal besuchen oder dieselbe Seite nach Datenänderungen erneut laden, wird die Verarbeitungszeit auf der Webseite als viel schneller angezeigt, da die Daten aus dem Cache und nicht aus der Datenbank geladen werden.

6. Streamen von Diagnoseprotokollen

Azure App Service erfasst alle Nachrichten, die an der Konsole protokolliert werden, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Die Beispiel-App gibt Konsolenprotokollmeldungen an jedem ihrer Endpunkte aus, um diese Funktion zu veranschaulichen.

Schritt 1: Auf der App Service-Seite:

  1. Wählen Sie im linken Menü App Service-Protokolle aus.
  2. Wählen Sie unter Anwendungsprotokollierung die Option Dateisystem aus.

A screenshot showing how to enable native logs in App Service in the Azure portal.

Schritt 2: Wählen Sie im Menü auf der linken Seite die Option Protokollstream aus. Sie sehen die Protokolle für Ihre App, einschließlich Plattformprotokolle und Protokolle innerhalb des Containers.

A screenshot showing how to view the log stream in the Azure portal.

7. Bereinigen von Ressourcen

Wenn Sie fertig sind, können Sie alle Ressourcen aus Ihrem Azure-Abonnement löschen, indem Sie die Ressourcengruppe löschen.

Schritt 1: In der Suchleiste oben im Azure-Portal:

  1. Geben Sie den Ressourcengruppennamen ein.
  2. Wählen Sie die Ressourcengruppe aus.

A screenshot showing how to search for and navigate to a resource group in the Azure portal.

Schritt 2: Wählen Sie auf der Seite „Ressourcengruppe“ die Option Ressourcengruppe löschen aus.

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

Schritt 3:

  1. Geben Sie den Namen der Ressourcengruppe ein, um Ihre Löschung zu bestätigen.
  2. Klicken Sie auf Löschen.

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal.:

Häufig gestellte Fragen

Wie viel kostet diese Einrichtung?

Die Preise für die Erstellungsressourcen sind wie folgt:

  • Der App Service-Plan wird im Tarif Basic erstellt und kann hoch- oder herunterskaliert werden. Informationen dazu finden Sie unter App Service – Preise.
  • Die Azure SQL-Datenbank wird im universellen, serverlosen Tarif auf Hardware der Standardserie mit minimalen Kernen erstellt. Es fallen geringe Kosten an, und sie kann auf andere Regionen verteilt werden. Sie können die Kosten sogar noch weiter minimieren, indem Sie ihre maximale Größe verringern, oder Sie können sie hochskalieren, indem Sie die bedienende Dienstebene, die Computeebene, die Hardwarekonfiguration, die Anzahl der Kerne, die Datenbankgröße und die Zonenredundanz anpassen. Siehe Preise für Azure SQL-Datenbank.
  • Die Azure Cache for Redis wird in der Ebene Basic mit der minimalen Cachegröße erstellt. Diese Ebene ist mit geringen Kosten verbunden. Sie können sie auf leistungsstärkere Ebenen für eine höhere Verfügbarkeit, für Clustering und andere Features hochskalieren. Siehe Azure Cache for Redis: Preise.
  • Das virtuelle Netzwerk hat keine Gebühr, es sei denn, Sie konfigurieren zusätzliche Funktionen, z. B. Peering. Siehe Azure Virtual Network Preise.
  • Die private DNS-Zone verursacht eine kleine Gebühr. Siehe Azure DNS-Preise.

Wie stelle ich mit anderen Tools eine Verbindung mit dem Azure SQL-Datenbank-Server her, der hinter dem virtuellen Netzwerk gesichert ist?

  • Für den einfachen Zugriff aus einem Befehlszeilentool können Sie sqlcmd über das SSH-Terminal der App ausführen. sqlcmd ist im Container der App nicht enthalten, daher ist eine manuelle Installation erforderlich. Denken Sie daran, dass der installierte Client nicht über App-Neustarts hinweg beibehalten wird.
  • Um eine Verbindung über einen SQL Server Management Studio-Client oder über Visual Studio herzustellen, muss sich Ihr Computer innerhalb des virtuellen Netzwerks befinden. Es könnte beispielsweise eine Azure-VM sein, die mit einem der Subnetze verbunden ist, oder ein Computer in einem lokalen Netzwerk, das über eine Standort-zu-Standort-VPN-Verbindung mit dem virtuellen Azure-Netzwerk verfügt.

Wie funktioniert die lokale App-Entwicklung mit GitHub Actions?

Nehmen Sie die automatisch generierte Workflowdatei von App Service als Beispiel; jede git push startet eine neue Build- und Bereitstellungsausführung. Aus einem lokalen Klon des GitHub-Repositorys können Sie die gewünschten Updates zu GitHub pushen. Beispiel:

git add .
git commit -m "<some-message>"
git push origin main

Gewusst wie: Debuggen von Fehlern während der GitHub Actions-Bereitstellung

Wenn ein Schritt in der automatisch generierten GitHub-Workflowdatei fehlschlägt, versuchen Sie, den fehlerhaften Befehl zu ändern, um eine ausführlichere Ausgabe zu generieren. So können Sie beispielsweise eine ausführlichere Ausgabe von jedem der dotnet-Befehle abrufen, indem Sie die -v-Option hinzufügen. Committen und pushen Sie Ihre Änderungen, um eine weitere Bereitstellung in App Service auszulösen.

Nächste Schritte

Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie Ihre App mit einer benutzerdefinierten Domäne und einem Zertifikat schützen.

Oder sehen Sie sich weitere Ressourcen an: