Bereitstellen und Skalieren einer ASP.NET Core-App in Azure Container Apps

In Azure bereitgestellte Apps, die zeitweilig eine hohe Nachfrage aufweisen, profitieren bei der Erfüllung dieser Nachfrage von der Skalierbarkeit. Skalierbare Apps können horizontal skaliert werden, um die Kapazität bei Arbeitsauslastungsspitzen zu gewährleisten, und dann automatisch herunterskaliert werden, wenn die Arbeitsauslastung sinkt, wodurch die Kosten gesenkt werden können. Bei der horizontalen Skalierung (Aufskalieren) werden einer Ressource neue Instanzen hinzugefügt, z. B. virtuelle Computer oder Datenbankreplikate. In diesem Artikel wird veranschaulicht, wie Sie eine horizontal skalierbare ASP.NET Core-App in Azure Container Apps bereitstellen können, indem Sie die folgenden Aufgaben erfüllen:

  1. Einrichten des Beispielprojekts
  2. Bereitstellen der App in Azure Container Apps
  3. Skalieren der App und Problembehandlung
  4. Erstellen der Azure-Dienste
  5. Herstellen einer Verbindung mit den Azure-Diensten
  6. Konfigurieren und erneutes Bereitstellen der App

In diesem Artikel wird Razor Pages verwendet, aber die meisten Schritte gelten auch für andere ASP.NET Core-Apps.

In einigen Fällen können einfache ASP.NET Core-Apps ohne besondere Maßnahmen skaliert werden. Apps, die bestimmte Frameworkfeatures oder Architekturmuster nutzen, erfordern jedoch zusätzliche Konfigurationen, darunter die folgenden:

  • Sichere Formularübermittlungen: Razor Pages-, MVC- und Web-API-Apps verwenden häufig Formularübermittlungen. Diese Apps verwenden standardmäßig websiteübergreifende Fälschungstoken und interne Datenschutzdienste, um Anforderungen zu schützen. Wenn diese Apps in die Cloud bereitgestellt werden, müssen sie so konfiguriert werden, dass die Datenschutzdienste an einem sicheren, zentralen Ort verwaltet werden.

  • SignalR-Verbindung: Blazor Server-Apps erfordern die Verwendung eines zentralisierten AzureSignalR-Diensts, um sicher skaliert zu werden. Diese Dienste nutzen außerdem auch die zuvor erwähnten Datenschutzdienste.

  • Zentralisiertes Zwischenspeichern oder Statusverwaltungsdienste: Skalierbare Apps können Azure Cache for Redis verwenden, um das verteilte Zwischenspeichern durchzuführen. Azure Storage kann erforderlich sein, um Status für Frameworks wie Microsoft Orleans zu speichern, wodurch Apps geschrieben werden können, die den Status in vielen verschiedenen App-Instanzen verwalten.

Die in diesem Artikel beschriebenen Schritte veranschaulichen, wie Sie die oben genannten Herausforderungen bewältigen können, indem Sie eine skalierbare App in Azure Container Apps bereitstellen. Die meisten Konzepte in diesem Tutorial lassen sich auch auf Azure App Service-Instanzen anwenden.

Einrichten des Beispielprojekts

Verwenden Sie die GitHub Explorer-Beispiel-App, um dieses Tutorial durchzuführen. Führen Sie den folgenden Befehl aus, um die App aus GitHub zu klonen:

git clone "https://github.com/dotnet/AspNetCore.Docs.Samples.git"

Navigieren Sie zum Ordner /tutorials/scalable-razor-apps/start, und öffnen Sie die ScalableRazor.csproj-Datei.

Die Beispiel-App verwendet ein Suchformular, um GitHub-Repositorys nach Namen zu durchsuchen. Das Formular basiert auf den integrierten ASP.NET Core-Datenschutzdiensten, um Fälschungen vorzubeugen. Wenn die App in Container Apps horizontal skaliert wird, löst der Datenschutzdienst standardmäßig eine Ausnahme aus.

Testen der App

  1. Starten Sie die App in Visual Studio. Das Projekt enthält eine Docker-Datei. Dies bedeutet, dass der Pfeil neben der Schaltfläche „Ausführen“ ausgewählt werden kann, um die App entweder mit einem Docker Desktop-Setup oder dem lokalen ASP.NET Core-Standardwebserver zu starten.

Verwenden Sie das Suchformular, um GitHub-Repositorys nach Namen zu suchen.

A screenshot showing the GitHub Explorer app.

Bereitstellen der App in Azure Container Apps

Visual Studio wird verwendet, um die App in Azure Container Apps bereitzustellen. Container-Apps bieten einen verwalteten Dienst, der das Hosten von containerisierten Apps und Microservices vereinfacht.

Hinweis

Viele der für die App erstellten Ressourcen erfordern einen Standort. Bei dieser App ist der Standort nicht wichtig. Für eine echte App sollte ein Standort in der Nähe der Kunden ausgewählt werden. Sie sollten einen Standort in Ihrer Nähe auswählen.

  1. Klicken Sie im Projektmappen-Explorer von Visual Studio mit der rechten Maustaste auf den obersten Projektknoten, und wählen Sie Veröffentlichen aus.

  2. Wählen Sie im Veröffentlichungsdialogfeld Azure als Bereitstellungsziel und dann Weiter aus.

  3. Wählen Sie als bestimmtes Ziel Azure Container Apps (Linux) und dann Weiter aus.

  4. Erstellen Sie eine neue Container-App für die Bereitstellung. Wählen Sie das grüne +-Symbol aus, um ein neues Dialogfeld zu öffnen, und geben Sie die folgenden Werte ein:

    A screenshot showing Visual Studio deployment.

    • Name der Container-App: 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 Neu aus, und erstellen Sie eine neue Ressourcengruppe mit dem Namen msdocs-scalable-razor.
    • Container-Apps-Umgebung: Wählen Sie Neu aus, um das Dialogfeld „Container apps environment“ (Container Apps-Umgebung) zu öffnen, und geben Sie die folgenden Werte ein:
      • Umgebungsname: Behalten Sie den Standardwert bei.
      • Standort: Wählen Sie einen Standort 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.
        • Standort: Wählen Sie einen Standort 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 environment“ (Container-Apps-Umgebung) zu schließen.
    • Wählen Sie Erstellen aus, um das ursprüngliche Container-Apps-Dialogfeld zu schließen. Visual Studio erstellt die Container-App-Ressource in Azure.
  5. Sobald 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.

  6. 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 dem Containerregistrierungsbildschirm aus.

    A screenshot showing how to create a new container registry.

  7. Ändern Sie die Standardwerte nicht, und wählen Sie dann Erstellen aus.

    A screenshot showing the values for a new container registry.

  8. Stellen Sie nach der Erstellung der Containerregistrierung sicher, dass sie ausgewählt ist, und wählen Sie dann „Fertigstellen“ aus, um den Dialogfeldworkflow zu schließen und eine Zusammenfassung des Veröffentlichungsprofils anzuzeigen.

    Wenn Sie von Visual Studio aufgefordert werden, den Administratorbenutzer zu aktivieren, um auf den veröffentlichten Docker-Container zuzugreifen, wählen Sie Ja aus.

  9. Wählen Sie oben rechts in der Zusammenfassung des Veröffentlichungsprofils Veröffentlichen aus, um die App in Azure bereitzustellen.

Nach der Bereitstellung startet Visual Studio den Browser, um die gehostete App anzuzeigen. Suchen Sie im Formularfeld nach Microsoft, und eine Liste der Repositorys wird angezeigt.

Skalieren der App und Problembehandlung

Die App funktioniert derzeit problemlos, aber wir möchten die App in Erwartung hoher Datenverkehrsvolumen auf weitere Instanzen skalieren.

  1. Suchen Sie im Azure-Portal in der oberen Suchleiste nach der razorscaling-app-****-Container-App, und wählen Sie sie aus den Ergebnissen aus.
  2. Wählen Sie auf der Übersichtsseite Skalieren im linken Navigationsbereich aus, und wählen Sie + Bearbeiten und bereitstellen aus.
  3. Wechseln Sie auf der Seite „Überarbeitungen“ zur Registerkarte Skalieren.
  4. Legen Sie sowohl die Mindest- als auch die Maximalanzahl der Instanzen auf 4 fest, und wählen Sie dann Erstellen aus. Durch diese Konfigurationsänderung wird gewährleistet, dass Ihre App horizontal auf vier Instanzen skaliert wird.

Navigieren Sie zurück zur App. Wenn die Seite geladen wird, scheint zunächst alles ordnungsgemäß zu funktionieren. Wenn jedoch ein Suchbegriff eingegeben und übermittelt wird, kann ein Fehler auftreten. Wenn ein Fehler nicht angezeigt wird, senden Sie das Formular mehrmals.

Problembehandlung

Es ist nicht sofort ersichtlich, warum die Suchanforderungen fehlschlagen. Die Browsertools zeigen an, dass die Antwort „400 – ungültige Anforderung“ zurückgegeben wurde. Sie können jedoch die Protokollierungsfeatures von Container-Apps verwenden, um in Ihrer Umgebung auftretende Fehler zu diagnostizieren.

  1. Wählen Sie auf der Übersichtsseite der Container-App die Option Protokolle aus dem linken Navigationsbereich aus.

  2. Schließen Sie auf der Seite Protokolle das Popupelement, und navigieren Sie zur Registerkarte Tabellen.

  3. Erweitern Sie das Element Benutzerdefinierte Protokolle, um den Knoten ContainerAppConsoleLogs_CL anzuzeigen. Diese Tabelle enthält verschiedene Protokolle für die Container-App, die zur Problembehandlung abgefragt werden kann.

    A screenshot showing the container app logs.

  4. Verfassen Sie im Abfrage-Editor eine einfache Abfrage (wie z. B. das folgende Skript), um die Tabelle ContainerAppConsoleLogs_CL Logs nach kürzlich aufgetretenen Ausnahmen zu durchsuchen:

    ContainerAppConsoleLogs_CL
    | where Log_s contains "exception"
    | sort by TimeGenerated desc
    | limit 500
    | project ContainerAppName_s, Log_s
    

    Die vorherige Abfrage durchsucht die Tabelle ContainerAppConsoleLogs_CL nach Zeilen, die das Wort „exception“ (Ausnahme) enthalten. Die Ergebnisse werden nach dem Zeitpunkt ihrer Generierung sortiert. Es werden nur 500 Ergebnisse angezeigt, und sie enthalten nur die Spalten ContainerAppName_s und Log_s, damit sie leichter zu lesen sind.

  5. Wählen Sie Ausführen aus, und es wird eine Liste der Ergebnisse angezeigt. Lesen Sie die Protokolle, und beachten Sie, dass die meisten von ihnen mit Fälschungssicherheitstoken und Kryptografie zusammenhängen.

    A screenshot showing the logs query.

    Wichtig

    Die Fehler in der App werden durch .NET-Datenschutzdienste verursacht. Wenn mehrere Instanzen einer App ausgeführt werden, kann nicht garantiert werden, dass die HTTP POST-Anforderung zum Senden des Formulars an denselben Container weitergeleitet wird, über den die Seite aus der HTTP GET-Anforderung geladen wurde. Wenn die Anforderungen von verschiedenen Instanzen verarbeitet werden, werden die Fälschungssicherheitstoken nicht ordnungsgemäß verarbeitet, und eine Ausnahme tritt auf.

    In den folgenden Schritten wird dieses Problem behoben, indem die Datenschutzschlüssel in einem Azure-Speicherdienst zentralisiert und mit Key Vault geschützt werden.

Erstellen der Azure-Dienste

Die folgenden Dienste werden erstellt und mit der App verknüpft, um die vorherigen Fehler zu behandeln:

  • Azure Storage-Konto: Darin werden die Daten für die Datenschutzdienste gespeichert. Dieses stellt einen zentralen Speicherort für Schlüsseldaten bereit, während die App skaliert wird. Storage-Konten können auch verwendet werden, um Dokumente, Warteschlangendaten, Dateifreigaben und fast jede Art von Blobdaten zu speichern.
  • Azure KeyVault: Dieser Dienst speichert Geheimnisse für eine App und wird verwendet, um die Verschlüsselung für Datenschutzdienste zu verwalten.

Erstellen des Speicherkontodiensts

  1. Geben Sie in der Suchleiste des Azure-Portals Storage accounts ein, und wählen Sie das entsprechende Ergebnis aus.
  2. Wählen Sie auf der Auflistungsseite mit den Speicherkonten + Erstellen aus.
  3. Geben Sie auf der Registerkarte Grundlagen die folgenden Werte ein:
    • Abonnement: Wählen Sie dasselbe Abonnement aus, das Sie für die Container-App ausgewählt haben.
    • Ressourcengruppe: Wählen Sie die zuvor erstellte Ressourcengruppe msdocs-scalable-razor aus.
    • Speicherkontoname: Geben Sie dem Konto den Namen scalablerazorstorageXXXX, wobei XXXX für die von Ihnen gewählten Zufallszahlen steht. Dieser Name muss in allen Azure-Diensten eindeutig sein.
    • Region: Wählen Sie die Region aus, die Sie zuvor ausgewählt haben.
  4. Ändern Sie die restlichen Werte nicht, und wählen Sie Überprüfen aus. Wählen Sie Erstellen aus, nachdem Azure die Eingaben überprüft hat.

Azure stellt das neue Speicherkonto bereit. Wenn der Vorgang abgeschlossen ist, wählen Sie Zu Ressource wechseln aus, um den neuen Dienst anzuzeigen.

Erstellen des Speichercontainers

Erstellen Sie einen Container, um die Datenschutzschlüssel der App zu speichern.

  1. Wählen Sie auf der Übersichtsseite des neuen Speicherkontos im linken Navigationsbereich Speicherbrowser aus.
  2. Wählen Sie Blobcontainer aus.
  3. Wählen Sie + Container hinzufügen aus, um das Flyoutmenü Neuer Container zu öffnen.
  4. Geben Sie den Namen von scalablerazorkeys ein, übernehmen Sie die restlichen Standardeinstellungen, und wählen Sie dann Erstellen aus.

Die neuen Container werden in der Seitenliste angezeigt.

Erstellen des Schlüsseltresordiensts

Erstellen Sie einen Schlüsseltresor, um die Schlüssel zu speichern, die die Daten im Blobspeichercontainer schützen.

  1. Geben Sie in der Suchleiste des Azure-Portals Key Vault ein, und wählen Sie das entsprechende Ergebnis aus.
  2. Wählen Sie auf der Auflistungsseite des Schlüsseltresors + Erstellen aus.
  3. Geben Sie auf der Registerkarte Grundlagen die folgenden Werte ein:
    • Abonnement: Wählen Sie das zuvor erstellte Abonnement aus.
    • Ressourcengruppe: Wählen Sie die zuvor erstellte Ressourcengruppe msdocs-scalable-razor aus.
    • Name des Schlüsseltresors: Geben Sie den Namen scalablerazorvaultXXXX ein.
    • Region: Wählen Sie eine Region in Ihrer Nähe aus.
  4. Übernehmen Sie die restlichen Standardeinstellungen, und klicken Sie dann auf Überprüfen und erstellen. Warten Sie, bis Azure Ihre Einstellungen überprüft hat, und wählen Sie dann Erstellen aus.

Azure stellt den neuen Schlüsseltresor bereit. Wenn der Vorgang abgeschlossen ist, wählen Sie Zu Ressource wechseln aus, um den neuen Dienst anzuzeigen.

Schlüssel erstellen

Erstellen Sie einen geheimen Schlüssel, um die Daten im Blobspeicherkonto zu schützen.

  1. Wählen Sie auf der Hauptübersichtsseite des Schlüsseltresors die Option Schlüssel aus dem linken Navigationsbereich aus.
  2. Wählen Sie auf der Seite Schlüssel erstellen die Option + Generate/Import (+ Generieren/Importieren) aus, um das Flyoutmenü Schlüssel erstellen zu öffnen.
  3. Geben Sie im Feld Namerazorkey ein. Übernehmen Sie die restlichen Standardeinstellungen, und klicken Sie dann auf Erstellen. Ein neuer Schlüssel wird auf der Schlüssellistenseite angezeigt.

Herstellen einer Verbindung mit den Azure-Diensten

Die Container-App erfordert eine sichere Verbindung mit dem Speicherkonto und den Schlüsseltresordiensten, um die Datenschutzfehler zu beheben und ordnungsgemäß skaliert zu werden. Die neuen Dienste werden durch die folgenden Schritte miteinander verknüpft:

Wichtig

Es dauert üblicherweise eine oder zwei Minuten, bis Sicherheitsrollenzuweisungen durch den Dienstconnector und andere Tools verteilt werden, und in seltenen Fällen kann es bis zu acht Minuten dauern.

Herstellen einer Verbindungmit dem Speicherkonto

  1. Navigieren Sie im Azure-Portal zur Übersichtsseite der Container-App.
  2. Wählen Sie im linken Navigationsbereich Dienstconnector aus.
  3. Wählen Sie auf der Seite „Dienstconnector“ + Erstellen aus, um den Flyoutbereich Creation Connection (Verbindungsherstellung) zu öffnen, und geben Sie die folgenden Werte ein:
    • Container: Wählen Sie die zuvor erstellte Container-App aus.
    • Diensttyp: Wählen Sie Speicherblob aus.
    • Abonnement: Wählen Sie das zuvor verwendete Abonnement aus.
    • Verbindungsname: Übernehmen Sie die Standardeinstellung.
    • Speicherkonto: Wählen Sie das Speicherkonto aus, das Sie zuvor erstellt haben.
    • Clienttyp: Wählen Sie .NET aus.
  4. Wählen Sie Weiter: Authentifizierung aus, um mit dem nächsten Schritt fortzufahren.
  5. Wählen Sie Systemseitig zugewiesene verwaltete Identität und Weiter: Netzwerk aus.
  6. Lassen Sie die Standardnetzwerkoptionen ausgewählt, und wählen Sie dann Überprüfen + Erstellen aus.
  7. Wählen Sie Erstellen aus, nachdem Azure die Einstellungen überprüft hat.

Der Dienstconnector aktiviert eine systemseitig zugewiesene verwaltete Identität auf der Container-App. Außerdem wird der Identität die Rolle Mitwirkender an Storage-Blobdaten zugewiesen, damit sie Datenvorgänge für die Speichercontainer ausführen kann.

Herstellen einer Verbindung mit dem Schlüsseltresor

  1. Navigieren Sie im Azure-Portal zur Übersichtsseite der Container-App.
  2. Wählen Sie im linken Navigationsbereich Dienstconnector aus.
  3. Wählen Sie auf der Seite „Dienstconnector“ + Erstellen aus, um den Flyoutbereich Creation Connection (Verbindungsherstellung) zu öffnen, und geben Sie die folgenden Werte ein:
    • Container: Wählen Sie die zuvor erstellte Container-App aus.
    • Diensttyp: Wählen Sie Key Vault aus.
    • Abonnement: Wählen Sie das zuvor verwendete Abonnement aus.
    • Verbindungsname: Übernehmen Sie die Standardeinstellung.
    • Schlüsseltresor: Wählen Sie den zuvor erstellten Schlüsseltresor aus.
    • Clienttyp: Wählen Sie .NET aus.
  4. Wählen Sie Weiter: Authentifizierung aus, um mit dem nächsten Schritt fortzufahren.
  5. Wählen Sie Systemseitig zugewiesene verwaltete Identität und Weiter: Netzwerk aus.
  6. Lassen Sie die Standardnetzwerkoptionen ausgewählt, und wählen Sie dann Überprüfen + Erstellen aus.
  7. Wählen Sie Erstellen aus, nachdem Azure die Einstellungen überprüft hat.

Der Dienstconnector weist der Identität eine Rolle zu, sodass sie Datenvorgänge für Schlüsseltresorschlüssel ausführen kann.

Konfigurieren und erneutes Bereitstellen der App

Die erforderlichen Azure-Ressourcen wurden erstellt. In diesem Abschnitt wird der App-Code für die Verwendung der neuen Ressourcen konfiguriert.

  1. Installieren Sie die folgenden NuGet-Pakete:

    • Azure.Identity: Stellt Klassen für die Arbeit mit den Identitäts- und Zugriffsverwaltungsdiensten von Azure bereit
    • Microsoft.Extensions.Azure: Stellt hilfreiche Erweiterungsmethoden bereit, mit denen wichtige Azure-Konfigurationen durchgeführt werden können
    • Azure.Extensions.AspNetCore.DataProtection.Blobs: Ermöglicht das Speichern von ASP.NET Core-Datenschutzschlüsseln in Azure Blob Storage, damit die Schlüsseln in mehreren Instanzen einer Web-App freigegeben werden können
    • Azure.Extensions.AspNetCore.DataProtection.Keys: Ermöglicht das Schützen ruhender Schlüssel mithilfe der Schlüsselverschlüsselung bzw. dem Umbrechen-Feature von Azure Key Vault
    dotnet add package Azure.Identity
    dotnet add package Microsoft.Extensions.Azure
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Blobs
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Keys
    
  2. Aktualisieren Sie Program.cs mit dem folgenden hervorgehobenen Code:

    using Azure.Identity;
    using Microsoft.AspNetCore.DataProtection;
    using Microsoft.Extensions.Azure;
    
    var builder = WebApplication.CreateBuilder(args);
    var BlobStorageUri = builder.Configuration["AzureURIs:BlobStorage"];
    var KeyVaultURI = builder.Configuration["AzureURIs:KeyVault"];
    
    builder.Services.AddRazorPages();
    builder.Services.AddHttpClient();
    builder.Services.AddServerSideBlazor();
    
    builder.Services.AddAzureClientsCore();
    
    builder.Services.AddDataProtection()
                    .PersistKeysToAzureBlobStorage(new Uri(BlobStorageUri),
                                                    new DefaultAzureCredential())
                    .ProtectKeysWithAzureKeyVault(new Uri(KeyVaultURI),
                                                    new DefaultAzureCredential());
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapRazorPages();
    
    app.Run();
    

Dank der vorherigen Änderungen kann die App den Datenschutz mithilfe einer zentralen, skalierbaren Architektur verwalten. DefaultAzureCredential ermittelt die zuvor aktivierten Konfigurationen für verwaltete Identitäten, wenn die App erneut bereitgestellt wird.

Aktualisieren Sie die Platzhalter im Abschnitt AzureURIs der Datei appsettings.json, um Folgendes einzuschließen:

  1. Ersetzen Sie den Platzhalter <storage-account-name> durch den Namen des scalablerazorstorageXXXX-Speicherkontos.

  2. Ersetzen Sie den Platzhalter <container-name> durch den Namen des scalablerazorkeys-Speichercontainers.

  3. Ersetzen Sie den Platzhalter <key-vault-name> durch den Namen des scalablerazorvaultXXXX-Schlüsseltresors.

  4. Ersetzen Sie den Platzhalter <key-name> in der Schlüsseltresor-URI durch den zuvor erstellten razorkey-Namen.

    {
      "GitHubURL": "https://api.github.com",
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "AzureURIs": {
        "BlobStorage": "https://<storage-account-name>.blob.core.windows.net/<container-name>/keys.xml",
        "KeyVault": "https://<key-vault-name>.vault.azure.net/keys/<key-name>/"
      }
    }
    

Erneutes Bereitstellen der App

Die App ist jetzt ordnungsgemäß für die Verwendung der zuvor erstellten Azure-Dienste konfiguriert. Stellen Sie die App erneut bereit, damit die Codeänderungen übernommen werden.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie Veröffentlichen aus.
  2. Wählen Sie auf der Zusammenfassungsansicht des Veröffentlichungsprofils die Schaltfläche Veröffentlichen in der oberen rechten Ecke aus.

Visual Studio stellt die App in der zuvor erstellten Container Apps-Umgebung bereit. Nach Abschluss der Prozesse startet der Browser die Startseite der App.

Testen Sie die App erneut, indem Sie im Suchfeld nach Microsoft suchen. Die Seite sollte bei der Übermittlung jedes Mal mit den richtigen Ergebnissen erneut geladen werden.

Konfigurieren von Rollen für die lokale Entwicklung

Der vorhandene Code und die Konfiguration der App können auch während der Entwicklung lokal ausgeführt werden. Die zuvor konfigurierte DefaultAzureCredential-Klasse kann lokale Umgebungsanmeldeinformationen ermitteln, um sich bei Azure-Diensten zu authentifizieren. Sie müssen Ihrem eigenen Konto die gleichen Rollen zuweisen, die der verwalteten Identität zugewiesen wurden, damit die Authentifizierung funktioniert. Dies sollte dasselbe Konto sein, das Sie zum Anmelden bei Visual Studio oder der Azure CLI verwenden.

Anmelden bei Ihrer lokalen Entwicklungsumgebung

Sie müssen bei der Azure CLI, Visual Studio oder Azure PowerShell angemeldet sein, damit Ihre Anmeldeinformationen von DefaultAzureCredential ermittelt werden können.

az login

Zuweisen von Rollen zu Ihrem Entwicklerkonto

  1. Navigieren Sie im Azure-Portal zu dem scalablerazor****-Speicherkonto, das Sie zuvor erstellt haben.
  2. Wählen Sie im linken Navigationsbereich Zugriffssteuerung (IAM) aus.
  3. Wählen Sie + Hinzufügen und dann Rollenzuweisung hinzufügen aus dem Dropdownmenü aus.
  4. Suchen Sie auf der Seite Rollenzuweisung hinzufügen nach Storage blob data contributor, wählen Sie das entsprechende Ergebnis aus, und wählen Sie dann Weiter aus.
  5. Stellen Sie sicher, dass User, group, or service principal (Benutzer, Gruppe oder Dienstprinzipal) ausgewählt ist, und wählen Sie dann + Mitglieder auswählen aus.
  6. Suchen Sie im Flyout Mitglieder auswählen nach Ihrem eigenen Benutzer@Domäne-Konto, und wählen Sie es aus den Ergebnissen aus.
  7. Wählen Sie Weiter und dann Überprüfen + zuweisen aus. Nachdem Azure die Einstellungen überprüft hat, wählen Sie Überprüfen + zuweisen aus.

Wie bereits erwähnt kann die Verteilung von Rollenzuweisungsberechtigungen ein oder zwei Minuten (oder in seltenen Fällen bis zu acht Minuten) dauern.

Wiederholen Sie die vorherigen Schritte, um Ihrem Konto eine Rolle zuzuweisen, damit sie auf den Schlüsseltresordienst und das Geheimnis zugreifen kann.

  1. Navigieren Sie im Azure-Portal zum zuvor erstellten razorscalingkeys-Schlüsseltresor.
  2. Wählen Sie im linken Navigationsbereich Zugriffssteuerung (IAM) aus.
  3. Wählen Sie + Hinzufügen und dann Rollenzuweisung hinzufügen aus dem Dropdownmenü aus.
  4. Suchen Sie auf der Seite Rollenzuweisung hinzufügen nach Key Vault Crypto Service Encryption User, wählen Sie das entsprechende Ergebnis aus, und wählen Sie dann Weiter aus.
  5. Stellen Sie sicher, dass User, group, or service principal (Benutzer, Gruppe oder Dienstprinzipal) ausgewählt ist, und wählen Sie dann + Mitglieder auswählen aus.
  6. Suchen Sie im Flyout Mitglieder auswählen nach Ihrem eigenen Benutzer@Domäne-Konto, und wählen Sie es aus den Ergebnissen aus.
  7. Wählen Sie Weiter und dann Überprüfen + zuweisen aus. Nachdem Azure die Einstellungen überprüft hat, wählen Sie Überprüfen + zuweisen aus.

Möglicherweise müssen Sie erneut warten, bis diese Rollenzuweisung verteilt wird.

Sie können dann zu Visual Studio zurück navigieren und die App lokal ausführen. Der Code sollte weiterhin wie erwartet funktionieren. DefaultAzureCredential verwendet Ihre vorhandenen Anmeldeinformationen aus Visual Studio oder der Azure CLI.

Zuverlässige Web-App-Muster

Eine Anleitung zum Erstellen einer modernen, zuverlässigen, leistungsfähigen, testbaren, kosteneffizienten und skalierbaren ASP.NET Core-App finden Sie in den YouTube-Videos und im Artikel zur zuverlässigen Web App für .NET – ganz gleich, ob Sie eine App von Grund auf neu erstellen oder umgestalten möchten.