Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 der ASP.NET- und Webentwicklungs-Workload und der Azure-Entwicklungs-Workload.
Wenn Sie Visual Studio bereits installiert haben:
- Installieren Sie die neuesten Updates in Visual Studio, indem Sie "Hilfe>suchen nach Updates" auswählen.
- Überprüfen Sie, ob die ASP.NET- und Webentwicklungsworkloads undAzure-Entwicklungsarbeitslasten installiert sind, indem Sie "Tools>und Features abrufen" auswählen.
Warnung
In diesem Artikel werden Verbindungszeichenfolgen verwendet. Gehen Sie beim Verwalten von Verbindungen mit Benutzernamen, Kennwörtern oder Zugriffstasten vorsichtig vor. Diese Geheimnisse sollten nicht in der Quellcodeverwaltung committet oder an unsicheren Orten gespeichert werden, an denen unbeabsichtigte Benutzer*innen möglicherweise darauf zugreifen können. Während der lokalen Entwicklung stellen Sie in der Regel eine Verbindung mit einer lokalen Datenbank her, für die keine Speicherung von Geheimnissen oder eine direkte Verbindung mit Azure erforderlich ist. Stellen Sie während der Produktion eine Verbindung mit Ihrer Azure SQL-Datenbank her, indem Sie nach Möglichkeit einen ansatz ohne Geheimnisse wie Microsoft Entra ID verwenden.
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 Visual Studio-Projektmappen-Explorer mit der rechten Maustaste auf den Knoten "Verbundene Dienste", und wählen Sie "SQL Server-Datenbank hinzufügen" >aus.
- Wählen Sie im Dialogfeld "Verbindung mit Abhängigkeit herstellen"SQL Server Express LocalDB (Lokal) und dann "Weiter" aus.
- Legen Sie im Dialogfeld "Verbindung mit SQL Server Express LocalDB (Local)" die folgenden Werte fest:
- Name der Verbindungszeichenfolge: Behalten Sie den Standardwert bei.
- Verbindungszeichenfolgenwert: Behalten Sie den Standardwert bei.
- Verbindungszeichenfolgenwert speichern in: Wählen Sie "Keine" aus.
- Weiter auswählen
- Lassen Sie auf dem Bildschirm "Zusammenfassung der Änderungen " die Einstellungen bei ihren Standardwerten, 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 auf der rechten Seite der Liste der Dienstabhängigkeiten neben der Verbindung das Symbol
LocalDBaus, und wählen Sie Migration hinzufügen aus. - Warten Sie im Dialogfeld "Entity Framework-Migrationen " einen Moment, bis Visual Studio die
DbContextKlasse sucht, die im Projekt enthalten ist. Nachdem die Werte geladen wurden, wählen Sie "Fertig stellen" aus. - Visual Studio generiert einen
MigrationsOrdner 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
LocalDBDienst erneut aus, und wählen Sie " Datenbank aktualisieren" aus. - Warten Sie im Dialogfeld "Entity Framework-Migrationen " einen Moment, bis Visual Studio die
DbContextKlasse erneut findet, 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 " Ausführen" "DotNetCoreSqlDb " 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
localdbVerbindungszeichenfolge aus derappsettings.json-Datei abgerufen und für Entity Framework bereitgestellt. Mit dieser Konfiguration kann dielocaldbVerbindungszeichenfolge 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 zum Hosten und Ausführen der bereitgestellten Anwendung.
- Container-Registry: Speichert das erstellte Image-Artefakt 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 Projektknoten der obersten Ebene, und wählen Sie "Veröffentlichen" aus.
Wählen Sie im Veröffentlichungsdialogfeld Azure als Bereitstellungsziel und dann "Weiter" aus.
Wählen Sie für das spezifische Ziel Azure-Container-Apps (Linux) und dann "Weiter" aus.
Erstellen Sie eine neue Container-App für die Bereitstellung. Wählen Sie die Schaltfläche "+Neu erstellen " aus, um ein neues Dialogfeld zu öffnen, und geben Sie die folgenden Werte ein:
- Container-App-Name: Behalten Sie den Standardwert bei, oder geben Sie einen Namen ein.
- Abonnementname: Wählen Sie das Abonnement aus, auf dem es bereitgestellt werden soll.
- Ressourcengruppe: Wählen Sie "Neu" aus, und erstellen Sie eine neue Ressourcengruppe namens "msdocs-app-db-ef".
-
Container-Apps-Umgebung: Wählen Sie "Neu" aus, um das Dialogfeld "Container-Apps" zu öffnen, und geben Sie die folgenden Werte ein:
- Umgebungsname: Behalten Sie den Standardwert bei.
- Ort: 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.
- Ort: 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 "Weiter" aus.
Sie müssen eine Azure Container Registry-Instanz erstellen, um das veröffentlichte Imageartefakt für Ihre App zu speichern. Wählen Sie das grüne + Symbol auf der Containerregistrierung-Ansicht 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 " CI/CD mit GitHub Actions-Workflows (generiert yml-Datei) aus, 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 "Ja" aus.
Visual Studio erstellt und zeigt das Veröffentlichungsprofil an. Die meisten Veröffentlichungsschritte und Details werden in der GitHub Actions-Datei .yml 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 "SQL Server-Datenbank hinzufügen" >aus.
- Wählen Sie im Dialogfeld "Verbindung mit Abhängigkeit herstellen " die Option "Azure SQL-Datenbank " und dann " Weiter" aus.
- Wählen Sie +Neu erstellen , 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 Gruppe aus, die
msdocs-app-db-efzuvor erstellt wurde. -
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.
- Ort: Wählen Sie einen Speicherort aus, der sich in ihrer Nähe befindet.
- 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 sql Server und die Datenbank zu erstellen.
- Wenn der Vorgang abgeschlossen ist, wählen Sie den Server aus der Liste aus, und wählen Sie "Weiter" aus.
- Behalten Sie im Dialogfeld "Mit Azure SQL-Datenbank verbinden" die Standardwerte bei, stellen Sie jedoch sicher, dass "Keine" unten für den Wert "Verbindungszeichenfolge speichern" 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 den Dienstconnector (Vorschau) in der linken Navigationsleiste aus.
Wählen Sie +Erstellen 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 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: Behalten Sie den Standardwert bei.
SQL Server: Wählen Sie den Datenbankserver aus, den Sie zuvor erstellt haben.
SQL-Datenbank: Wählen Sie die Datenbank aus, die Sie zuvor erstellt haben.
Clienttyp: Wählen Sie .NET aus.
Wählen Sie "Weiter" aus: Authentifizierung und Geben Sie die folgenden Werte ein:
- Wählen Sie die Verbindungszeichenfolge für den Authentifizierungstyp aus.
- Nutzername: Geben Sie den Benutzernamen ein, den Sie beim Erstellen des Datenbankservers verwendet haben.
- Passwort: 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: Netzwerk" aus.
Lassen Sie den Standardwert ausgewählt, und wählen Sie "Weiter" aus: Überprüfen + Erstellen.
Nachdem Azure validiert wurde, wählen Sie Erstellen aus.
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 Verbindungszeichenfolgen in der linken Navigation 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 " die Option "Geheime > Aktionen " aus der linken Navigation aus, und wählen Sie dann " Neuer Repositoryschlüssel" aus.
Geben Sie auf der Seite "Neuer geheimer Schlüssel " die folgenden Werte ein:
Name: Geben Sie einen Namen von
DbConnection.Geheim: Fügen Sie die aus Azure kopierte Verbindungszeichenfolge ein. Ersetzen Sie den Kennwortplatzhalter in der Verbindungszeichenfolge durch das Kennwort, das Sie beim Erstellen der Datenbank ausgewählt haben.
Wählen Sie "Geheimen Schlüssel 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 von Visual Studio generierte GitHub Actions-Workflowdatei
.yml, indem Sie auf der Zusammenfassungsseite der Veröffentlichung die Schaltfläche " Workflow bearbeiten " auswä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 derlocaldb-Datei gespeicherteappsettings.json-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 pushNavigieren 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.