Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt een app met meerdere containers implementeren in Azure Container Apps met behulp van Visual Studio. Normaal gesproken implementeert u elke container in een afzonderlijk exemplaar van een container-app, maar u neemt alle containers van uw app op in dezelfde container-app-omgeving, zodat ze eenvoudig en veilig met elkaar kunnen communiceren. U kunt elke container-app configureren om aanvragen vanuit de containeromgeving te accepteren of om verkeer van buitenaf toe te staan. Azure Container Apps is zeer flexibel en configureerbaar, waardoor veel mogelijke microservicesscenario's en een volledige set geavanceerde bewakingshulpprogramma's mogelijk zijn. Als u Docker Compose gebruikt om on-premises container-apps te beheren, kunt u overwegen deze over te zetten naar een container-app-omgeving in Azure.
Het proces omvat een paar stappen met Behulp van Visual Studio en Azure Portal. U kunt de Azure CLI ook gebruiken om deze acties uit te voeren, maar dat valt buiten het bereik van deze zelfstudie. Eerst gebruiken we de app die u hebt gebouwd met behulp van de app Een app met meerdere containers maken en implementeren we deze met behulp van het publicatieproces . Visual Studio begeleidt u bij de stappen voor het maken van de eerste container-app, een container-app-omgeving en het maken van een containerregister om de containerinstallatiekopieën op te slaan. Vervolgens voert u het publicatieproces opnieuw uit met de andere container-app. U moet in het publicatieproces specifiek dezelfde container-app-omgeving kiezen. Ten slotte moet u de Redis-cache configureren voor gebruik met de Azure Redis Cache-service. U wijzigt de cacheconfiguratiecode en publiceert de web-API opnieuw. Vervolgens configureert u de machtigingen om de door het systeem toegewezen beheerde identiteit van de app toegang te verlenen tot de cache.
Vereiste voorwaarden
- Een Azure-abonnement. Meld u aan voor een gratis proefversie.
- Visual Studio met de Azure-ontwikkel - en ASP.NET- en webontwikkelingsworkloads geïnstalleerd.
- Het project
https://github.com/MicrosoftDocs/vs-tutorial-samplesMulticontainerSample in de map docker. De voorbeeldoplossing bevat twee projecten, de web-API-back-end en de ASP.NET Razor-front-end, zoals u in een andere zelfstudie hebt gemaakt. U kunt ook de twee projecten helemaal zelf maken, omdat ze zeer eenvoudige wijzigingen van de standaardsjablonen zijn door deze zelfstudie te volgen. U kunt de stappen voor Docker Compose overslaan.
Vereiste voorwaarden
- Een Azure-abonnement. Meld u aan voor een gratis proefversie.
- Visual Studio of hoger met de Azure-ontwikkel - en ASP.NET- en webontwikkelingsworkloads geïnstalleerd.
- Het project
https://github.com/MicrosoftDocs/vs-tutorial-samplesMulticontainerSample in de map docker. De voorbeeldoplossing bevat twee projecten, de web-API-back-end en de ASP.NET Razor-front-end, zoals u in een andere zelfstudie hebt gemaakt. U kunt ook de twee projecten helemaal zelf maken, omdat ze zeer eenvoudige wijzigingen van de standaardsjablonen zijn door deze zelfstudie te volgen. U kunt de stappen voor Docker Compose overslaan.
De web-API-back-end implementeren
Klik in Solution Explorer met de rechtermuisknop op het web-API-projectknooppunt en selecteer Publiceren.
Kies de doel-Azure en selecteer vervolgens Azure Container Apps.
Als u nog niet bent aangemeld met een account dat is gekoppeld aan een Azure-abonnement, kunt u zich nu aanmelden of de tenant desgewenst wijzigen.
Selecteer op het scherm waarin u een container-app opgeeft, Nieuwe maken om een nieuwe container-app te maken.
Voer op de pagina Azure Container-app maken details in, zoals de resourcegroep. Voor deze stap maakt u een nieuwe resourcegroep, een nieuwe containeromgeving en een nieuw containerregister.
Het kan even duren voordat de middelen zijn gemaakt. Wanneer dit is voltooid, klikt u op Volgende om naar de volgende stap te gaan.
In de volgende stap maakt u een containerregister. Als u een nieuw containerregister maakt, wordt u om enkele details gevraagd. U kunt dezelfde regio en resourcegroep kiezen als de container-app.
In de volgende stap wordt u gevraagd het type containerbuild te kiezen. Kies .NET SDK als u geen Dockerfile of Docker Desktop hebt als u dat wel doet.
Voor het implementatietype kiest u Publiceren (pubxml-bestand genereren) om een publicatieprofiel te maken.
Selecteer Voltooien om het publicatieproces te voltooien en maak een publicatieprofiel. Als u een prompt ziet over extra configuratie voor toegang tot de gepubliceerde container, kiest u Ja.
U ziet een pagina met de activiteit in Azure en wanneer u deze sluit, bevat het scherm Publiceren nu de gegevens van uw container-app, zoals de URL voor inkomend verkeer naar de web-API.
Klik op de knop Publiceren om te publiceren naar de Azure-container-app. Visual Studio vraagt of de Azure-resources worden gemaakt en start het publicatieproces voor de WebAPI-container-app.
Visual Studio kan proberen de pagina voor de nieuwe container-app te laden, maar het is niet de verwachting dat dit in deze fase werkt.
Nu u eenmaal hebt gepubliceerd, hebt u een publicatieprofiel (.pubxml bestand) gemaakt, zodat u deze stappen niet hoeft te herhalen wanneer u de volgende keer publiceert. Klik op de knop Publiceren op dit scherm, tenzij u opnieuw wilt beginnen of een van de opgegeven Azure-resources wilt wijzigen.
Later gebruikt u de Azure portal om verdere configuratiewijzigingen aan te brengen voor de Ingress en om de Azure Redis Cache te ondersteunen, maar eerst publiceert u de webfront-end in de volgende sectie.
De front-end implementeren
Wijzig het front-endcodebestand in Index.cshtml.cs om te verwijzen naar de nieuwe URL voor de web-API-container-app. Dit is de naam die wordt weergegeven onder Resourcenaam in het scherm Publiceren van web-API. Voor communicatie tussen containers kunt u rechtstreeks HTTP gebruiken met de naam van de container-app, zonder een FQDN (Fully Qualified Domain Name) en poortnummer op te geven. Vervang in de
OnGet-methode de bestaande regel die de naam van deRequestUriweb-API-container-app instelt, zoals in de volgende code.request.RequestUri = new Uri("http://<mywebapi-container-app-name>/Counter");Klik in Solution Explorer met de rechtermuisknop op het projectknooppunt voor het webfrontend-project en selecteer Publiceren. Selecteer in het volgende scherm Nieuwe maken om een nieuwe container-app te maken.
Kies in het scherm Nieuwe Azure-container-app maken dezelfde resourcegroep en dezelfde containeromgeving die u hebt gemaakt bij het publiceren van het web-API-project.
Belangrijk! Selecteer hetzelfde containerregister dat u eerder hebt gemaakt.
Kies dezelfde opties als voor de web-API voor de andere stappen. Het type containerbuild is Docker Desktop en het implementatietype is Publiceren (genereert pubxml-bestand).
Selecteer Voltooien om het publicatieproces te voltooien en maak een publicatieprofiel. U ziet een pagina met de activiteit in Azure en wanneer u deze sluit, bevat het scherm Publiceren nu de gegevens van uw container-app, zoals de URL voor inkomend verkeer naar de webfrontend-app.
De container-apps weergeven en configureren in Azure Portal
- Meld u aan bij het Azure-portaal.
- Zoek naar container-apps en zoek de apps die u zojuist hebt gemaakt.
- Kies Ingress en configureer de volgende opties:
Stel in het scherm Inkomendverkeer in op Beperkt tot Container Apps-omgeving. Dit betekent dat alleen de Webfrontend aanvragen kan verzenden. Zelfs Visual Studio heeft geen toegang tot deze service, bijvoorbeeld wanneer u het publicatieproces voltooit en Visual Studio probeert de pagina te laden, er wordt een fout weergegeven in de browser in plaats van toegang te krijgen tot de service. Dit wordt verwacht.
Controleer de poort voor inkomend verkeer (dit moet 8080 zijn). U gebruikt HTTP voor de web-API-aanroep en u kunt rechtstreeks naar de container-app verwijzen op naam in de aanvraag-URI. De FQDN (Fully Qualified Domain Name) die door Azure Container-apps wordt gegenereerd, maakt gebruik van een HTTPS-URL (zoals weergegeven in Visual Studio op het publicatiescherm ), maar intern verkeer kan dat omzeilen.
Voor de Webfrontend Ingress kunt u de standaardwaarden accepteren. De doelpoort is 8080, omdat de ingress alle aanvragen veilig verwerkt met behulp van de FQDN en HTTPS (of omleiding van HTTP naar HTTPS) en ze doorstuurt naar de webfrontend via HTTP op containerpoort 8080.
De Azure Redis Cache maken
Volg deze stappen om een Azure Redis Cache te maken in dezelfde resourcegroep als de container-apps.
Open in Azure Portal de web-API-container-app die u eerder hebt gemaakt. Open het scherm Serviceconnector en selecteer Maken. De sectie Verbinding maken wordt weergegeven.
Voer in het scherm Verbinding maken het servicetype in als Cache voor Redis en kies Nieuwe maken om een nieuwe Redis-cache te maken.
Kies een cache of volg de Nieuw maken koppeling om een cache te maken. Als u een nieuwe cache maakt, moet u mogelijk terugkeren naar de container-app en serviceconnector en de vorige stappen herhalen om de verbinding te maken.
Kies voor de database '0' om de eerste genummerde database voor deze cache te maken.
Naar het tabblad Verificatie gaan. Kies Door het systeem toegewezen beheerde identiteit. Accepteer alle andere standaardwaarden en selecteer Maken. Hiermee maakt u de verbinding met de cache.
Terug in de sectie Serviceconnector van de web-API-container-app, ververs de pagina om de recent verbonden cache te zien (als u deze nog niet ziet) en selecteer het selectievakje naast de cache. Selecteer Valideren om de status van de verbinding te controleren. U kunt het cacheknooppunt uitbreiden om de waarden voor de omgevingsvariabelen voor die Azure-cache te bekijken. Voor deze zelfstudie hebt u alleen AZURE_REDIS_HOST nodig, maar u kunt de anderen gebruiken in echte code of voor een volledigere configuratie. Gebruik de waarden hier om de omgevingsvariabelen in te stellen in het Dockerfile, zoals beschreven in de volgende sectie, zodat web-API verbinding kan maken met de cache.
Zie quickstart: Een serviceverbinding maken voor Azure Container Apps vanuit Azure Portal voor meer informatie.
Rollen configureren voor beheerde identiteit
In Azure Portal gebruikt u Toegangsbeheer (IAM) in de Azure Redis Cache om inzender toegang te verlenen tot de door het systeem toegewezen beheerde identiteit van de container-app.
- Open in Azure Portal de pagina voor de Azure Redis Cache en selecteer Toegangsbeheer (IAM).
- Selecteer Toevoegen>Roltoewijzing toevoegen. De pagina Roltoewijzing toevoegen wordt geopend.
- Selecteer het tabblad Leden en kies beheerde identiteit.
- Selecteer Leden selecteren. De pagina Leden selecteren wordt geopend en selecteer door het systeem toegewezen beheerde identiteit.
- Selecteer Container App en kies de web-API-containerapplicatie.
- Kies Op het tabblad Rolde optie Inzender voor Redis Cache.
- Selecteer Controleren en toewijzen. Het systeem verwerkt de aanvraag.
- Open roltoewijzingen om de door het systeem toegewezen beheerde identiteit te zien onder de rol Inzender voor Redis Cache .
De volgende stap is het wijzigen van de cacheconfiguratie in de web-API-client voor het gebruik van de DefaultAzureCredential, wat de aanbevolen manier is om te verifiëren wanneer u de door het systeem toegewezen beheerde identiteit gebruikt. Iedereen die de toepassing extern opent, hoeft geen specifieke roltoewijzingen op gebruikersniveau te hebben om toegang te krijgen tot de resources via deze vorm van identiteitsbeheer. Zie Azure Redis Cache integreren - Door het systeem toegewezen beheerde identiteit voor meer informatie.
Het web-API-project wijzigen om te verwijzen naar de Azure Redis Cache-service
Voordat u het web-API-project publiceert dat moet worden uitgevoerd in Azure, moet u het bijwerken om te verwijzen naar Azure Redis Cache en een beheerde identiteit gebruiken om het veilig te openen. Hiervoor kunt u de cacheconfiguratiecode in Program.cs wijzigen.
Voor Azure Redis Cache stelt u een omgevingsvariabele AZURE_REDIS_HOST in met de verbindingsgegevens en leest u deze vervolgens in de opstartcode om verbinding te maken met Azure Redis Cache en configureert u de cache.
U gebruikt Azure.Identity om de DefaultAzureCredential te verkrijgen voor veilige verificatie met uw beheerde identiteit.
Voeg in Visual Studio in het web-API-project een verwijzing toe naar de NuGet-pakketten
Azure IdentityenMicrosoft.Azure.StackExchange.Redis.Voeg gebruiksrichtlijnen toe voor de pakketten die u zojuist hebt toegevoegd.
using Azure.Identity; using Microsoft.Azure.StackExchange.Redis;Werk de configuratiecode voor de Redis Cache bij. Verwijder de oude code en vervang deze door de volgende code. U kunt de opmerkingen later bekijken en opmerkingen bij elke optionele code ongedaan maken voor uw eigen geavanceerdere scenario's.
// 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));De verificatiemethode die u eerder hebt ingesteld toen u de cacheverbinding maakte, is door het systeem toegewezen beheerde identiteit, dus de code hier is consistent met die keuze. Als u ook een andere verificatiemethode wilt gebruiken, moet u hier wijzigingen aanbrengen in de code. Zie Azure Redis Cache integreren - Door het systeem toegewezen beheerde identiteit.
Bouw het web-API-project om te controleren of er geen fouten zijn.
Als u een Dockerfile hebt, werkt u de basisfase van het Dockerfile bij om de omgevingsvariabele
AZURE_REDIS_HOSTte definiëren. U krijgt de host van Azure Portal, wanneer u de Azure Redis Cache maakt of vanuit de sectie ServiceConnector van de pagina web-API-container-app in de portal (zie de vorige sectie).ENV AZURE_REDIS_HOST mycache.redis.cache.windows.net(Optioneel) U kunt andere configuratieopties definiëren in omgevingsvariabelen,
AZURE_REDIS_PORTbijvoorbeeld 6380. Ter vereenvoudiging wordt deze waarde vastgelegd in plaats van een omgevingsvariabele te gebruiken. Mogelijk wilt uASPNETCORE_ENVIRONMENTook instellen op Ontwikkeling.Als u het buildtype van de .NET SDK-container gebruikt (zonder een Dockerfile), kunt u de omgevingsvariabele instellen in launchSettings.json onder
profiles > http."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" } }Publiceer en verifieer deze wijzigingen, je bent er klaar voor. Selecteer de knop Publiceren op het scherm Publiceren . Visual Studio probeert de pagina te laden, maar dit mislukt omdat de web-API-container-app niet toegankelijk is voor aanvragen buiten de container-app-omgeving.
Voordat u de toepassing met azure Redis Cache kunt uitvoeren, moet u de beheerde identiteit instellen met de juiste machtigingen voor toegang tot de cache.
De toepassing testen
Ga terug naar het scherm Publiceren in het project Webfrontend en klik op de koppeling op de URL van webfrontend. Je ziet dat de Webfrontend-app wordt weergegeven met de teller die wordt bijgewerkt wanneer je de pagina vernieuwt.
Aanbeveling
Azure Container Apps wil de uptime van uw services maximaliseren. Als er iets misgaat met een van de services, waardoor een gezondheidscontrole mislukt, stelt Azure Container Apps het niet in als de actieve revisie en gebruikt het niet om verzoeken te verwerken. Als gevolg hiervan kunt u tijdens het ontwikkel- en testproces af en toe merken dat de meest recente wijzigingen die u hebt aangebracht, niet worden doorgevoerd in de livesite. Selecteer revisies en replica's in De Azure-portal om de status van uw meest recente gepubliceerde revisie weer te geven. Van daaruit kunt u logboeken openen om het probleem op te lossen.
Gefeliciteerd! U hebt succesvol een app met meerdere containers gepubliceerd naar Azure Container Apps en communicatie tussen containers en het gebruik van de Azure Redis Cache binnen de app geverifieerd.
De hulpbronnen opschonen
Als u de resources wilt opschonen die u tijdens deze zelfstudie hebt gemaakt, gaat u naar Azure Portal en verwijdert u de resourcegroep die de container-apps, de cache en het containerregister bevat.
Volgende stappen
- Meer informatie over Azure Container Apps.
- Meer informatie over .NET Aspire, een technologie waarmee u eenvoudiger complexe apps en services in containers kunt ontwikkelen die kunnen worden geïntegreerd met diverse resources in Azure. .NET Aspire ondersteunt indeling van ontwikkelingstijd, gestandaardiseerde integratie met een reeks services, evenals hulpprogramma-ondersteuning met Visual Studio-projectsjablonen.
- U kunt ook de Azure CLI (opdrachtregelinterface) gebruiken om met uw container-apps te werken. Installeer Azure CLI en ga aan de slag met Azure Container Apps met behulp van de Azure CLI-opdrachten door Azure Container Apps te implementeren met de opdracht az containerapp up.