Lernprogramm: Bereitstellen einer ASP.NET Core-App und -Datenbank in Azure-Container-Apps mithilfe von GitHub-Aktionen
In diesem Lernprogramm erfahren Sie, wie Sie eine ASP.NET Core-App und SQL-Datenbank mit Visual Studio- und GitHub-Aktionen in Azure-Container-Apps bereitstellen. Außerdem erfahren Sie, wie Sie Entity Framework-Migrationen und Datenbankupdates in GitHub-Aktionen verwalten, obwohl die Konzepte auch auf andere CI/CD-Tools und -Umgebungen angewendet werden können.
Voraussetzungen
Sie benötigen Visual Studio 2022 mit den installierten Workloads ASP.NET und Webentwicklung und Azure-Entwicklung.
Wenn Sie Visual Studio bereits installiert haben:
- Installieren Sie die neuesten Updates in Visual Studio, indem Sie Hilfe>Nach Updates suchen auswählen.
- Überprüfen Sie, ob die Workloads ASP.NET- und Webentwicklung und Azure-Entwicklung installiert sind, indem Sie Extras>Tools und Features abrufen auswählen.
Lokales Einrichten der Beispiel-App
Verwenden Sie die TODO-Beispiel-App, um dieses Tutorial zu begleiten. Klonen Sie die App von GitHub mit dem folgenden Befehl:
git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore
Navigieren Sie in den Projektordner, und öffnen Sie die DotNetCoreSqlDb.sln
Projektmappe in Visual Studio.
Die TODO-Anwendung ist einsatzbereit, Sie müssen jedoch eine Verbindung mit dem localdb
SQL Server herstellen, der in Visual Studio verfügbar ist. Wenn Sie eine Verbindung mit localdb
herstellen, können Sie die App ausführen und todos beibehalten, während Sie lokal arbeiten.
- Klicken Sie im Projektmappen-Explorer von Visual Studio mit der rechten Maustaste auf den Knoten Verbundene Dienste, und wählen Sie Hinzufügen > SQL Server-Datenbank aus.
- Wählen Sie im Dialogfeld Mit Abhängigkeit verbinden die Option SQL Server Express LocalDB (lokal) und dann Weiter aus.
- Legen Sie im Dialogfeld Mit SQL Server Express LocalDB verbinden (lokal) die folgenden Werte fest:
- Namen der Verbindungszeichenfolge: Den Standardwert beibehalten.
- Verbindungszeichenfolgenwert: Den Standardwert beibehalten.
- Wert der Verbindungszeichenfolge speichern in: Wählen Sie Keine aus.
- Wählen Sie Weiter
- Übernehmen Sie auf dem Bildschirm Zusammenfassung der Änderungen die Standardwerte für die Einstellungen, und wählen Sie Fertig stellen aus, um den Workflow abzuschließen.
Visual Studio zeigt eine Zusammenfassung der Dienstabhängigkeiten an, einschließlich der Verbindung mit LocalDB
.
Als Nächstes müssen Sie eine anfängliche Migration erstellen und verwenden, um die lokale Datenbank mit dem richtigen Schema für die TODO-App zu aktualisieren.
- Wählen Sie das Symbol ... rechts neben der Liste der Dienstabhängigkeiten neben der
LocalDB
-Verbindung aus, und wählen Sie Migration hinzufügen aus. - Warten Sie im Dialogfeld Entity Framework-Migrationen einen Moment, bis Visual Studio die
DbContext
Klasse sucht, die im Projekt enthalten ist. Nachdem die Werte geladen wurden, wählen Sie Fertig stellen aus. - Visual Studio generiert einen
Migrations
Ordner im Projekt und erstellt eine anfängliche Migrationsklasse. Diese Klasse kann verwendet werden, um die Datenbank mit dem richtigen Schema zu aktualisieren. - Wählen Sie das Symbol ... neben dem
LocalDB
Dienst erneut aus, und wählen Sie Datenbank aktualisierenaus. - Warten Sie im Dialogfeld Entity Framework-Migrationen einen Moment, bis Visual Studio die
DbContext
-Klasse erneut gefunden hat, und wählen Sie dann Fertig stellen aus. Visual Studio führt die Migration aus und erstellt das Schema für die Datenbank imLocalDB
-Server.
Starten Sie das Projekt, indem Sie oben in Visual Studio die Schaltfläche DotNetCoreSqlDb Ausführen auswählen.
Wenn die App geladen wird, überprüfen Sie, ob die Datenbank ordnungsgemäß funktioniert, indem Sie ein neues TODO eingeben. Die Aufgabe wird in der Hauptlistenansicht auf der Startseite der App angezeigt.
Erkunden der App-Startkonfiguration
Die Beispiel-App enthält den folgenden Code in der datei Program.cs
:
if(builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}
Dieser Code wendet die folgenden Konfigurationen an:
- Wenn die App lokal ausgeführt wird, wird die
localdb
Verbindungszeichenfolge aus derappsettings.json
-Datei abgerufen und für Entity Framework bereitgestellt. Mit dieser Konfiguration kann dielocaldb
Verbindungszeichenfolge in die Quellcodeverwaltung eingecheckt werden, sodass andere Entwickler während der Entwicklung problemlos eine Verbindung mit einer lokalen Datenbank herstellen können. Außerdem können Entity Framework-Migrationen lokal ausgeführt werden. Standardmäßig ermittelt Entity Framework beim Ausführen von Migrationen keine Verbindungszeichenfolgen, die in der Umgebungsvariable gespeichert sind. - Wenn die App in GitHub-Aktionen-Workflows oder in der Produktion ausgeführt wird, wird die Verbindungszeichenfolge aus Umgebungsvariablen abgerufen. Umgebungsvariablen können verhindern, dass für die Produktion sichere Verbindungszeichenfolgen in die Quellcodeverwaltung eingecheckt oder in Konfigurationsdateien eingebunden werden.
Erstellen der Azure-Dienste
Für die App müssen die folgenden Azure-Dienste für eine erfolgreiche Bereitstellung erstellt werden:
- Container-App: Erforderlich, um die bereitgestellte Anwendung zu hosten und auszuführen.
- Containerregistrierung: Speichert das erstellte Imageartefakt der containerisierten App
- SQL-Datenbank: Eine Azure SQL-Datenbank zum Speichern der Daten der App.
Die Veröffentlichungsfunktionen von Visual Studio können das Erstellen dieser Ressourcen für Sie übernehmen.
Erstellen der Azure-Container-App und der Azure-Containerregistrierung
Klicken Sie im Projektmappen-Explorer von Visual Studio mit der rechten Maustaste auf den obersten Projektknoten, und wählen Sie Veröffentlichen aus.
Wählen Sie im Veröffentlichungsdialogfeld Azure als Bereitstellungsziel aus, und wählen Sie dann Nextaus.
Wählen Sie für das spezifische Ziel Azure Container Apps (Linux)aus, und wählen Sie dann Nextaus.
Erstellen Sie eine neue Container-App für die Bereitstellung. Wählen Sie die Schaltfläche + Neue erstellen aus, um ein neues Dialogfeld zu öffnen und die folgenden Werte einzugeben:
- Container-App-Name: Behalten Sie den Standardwert bei, oder geben Sie einen Namen ein.
- Abonnementname: Wählen Sie das Abonnement aus, in das die Bereitstellung erfolgen soll.
- Ressourcengruppe: Wählen Sie Neuen aus, und erstellen Sie eine neue Ressourcengruppe namens msdocs-app-db-ef.
- Container-Apps-Umgebung: Wählen Sie Neue aus, um das Dialogfeld für Container-Apps zu öffnen und die folgenden Werte einzugeben:
- Umgebungsname: Standardwert beibehalten.
- Standort: Wählen Sie einen Ort in Ihrer Nähe aus.
- Azure Log Analytics-Arbeitsbereich: Wählen Sie Neu aus, um das Dialogfeld "Log Analytics-Arbeitsbereich" zu öffnen.
- Name: Behalten Sie den Standardwert bei.
- Speicherort: Wählen Sie einen Speicherort in Ihrer Nähe aus, und wählen Sie dann OK aus, um das Dialogfeld zu schließen.
- Wählen Sie OK aus, um das Dialogfeld "Container-Apps"-Umgebung zu schließen.
- Wählen Sie Erstellen aus, um das Dialogfeld „Ursprüngliche Container-Apps“ zu schließen. Visual Studio erstellt die Container-App-Ressource in Azure.
Nachdem die Ressource erstellt wurde, stellen Sie sicher, dass sie in der Liste der Container-Apps ausgewählt ist, und wählen Sie dann Nextaus.
Sie müssen eine Azure-Containerregistrierung erstellen, um das veröffentlichte Imageartefakt für Ihre App zu speichern. Wählen Sie das grüne +-Symbol auf dem Bildschirm Containerregistrierung aus.
Behalten Sie die Standardwerte bei, und wählen Sie dann Erstellen aus.
Nachdem die Containerregistrierung erstellt wurde, stellen Sie sicher, dass sie ausgewählt ist, und wählen Sie dann "Weiter" aus.
Wählen Sie auf dem Bildschirm Bereitstellungstyp die Option CI/CD mit GitHub Actions-Workflows ( generiert YML-Datei), und wählen Sie dann Fertig stellen aus. Wenn Sie von Visual Studio aufgefordert werden, dem Administratorbenutzer den Zugriff auf den veröffentlichten Docker-Container zu ermöglichen, wählen Sie Jaaus.
Visual Studio erstellt und zeigt das Veröffentlichungsprofil an. Die meisten Veröffentlichungsschritte und Details werden in der GitHub-Aktionen-.yml
-Datei beschrieben, die angezeigt werden kann, indem Sie auf die Schaltfläche Workflow bearbeiten in der Zusammenfassungsansicht des Veröffentlichungsprofils klicken. Diese Datei wird weiter unten im Artikel ausführlicher behandelt.
Erstellen der Azure SQL-Datenbank
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Verbundene Dienste, und wählen Sie Hinzufügen > SQL Server-Datenbank aus.
- Wählen Sie im Dialogfeld Mit Abhängigkeit verbinden die Option Azure SQL-Datenbank und dann Weiter aus.
- Wählen Sie + Neue erstellen aus, um eine neue Datenbank hinzuzufügen.
- Geben Sie im Dialogfeld Azure SQL-Datenbank die folgenden Werte ein:
- Datenbankname: Behalten Sie den Standardwert bei.
- Abonnementname: Wählen Sie dasselbe Abonnement wie zuvor aus.
- Ressourcengruppe: Wählen Sie dieselbe zuvor erstellte
msdocs-app-db-ef
Gruppe aus. - Datenbankserver: Wählen Sie Neu aus... und geben Sie dann die folgenden Werte in das neue POP-Up ein:
- Datenbankservername: Geben Sie einen eindeutigen Servernamen ein, oder fügen Sie Zufallszahlen am Ende des automatisch generierten Namens an.
- Speicherort: Wählen Sie einen Speicherort aus, der Ihnen nahe liegt.
- Administratorbenutzername: Geben Sie einen Wert Ihrer Wahl ein.
- Administratorkennwort: Geben Sie einen Wert Ihrer Wahl ein.
- Administratorkennwort (bestätigen): Geben Sie dasselbe Kennwort ein, um es zu bestätigen. Wählen Sie OK aus, um das Dialogfeld SQL Server zu schließen
- Wählen Sie Erstellen aus, um die SQL Server-Instanz und die Datenbank zu erstellen.
- Wenn der Vorgang abgeschlossen ist, wählen Sie den Server aus der Liste aus, und wählen Sie Next
- Behalten Sie im Dialogfeld Verbindung mit Azure SQL-Datenbank herstellen die Standardwerte bei, stellen Sie jedoch sicher, dass unten für die Option Wert der Verbindungszeichenfolge speichern in die Option Keine ausgewählt ist.
- Wählen Sie fertig stellen aus, und Visual Studio erstellt die SQL-Ressourcen.
Verbinden der Container-App mit Azure SQL
Wählen Sie auf der Übersichtsseite der von Ihnen erstellten Container-App Service Connector (Vorschau) auf der linken Navigation aus.
Wählen Sie + Erstellen von aus, um eine neue Verbindung zu erstellen.
Geben Sie im Flyout Verbindung erstellen die folgenden Werte ein:
Container: Wählen Sie den von Ihnen erstellten container dotnetcoresqldb container aus.
Diensttyp: Wählen Sie SQL-Datenbank-aus.
Abonnement: Wählen Sie dasselbe Abonnement aus, das Sie zum Erstellen der Container-App verwendet haben.
Verbindungsname: Den Standardwert beibehalten.
SQL Server: Wählen Sie den zuvor erstellten Datenbankserver aus.
SQL-Datenbank: Wählen Sie die Datenbank aus, die Sie zuvor erstellt haben.
Clienttyp: Wählen Sie .NET-aus.
Wählen Sie Weiter: Authentifizierung und geben Sie die folgenden Werte ein:
- Wählen Sie Verbindungszeichenfolge für den Authentifizierungstyp aus.
- Benutzername: Geben Sie den Benutzernamen ein, den Sie beim Erstellen des Datenbankservers verwendet haben.
- Kennwort: Geben Sie das Kennwort ein, das Sie beim Erstellen des Datenbankservers verwendet haben.
Behalten Sie die restlichen Einstellungen bei der Standardeinstellung bei, und wählen Sie Weiter: Netzwerkaus.
Lassen Sie den Standardwert ausgewählt, und wählen Sie Weiter: Überprüfen + erstellen.
Wählen Sie Erstellen aus, nachdem Azure die Einstellungen überprüft hat.
Nach einem Moment sollte die Verbindung mit der SQL-Datenbank angezeigt werden. Wählen Sie den Pfeil aus, um die Verbindung zu erweitern und den AZURE_SQL_CONNECTIONSTRING Wert anzuzeigen. Dieser Verbindungsname entspricht dem Namen der In der Beispiel-App definierten Verbindungszeichenfolge der Umgebungsvariablen.
Konfigurieren des GitHub-Aktionsworkflows
Die von Visual Studio generierte GitHub-Workflowdatei "Aktionen" kann von GitHub verwendet werden, um die App beim Übertragen von Änderungen in Azure zu erstellen und bereitzustellen. Derzeit würde dieser Prozess funktionieren, die bereitgestellte App würde jedoch eine Ausnahme auslösen. Obwohl die Azure SQL-Datenbank erstellt wurde, muss dem GitHub Actions-Workflow ein Schritt hinzugefügt werden, um das Schema zu generieren. Die Verbindungszeichenfolge für die Azure SQL-Datenbank kann sicher als geheimer Schlüssel in GitHub gespeichert und beim Ausführen vom Workflow abgerufen werden.
Abrufen der Verbindungszeichenfolge und Hinzufügen der Verbindungszeichenfolge zu GitHub-Geheimschlüsseln
Suchen Sie im Azure-Portal nach der Datenbank, die Sie in der Hauptsuchleiste erstellt haben, und wählen Sie sie aus den Ergebnissen aus.
Wählen Sie auf der Übersichtsseite der Datenbank im linken Navigationsbereich Verbindungszeichenfolgen aus.
Kopieren Sie auf der Registerkarte ADO.NET die Verbindungszeichenfolge aus dem Formularfeld.
Navigieren Sie zum geforkten GitHub-Repository der App.
Wählen Sie auf der Registerkarte Einstellungen im linken Navigationsbereich Geheimnisse > Aktionen und dann Neues Repositorygeheimnis aus.
Geben Sie auf der Seite Neues Geheimnis die folgenden Werte ein:
Name: Geben Sie einen Namen von
DbConnection
ein.Geheimer Schlüssel: Fügen Sie die aus Azure kopierte Verbindungszeichenfolge ein. Stellen Sie sicher, dass Sie den Kennwortplatzhalter in der Verbindungszeichenfolge durch das Kennwort ersetzen, das Sie beim Erstellen der Datenbank ausgewählt haben.
Wählen Sie Geheimnis hinzufügen aus.
Die Verbindungszeichenfolge wird jetzt sicher im GitHub-Repositoryschlüssel gespeichert und kann mit einem GitHub-Workflow abgerufen werden.
Ändern des GitHub Actions-Workflows zum Aktivieren von Migrationen
Öffnen Sie die Datei des GitHub Actions-Workflows
.yml
, die von Visual Studio generiert wurde, indem Sie auf der Seite mit der Veröffentlichungszusammenfassung die Schaltfläche 'Workflow bearbeiten' wählen.Fügen Sie das folgende Yaml an das Ende der Workflowdatei an:
- name: Run EF run: | dotnet tool install --global dotnet-ef dotnet tool restore dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
Dieser Code installiert das Befehlszeilentool für das Entitätsframework und führt die App-Migrationen aus. Wenn der Workflow ausgeführt wird, verwendet der Code auch den
connection
-Parameter des Befehlsdatabase update
, um die in derappsettings.json
-Datei gespeichertelocaldb
-Verbindungszeichenfolge durch den in GitHub-Geheimnisse hinzugefügten Wert zu überschreiben.
Ausführen des GitHub Actions-Workflows und Testen der Bereitstellung
Übernehmen Sie die Änderungen in der Anwendung und übertragen Sie sie mithilfe des folgenden Befehls an das geforkte Repository.
git add --all git commit -m "Added GitHub Actions workflow" git push
Navigieren Sie zum GitHub-Repository, und wählen Sie die Registerkarte Aktionen aus. Eine Workflowausführung sollte automatisch ausgelöst werden, wenn der Push erfolgreich war.
Wählen Sie den aktiven Workflow aus, um die Protokolldetails für jeden Schritt anzuzeigen, sobald er abgeschlossen ist. Die Migration wird zuletzt ausgeführt, um die Datenbank in Azure zu aktualisieren.
Nach Abschluss des Workflows wird die Anwendung in Azure-Container-Apps bereitgestellt und mit der Datenbank mit einem aktualisierten Schema verbunden.
Sie können die Bereitstellung testen, indem Sie zur Startseite der Container-App navigieren und ein TODO erstellen, genau wie Sie es lokal getan haben. Sie finden die URL ihrer Container-App immer auf der Übersichtsseite für die App im Azure-Portal.