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.
Sie können eine Multi-Container-App mithilfe von Visual Studio in Azure-Container-Apps bereitstellen. In der Regel stellen Sie jeden Container in einer separaten Container-App-Instanz bereit, fügen aber alle Container Ihrer App in die gleiche Container-App-Umgebung ein, damit sie problemlos und sicher miteinander kommunizieren können. Sie können jede Container-App so konfigurieren, dass Anforderungen aus der Containerumgebung akzeptiert werden, oder um externen Datenverkehr zuzulassen. Azure-Container-Apps sind sehr flexibel und konfigurierbar, was viele mögliche Microservices-Szenarien und eine vollständige Reihe erweiterter Überwachungstools ermöglicht. Wenn Sie Docker Compose zum Verwalten lokaler Container-Apps verwenden, sollten Sie versuchen, sie in eine Container-App-Umgebung in Azure zu portieren.
Der Prozess umfasst einige Schritte mit Visual Studio und dem Azure-Portal. Sie können auch die Azure CLI verwenden, um diese Aktionen auszuführen, aber das liegt außerhalb des Umfangs dieses Lernprogramms. Zunächst verwenden wir die App, die Sie mit der Erstellung einer Multicontainer-App erstellt haben, und stellen sie mithilfe des Veröffentlichungsprozesses bereit. Visual Studio führt Sie durch die Schritte zum Erstellen der ersten Container-App, einer Container-App-Umgebung und zum Erstellen einer Containerregistrierung zum Speichern der Containerimages. Anschließend führen Sie den Veröffentlichungsprozess erneut mit der anderen Container-App durch. Sie müssen im Veröffentlichungsprozess die gleiche Container-App-Umgebung auswählen. Schließlich müssen Sie den Redis-Cache für die Arbeit mit dem Azure Redis-Cachedienst konfigurieren. Sie ändern den Cachekonfigurationscode und veröffentlichen die Web-API erneut. Anschließend konfigurieren Sie die Berechtigungen, um dem Cache den vom System zugewiesenen verwalteten Identitätszugriff der App zu gewähren.
Voraussetzungen
- Ein Azure-Abonnement. Registrieren Sie sich für eine kostenlose Testversion.
- Visual Studio 2022 oder höher mit installierten Azure-Entwicklungs- und Webentwicklungsworkloads.
- Das MulticontainerSample-Projekt im
https://github.com/MicrosoftDocs/vs-tutorial-samples
Docker-Ordner . Die Beispiellösung enthält zwei Projekte, das Web-API-Back-End und das ASP.NET Razor-Front-End, wie Sie in einem anderen Lernprogramm erstellt haben. Sie können auch die beiden Projekte von Grund auf neu erstellen, da sie sehr einfache Änderungen der Standardvorlagen sind, indem Sie diesem Lernprogramm folgen. Sie können die Docker Compose-Schritte überspringen.
Bereitstellen des Web-API-Back-Ends
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Web-API-Projektknoten, und wählen Sie "Veröffentlichen" aus.
Wählen Sie das Ziel Azure und dann Azure-Container-Apps aus.
Wenn Sie noch nicht mit einem Konto angemeldet sind, das einem Azure-Abonnement zugeordnet ist, können Sie sich jetzt anmelden oder den Mandanten ändern, falls erforderlich.
Wählen Sie auf dem Bildschirm, auf dem Sie eine Container-App angeben, " Neu erstellen" aus, um eine neue Container-App zu erstellen.
Geben Sie auf der Seite "Azure Container-App erstellen " Details wie die Ressourcengruppe ein. Für diesen Schritt erstellen Sie eine neue Ressourcengruppe, eine neue Containerumgebung und eine neue Containerregistrierung.
Es kann etwas dauern, bis die Ressourcen erstellt werden. Klicken Sie nach Abschluss des Vorgangs auf "Weiter ", um zum nächsten Schritt zu wechseln.
Im nächsten Schritt erstellen Sie eine Containerregistrierung. Wenn Sie eine neue Containerregistrierung erstellen, werden Sie nach einigen Details gefragt. Sie können dieselbe Region und Ressourcengruppe wie die Container-App auswählen.
Im nächsten Schritt werden Sie aufgefordert, den Container-Build-Typ auszuwählen. Wählen Sie .NET SDK aus, wenn Sie nicht über eine Dockerfile- oder Docker Desktop-Datei verfügen.
Wählen Sie für den Bereitstellungstyp "Veröffentlichen" (Pubxml-Datei generieren) aus, um ein Veröffentlichungsprofil zu erstellen.
Wählen Sie "Fertig stellen" aus, um den Veröffentlichungsprozess abzuschließen und ein Veröffentlichungsprofil zu erstellen. Wenn eine Aufforderung zur zusätzlichen Konfiguration für den Zugriff auf den veröffentlichten Container angezeigt wird, wählen Sie "Ja" aus.
Sie sehen eine Seite, auf der die Aktivität in Azure angezeigt wird, und wenn Sie sie schließen, enthält der Bildschirm "Veröffentlichen" jetzt die Informationen Ihrer Container-App, z. B. die URL für den Zugriff auf die Web-API.
Klicken Sie auf die Schaltfläche " Veröffentlichen ", um sie in der Azure-Container-App zu veröffentlichen. Visual Studio fordert an, dass die Azure-Ressourcen erstellt werden, und startet den Veröffentlichungsprozess für die WebAPI-Container-App.
Visual Studio versucht möglicherweise, die Seite für die neue Container-App zu laden, dies würde jedoch in dieser Phase nicht funktionieren.
Nachdem Sie nun einmal veröffentlicht haben, haben Sie ein Veröffentlichungsprofil (.pubxml
Datei) erstellt, sodass Sie diese Schritte nicht wiederholen müssen, wenn Sie das nächste Mal veröffentlichen. Klicken Sie einfach auf die Schaltfläche " Veröffentlichen " auf diesem Bildschirm, es sei denn, Sie möchten mit dem Start beginnen oder eine der von Ihnen angegebenen Azure-Ressourcen ändern.
Später verwenden Sie das Azure-Portal, um weitere Konfigurationsänderungen für den Ingress vorzunehmen und den Azure Redis-Cache zu unterstützen, aber zuerst veröffentlichen Sie im nächsten Abschnitt das Web-Front-End.
Das Frontend bereitstellen
Ändern Sie die Front-End-Codedatei in Index.cshtml.cs , um auf die neue URL für die Web-API-Container-App zu verweisen. Dies ist der Name, der unter „Ressourcenname“ im Bildschirm „Website-API veröffentlichen“ angezeigt wird. Bei der Container-zu-Container-Kommunikation können Sie HTTP direkt mit dem Namen der Container-App verwenden, ohne einen vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) und eine Portnummer anzugeben. Ersetzen Sie in der
OnGet
Methode die vorhandene Zeile, dieRequestUri
auf den Namen der Web-API-Container-App setzt, wie im folgenden Code.request.RequestUri = new Uri("http://<mywebapi-container-app-name>/Counter");
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten für das Webfrontend-Projekt, und wählen Sie "Veröffentlichen" aus. Wählen Sie auf dem nächsten Bildschirm " Neu erstellen" aus, um eine neue Container-App zu erstellen.
Wählen Sie auf dem Bildschirm " Neue Azure-Container-App erstellen " die gleiche Ressourcengruppe und dieselbe Containerumgebung aus, die Sie beim Veröffentlichen des Web-API-Projekts erstellt haben.
Wichtig! Wählen Sie dieselbe Containerregistrierung aus, die Sie zuvor erstellt haben.
Wählen Sie die gleichen Optionen wie für die Web-API für die anderen Schritte aus. Der Containerbuildtyp ist Docker Desktop, und der Bereitstellungstyp ist Publish (generiert pubxml-Datei).
Wählen Sie "Fertig stellen" aus, um den Veröffentlichungsprozess abzuschließen und ein Veröffentlichungsprofil zu erstellen. Sie sehen eine Seite, auf der die Aktivität in Azure angezeigt wird, und wenn Sie sie schließen, enthält der Bildschirm "Veröffentlichen" jetzt die Informationen Ihrer Container-App, z. B. die URL für den Ausgang zur Webfrontend-App.
Anzeigen und Konfigurieren der Container-Apps im Azure-Portal
- Melden Sie sich beim Azure-Portal an.
- Suchen Sie nach Container-Apps und finden Sie die Apps, die Sie gerade erstellt haben.
- Wählen Sie Ingress aus, und konfigurieren Sie die folgenden Optionen:
Legen Sie auf dem Ingress-Bildschirm den Ingress-Datenverkehr auf "Beschränkt auf Container-Apps-Umgebung" fest. Dies bedeutet, dass nur die Webfrontend Anforderungen senden kann. Auch Visual Studio kann nicht auf diesen Dienst zugreifen, z. B. wenn Sie den Veröffentlichungsprozess abschließen und Visual Studio versucht, die Seite zu laden, erhalten Sie eine Fehlermeldung im Browser, anstatt auf den Dienst zuzugreifen. Dies wird erwartet.
Überprüfen Sie den Eingangsport (es sollte 8080 sein). Sie verwenden HTTP für den Web-API-Aufruf, und Sie können direkt auf die Container-App im Anforderungs-URI verweisen. Der vollqualifizierte Domänenname (Fully Qualified Domain Name, FQDN), der von Azure Container-Apps generiert wird, verwendet eine HTTPS-URL (wie in Visual Studio auf dem Veröffentlichungsbildschirm angezeigt), aber interner Datenverkehr kann dies umgehen.
Für den Webfrontend-Ingress können Sie die Standardwerte akzeptieren. Der Zielport ist 8080, da der Ingress alle Anforderungen sicher mithilfe des FQDN und HTTPS (oder HTTP zu HTTPS-Umleitung) verarbeitet und über HTTP am Containerport 8080 an den Webfrontend weiterleitet.
Erstellen des Azure Redis-Caches
Führen Sie die folgenden Schritte aus, um einen Azure Redis-Cache in derselben Ressourcengruppe wie die Container-Apps zu erstellen.
Öffnen Sie im Azure-Portal die Zuvor erstellte Web-API-Container-App. Öffnen Sie den Bildschirm "Service Connector ", und wählen Sie " Erstellen" aus. Der Abschnitt "Verbindung erstellen " wird angezeigt.
Geben Sie auf dem Bildschirm "Verbindung erstellen " den Diensttyp als Cache für Redis ein, und wählen Sie "Neu erstellen" aus, um einen neuen Redis-Cache zu erstellen.
Wählen Sie einen Cache aus, oder folgen Sie dem Link " Neuen Erstellen", um einen Cache zu erstellen. Wenn Sie einen neuen Cache erstellen, müssen Sie möglicherweise zur Container-App und zum Service Connector zurückkehren und die vorherigen Schritte wiederholen, um die Verbindung zu erstellen.
Wählen Sie für die Datenbank "0" aus, um die erste nummerierte Datenbank für diesen Cache zu erstellen.
Wechseln zur Registerkarte "Authentifizierung ". Wählen Sie vom System zugewiesene verwaltete Identität aus. Übernehmen Sie alle anderen Standardwerte, und wählen Sie "Erstellen" aus. Dadurch wird die Verbindung zum Cache erstellt.
Aktualisieren Sie die Anzeige im Web-API-Container-App-Abschnitt "Service Connector", um den neu verbundenen Cache zu sehen (falls er nicht bereits angezeigt wird), und markieren Sie das Kontrollkästchen neben dem Cache. Wählen Sie "Überprüfen" aus, um den Status der Verbindung zu überprüfen. Sie können den Cacheknoten erweitern, um die Werte für die Umgebungsvariablen für diesen Azure-Cache anzuzeigen. Im Rahmen dieses Lernprogramms benötigen Sie nur AZURE_REDIS_HOST, aber Sie können die anderen im realen Code oder für eine umfassendere Konfiguration verwenden. Verwenden Sie hier die Werte, um die Umgebungsvariablen in der Dockerfile-Datei festzulegen, wie im nächsten Abschnitt beschrieben, damit die Web-API eine Verbindung mit dem Cache herstellen kann.
Weitere Informationen finden Sie in der Schnellstartanleitung: Erstellen einer Dienstverbindung für Azure-Container-Apps aus dem Azure-Portal.
Konfigurieren von Rollen für verwaltete Identität
Im Azure-Portal verwenden Sie access Control (IAM) im Azure Redis-Cache, um mitwirkenden Zugriff auf die vom System zugewiesene verwaltete Identität der Container-App zu gewähren.
- Öffnen Sie im Azure-Portal die Seite für den Azure Redis-Cache, und wählen Sie Access Control (IAM) aus.
- Wählen Sie Hinzufügen>Rollenzuweisung hinzufügen. Die Seite " Rollenzuweisung hinzufügen " wird geöffnet.
- Wählen Sie die Registerkarte " Mitglieder " und dann "Verwaltete Identität" aus.
- Wählen Sie "Mitglieder auswählen" aus. Die Seite " Mitglieder auswählen " wird geöffnet, und wählen Sie die vom System zugewiesene verwaltete Identität aus.
- Wählen Sie "Container-App" und dann die Web-API-Container-App aus.
- Wählen Sie auf der Registerkarte " Rolle " die Option "Redis Cache-Mitwirkender" aus.
- Wählen Sie Überprüfen und zuweisen aus. Das System verarbeitet die Anforderung.
- Öffnen Sie Rollenzuweisungen , um die vom System zugewiesene verwaltete Identität unter der Rolle "Redis Cache-Mitwirkender" anzuzeigen.
Der nächste Schritt besteht darin, die Cachekonfiguration im Web-API-Client so zu ändern, dass DefaultAzureCredential
verwendet wird, was die empfohlene Methode zur Authentifizierung ist, wenn Sie die vom System zugewiesene verwaltete Identität nutzen. Jeder, der extern auf die Anwendung zugreift, muss keine bestimmten Rollenzuweisungen auf Benutzerebene haben, um über diese Form der Identitätsverwaltung auf die Ressourcen zuzugreifen. Weitere Informationen finden Sie unter Integrieren des Azure Redis-Caches – vom System zugewiesene verwaltete Identität.
Ändern des Web-API-Projekts, um auf den Azure Redis-Cachedienst zu verweisen
Bevor Sie das Web-API-Projekt veröffentlichen, das in Azure ausgeführt werden soll, aktualisieren Sie es, um auf azure Redis Cache zu verweisen und eine verwaltete Identität zu verwenden, um sicher darauf zuzugreifen. Um dies zu berücksichtigen, können Sie den Cachekonfigurationscode in Program.cs ändern.
Für Azure Redis Cache legen Sie eine Umgebungsvariable AZURE_REDIS_HOST
mit den Verbindungsinformationen fest und lesen sie dann im Startcode, um eine Verbindung mit Azure Redis Cache herzustellen und den Cache zu konfigurieren.
Sie verwenden Azure.Identity
, um die DefaultAzureCredential
zu erhalten, die die sichere Authentifizierung mit Ihrer verwalteten Identität abwickelt.
Fügen Sie in Visual Studio im Web-API-Projekt einen Verweis auf die NuGet-Pakete
Azure Identity
undMicrosoft.Azure.StackExchange.Redis
.Fügen Sie die soeben hinzugefügten Pakete mithilfe von Direktiven hinzu.
using Azure.Identity; using Microsoft.Azure.StackExchange.Redis;
Aktualisieren Sie den Konfigurationscode für den Redis-Cache. Löschen Sie den alten Code, und ersetzen Sie ihn durch den folgenden Code. Sie können die Kommentare später überprüfen und einen beliebigen optionalen Code für Ihre eigenen erweiterten Szenarien aufheben.
// Check the environment variable for the Redis cache host name var cacheHostName = Environment.GetEnvironmentVariable("AZURE_REDIS_HOST"); if (string.IsNullOrEmpty(cacheHostName)) { throw new InvalidOperationException("The environment variable 'AZURE_REDIS_HOST' is not set."); } var configurationOptions = ConfigurationOptions.Parse($"{cacheHostName}:6380"); // For system-assigned identity. // In the Azure portal, we need to set up Redis service to grant Contributor access to the system-assigned identity // for the container app that hosts this Web API service. await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential()); var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(configurationOptions); builder.Services.AddStackExchangeRedisCache(options => { options.ConfigurationOptions = configurationOptions; options.InstanceName = "SampleInstance"; }); // Uncomment the following line if you need to use the ConnectionMultiplexer directly // (for example, for advanced Redis operations like Pub/Sub or working with Redis data structures). // builder.Services.AddSingleton<IConnectionMultiplexer>(sp => // ConnectionMultiplexer.Connect(configurationOptions));
Die Authentifizierungsmethode, die Sie zuvor festgelegt haben, wenn Sie die Cacheverbindung erstellt haben, ist vom System zugewiesene verwaltete Identität, sodass der code hier mit dieser Auswahl konsistent ist. Wenn Sie auch andere Authentifizierungsmethoden verwenden möchten, müssen Sie hier Änderungen am Code vornehmen. Siehe Integrieren von Azure Redis Cache – vom System zugewiesene verwaltete Identität.
Erstellen Sie das Web-API-Projekt, um zu überprüfen, ob keine Fehler vorhanden sind.
Wenn Sie über eine Dockerfile-Datei verfügen, aktualisieren Sie die Basisphase der Dockerfile-Datei, um die Umgebungsvariable
AZURE_REDIS_HOST
zu definieren. Sie erhalten den Host aus dem Azure-Portal, wenn Sie den Azure Redis-Cache erstellen, oder über den Service Connector-Abschnitt der Web-API-Container-App-Seite im Portal (siehe vorheriger Abschnitt).ENV AZURE_REDIS_HOST mycache.redis.cache.windows.net
(Optional) Sie können andere Konfigurationsoptionen in Umgebungsvariablen definieren,
AZURE_REDIS_PORT
z. B. 6380. Aus Gründen der Einfachheit ist dieser Wert hartcodiert, anstatt eine Umgebungsvariable zu verwenden. Möglicherweise möchten Sie auchASPNETCORE_ENVIRONMENT
auf Entwicklung festlegen.Wenn Sie den .NET SDK-Containerbuildtyp (ohne Dockerfile) verwenden, können Sie die Umgebungsvariable in launchSettings.json unter
profiles > http
festlegen."http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "http://localhost:5107", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "AZURE_REDIS_HOST": "cache11.redis.cache.windows.net" } }
Sie sind bereit, diese Änderungen zu veröffentlichen und zu überprüfen. Wählen Sie auf dem Bildschirm "Veröffentlichen" die Schaltfläche "Veröffentlichen" aus. Visual Studio versucht, die Seite zu laden. Dies schlägt jedoch fehl, da auf die Web-API-Container-App nicht auf Anforderungen außerhalb der Container-App-Umgebung zugegriffen werden kann.
Bevor Sie die Anwendung mit dem Azure Redis-Cache ausführen können, müssen Sie die verwaltete Identität mit den richtigen Berechtigungen für den Zugriff auf den Cache einrichten.
Testen der Anwendung
Wechseln Sie zurück zum Bildschirm "Veröffentlichen" im Webfrontend-Projekt, und klicken Sie auf den Link auf der Webfrontend-URL. Die Webfrontend-App sollte mit dem Zähler erscheinen, der aktualisiert wird, wenn Sie die Seite neu laden.
Tipp
Azure Container-Apps versuchen, die Betriebszeit Ihrer Dienste zu maximieren. Wenn bei einem der Dienste ein Fehler auftritt, sodass ein Integritätstest fehlschlägt, wird es von Azure Container-Apps nicht als aktive Revision festgelegt und verwendet, um Anforderungen zu erfüllen. Daher stellen Sie während des Entwicklungs- und Testprozesses gelegentlich fest, dass die von Ihnen vorgenommenen Änderungen nicht in der Livewebsite widerspiegelt werden. Wählen Sie im Azure-Portal Überarbeitungen und Replikate aus, um den Status Ihrer neuesten veröffentlichten Revision anzuzeigen. Von dort aus können Sie Protokolle öffnen, um das Problem zu beheben.
Glückwunsch! Sie haben erfolgreich eine Multicontainer-App in Azure Container Apps veröffentlicht und die Kommunikation zwischen Containern sowie die Nutzung des Azure Redis Cache innerhalb der App überprüft.
Bereinigen von Ressourcen
Um die ressourcen zu bereinigen, die Sie während dieses Lernprogramms erstellt haben, wechseln Sie zum Azure-Portal, und löschen Sie die Ressourcengruppe, die die Container-Apps, den Cache und die Containerregistrierung enthält.
Nächste Schritte
- Weitere Informationen zu Azure-Container-Apps.
- Erfahren Sie mehr über .NET Aspire, eine Technologie, die Ihnen hilft, komplexe containerisierte Apps und Dienste zu entwickeln, die in verschiedene Ressourcen in Azure integriert werden. .NET Aspire unterstützt die Entwicklungszeit-Orchestrierung, die standardisierte Integration in ein Array von Diensten sowie die Toolunterstützung mit Visual Studio-Projektvorlagen.
- Sie können auch die Azure-Befehlszeilenschnittstelle (CLI) verwenden, um mit Ihren Container-Apps zu arbeiten. Installieren Sie Azure CLI , und beginnen Sie mit der Arbeit mit Azure-Container-Apps mithilfe der Azure CLI-Befehle, indem Sie den Befehl "Bereitstellen von Azure-Container-Apps" mit dem Befehl "az containerapp up" ausführen.