Share via


Zelfstudie: Een ASP.NET Core- en Azure SQL Database-app implementeren in Azure-app Service

In deze zelfstudie leert u hoe u een gegevensgestuurde ASP.NET Core-app implementeert in Azure-app Service en verbinding maakt met een Azure SQL Database. U implementeert ook een Azure Cache voor Redis om de cachecode in te schakelen in uw toepassing. Azure-app Service is een uiterst schaalbare webhostingservice die eenvoudig apps kan implementeren in Windows of Linux. Hoewel in deze zelfstudie een ASP.NET Core 8.0-app wordt gebruikt, is het proces hetzelfde voor andere versies van ASP.NET Core.

In deze zelfstudie leert u het volgende:

  • Een beveiligde standaard-App Service-, SQL Database- en Redis-cachearchitectuur maken
  • Een voorbeeld van een gegevensgestuurde ASP.NET Core-app implementeren
  • Verbindingsreeks s en app-instellingen gebruiken
  • Databaseschema genereren door een migratiebundel te uploaden
  • Logboeken met diagnostische gegevens vanaf Azure streamen
  • De app in Azure Portal beheren
  • Inrichten en implementeren met behulp van Azure Developer CLI
  • SQL-connectiviteit zonder wachtwoord gebruiken met behulp van een beheerde identiteit

Vereisten

  • Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
  • Een GitHub-account. je kunt er ook gratis een krijgen.
  • Kennis van ASP.NET Core-ontwikkeling.
  • (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Er is een gratis proefversie van 30 dagen beschikbaar.

1. Voer het voorbeeld uit

Eerst stelt u een voorbeeld van een gegevensgestuurde app in als uitgangspunt. Voor uw gemak bevat de voorbeeldopslagplaats een dev-containerconfiguratie . De dev-container heeft alles wat u nodig hebt om een toepassing te ontwikkelen, met inbegrip van de database, cache en alle omgevingsvariabelen die nodig zijn voor de voorbeeldtoepassing. De dev-container kan worden uitgevoerd in een GitHub-coderuimte, wat betekent dat u het voorbeeld kunt uitvoeren op elke computer met een webbrowser.

Stap 1: In een nieuw browservenster:

  1. Meld u aan bij uw GitHub-account.
  2. Navigeer naar https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore/fork.
  3. Hef de selectie alleen het kopiëren van de hoofdbranch op. U wilt alle vertakkingen.
  4. Selecteer Een fork maken.

Een schermopname van het maken van een fork van de GitHub-voorbeeldopslagplaats.

Stap 2: In de GitHub-fork:

  1. Selecteer de hoofdstarter-no-infra> voor de startersvertakking. Deze vertakking bevat alleen het voorbeeldproject en geen Azure-gerelateerde bestanden of configuratie.
  2. Selecteer Code>maken coderuimte op de hoofdmap. Het duurt enkele minuten voordat de codespace is ingesteld.

Een schermopname die laat zien hoe u een coderuimte maakt in GitHub.

Stap 3: In de codespace-terminal:

  1. Databasemigraties uitvoeren met dotnet ef database update.
  2. Voer de app uit met dotnet run.
  3. Wanneer u de melding Your application running on port 5093 is available.ziet, selecteert u Openen in browser. U ziet de voorbeeldtoepassing in een nieuw browsertabblad. Als u de toepassing wilt stoppen, typt Ctrl+Cu .

Een schermopname van het uitvoeren van de voorbeeldtoepassing in de GitHub-codespace.

Tip

U kunt GitHub Copilot vragen over deze opslagplaats. Voorbeeld:

  • @workspace Wat doet dit project?
  • @workspace Wat doet de map .devcontainer?

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

1. App Service, database en cache maken

In deze stap maakt u de Azure-resources. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service, Azure SQL Database en Azure Cache. Voor het aanmaakproces geeft u het volgende op:

  • De naam voor de web-app. Dit is de naam die wordt gebruikt als onderdeel van de DNS-naam voor uw web-app in de vorm van https://<app-name>.azurewebsites.net.
  • De regio om de app fysiek in de wereld uit te voeren.
  • De runtimestack voor de app. Hier selecteert u de .NET-versie die u voor uw app wilt gebruiken.
  • Het hostingabonnement voor de app. Dit is de prijscategorie die de set functies en schaalcapaciteit voor uw app bevat.
  • De resourcegroep voor de app. Met een resourcegroep kunt u alle Azure-resources die nodig zijn voor de toepassing groeperen (in een logische container).

Meld u aan bij Azure Portal en volg deze stappen om uw Azure-app Service-resources te maken.

Stap 1: In Azure Portal:

  1. Voer 'web-app-database' in de zoekbalk boven aan Azure Portal in.
  2. Selecteer het item met het label Web App + Database onder de kop Marketplace . U kunt ook rechtstreeks naar de wizard voor het maken navigeren.

Een schermopname die laat zien hoe u het zoekvak in de bovenste werkbalk gebruikt om de wizard Web-app en database maken te vinden.

Stap 2: Vul op de pagina Web-app en database maken het formulier als volgt in.

  1. Resourcegroep: Selecteer Nieuwe maken en gebruik een naam van msdocs-core-sql-tutorial.
  2. Regio: Elke Azure-regio bij u in de buurt.
  3. Naam: msdocs-core-sql-XYZ waarbij XYZ uit drie willekeurige tekens bestaat. Deze naam moet uniek zijn binnen Azure.
  4. Runtimestack: .NET 8 (LTS).
  5. Voeg Azure Cache voor Redis toe?: Ja.
  6. Hostingabonnement: Basic. Wanneer u klaar bent, kunt u later omhoog schalen naar een prijscategorie voor productie.
  7. Selecteer SQLAzure als de database-engine. Azure SQL Database is een volledig beheerde PaaS-database-engine (Platform as a Service) die altijd wordt uitgevoerd op de nieuwste stabiele versie van SQL Server.
  8. Selecteer Controleren + maken.
  9. Nadat de validatie is voltooid, selecteert u Maken.

Een schermopname die laat zien hoe u een nieuwe app en database configureert in de wizard Web App + Database.

Stap 3: Het duurt enkele minuten voordat de implementatie is voltooid. Zodra de implementatie is voltooid, selecteert u de knop Ga naar resource . U wordt rechtstreeks naar de App Service-app gebracht, maar de volgende resources worden gemaakt:

  • Resourcegroep: de container voor alle gemaakte resources.
  • App Service-plan: definieert de rekenresources voor App Service. Er wordt een Linux-plan in de Basic-laag gemaakt.
  • App Service: Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
  • Virtueel netwerk: geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
  • Privé-eindpunten: Access-eindpunten voor de databaseserver en de Redis-cache in het virtuele netwerk.
  • Netwerkinterfaces: vertegenwoordigt privé-IP-adressen, één voor elk van de privé-eindpunten.
  • Azure SQL Database-server: alleen toegankelijk vanaf achter het privé-eindpunt.
  • Azure SQL Database: een database en een gebruiker worden voor u gemaakt op de server.
  • Azure Cache voor Redis: alleen toegankelijk vanaf achter het privé-eindpunt.
  • Privé-DNS zones: DNS-resolutie van de databaseserver en de Redis-cache in het virtuele netwerk inschakelen.

Een schermopname van het implementatieproces voltooid.

2. Controleer verbindingsreeks s

Tip

De standaard SQL-database verbindingsreeks maakt gebruik van SQL-verificatie. Zie Hoe kan ik de SQL Database-verbinding wijzigen om in plaats daarvan een beheerde identiteit te gebruiken voor een veiligere, wachtwoordloze verificatie?

De wizard voor maken heeft verbindingsreeks s gegenereerd voor de SQL-database en de Redis-cache. Zoek in deze stap de gegenereerde verbindingsreeks s voor later gebruik.

Stap 1: Selecteer in het menu aan de linkerkant >instellingen omgevingsvariabelen op de pagina App Service.

Een schermopname van het openen van de configuratiepagina in App Service.

Stap 2:

  1. Zoek AZURE_REDIS_CONNECTIONSTRING in de sectie App-instellingen. Deze tekenreeks is gegenereerd op basis van de nieuwe Redis-cache door de wizard maken. Als u uw toepassing wilt instellen, hebt u alleen deze naam nodig.
  2. Selecteer Verbindingsreeksen en zoek AZURE_SQL_CONNECTIONSTRING in de sectie Verbindingsreeksen . Deze tekenreeks is gegenereerd op basis van de nieuwe SQL-database door de wizard maken. Als u uw toepassing wilt instellen, hebt u alleen deze naam nodig.
  3. Als u wilt, kunt u de instelling selecteren en de waarde ervan bekijken, kopiëren of bewerken. Later wijzigt u uw toepassing in gebruik AZURE_SQL_CONNECTIONSTRING en AZURE_REDIS_CONNECTIONSTRING.

Een schermopname die laat zien hoe u een app-instelling maakt.

3. Voorbeeldcode implementeren

In deze stap configureert u gitHub-implementatie met behulp van GitHub Actions. Het is slechts een van de vele manieren om te implementeren in App Service, maar ook een uitstekende manier om continue integratie in uw implementatieproces te hebben. Standaard wordt met elke git push gitHub-opslagplaats de build- en implementatieactie gestart.

Stap 1: Selecteer implementatiecentrum in>het linkermenu.

Een schermopname die laat zien hoe u het implementatiecentrum opent in App Service.

Stap 2: Op de pagina Implementatiecentrum:

  1. Selecteer GitHub in Bron. GitHub Actions is standaard geselecteerd als buildprovider.
  2. Meld u aan bij uw GitHub-account en volg de prompt om Azure te autoriseren.
  3. Selecteer uw account in Organisatie.
  4. Selecteer in Opslagplaats msdocs-app-service-sqldb-dotnetcore.
  5. Selecteer in Branch starter-no-infra. Dit is dezelfde vertakking waarin u met uw voorbeeld-app hebt gewerkt, zonder azure-gerelateerde bestanden of configuraties.
  6. Selecteer voor verificatietype de door de gebruiker toegewezen identiteit.
  7. Selecteer Opslaan in het bovenste menu. App Service voert een werkstroombestand door in de gekozen GitHub-opslagplaats in de .github/workflows map. Standaard maakt het implementatiecentrum een door de gebruiker toegewezen identiteit voor de werkstroom voor verificatie met behulp van Microsoft Entra (OIDC-verificatie). Zie Implementeren in App Service met behulp van GitHub Actions voor alternatieve verificatieopties.

Een schermopname van het configureren van CI/CD met behulp van GitHub Actions.

Stap 3: Terug in de GitHub-coderuimte van uw voorbeeldfork, voert u uit git pull origin starter-no-infra. Hiermee haalt u het zojuist vastgelegde werkstroombestand op in uw codespace.

Een schermopname van Git Pull in een GitHub-coderuimte.

Stap 4 (optie 1: met GitHub Copilot):

  1. Start een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.
  2. Vraag het volgende: '@workspace Hoe maakt de app verbinding met de database en de cache?' Copilot geeft u mogelijk wat uitleg over de MyDatabaseContext klasse en hoe deze is geconfigureerd in Program.cs.
  3. Vraag het volgende: 'In de productiemodus wil ik dat de app de verbindingsreeks met de naam AZURE_SQL_CONNECTIONSTRING gebruikt voor de database en de app-instelling met de naam AZURE_REDIS_CONNECTIONSTRING*.' Copilot geeft u mogelijk een codesuggesties die vergelijkbaar zijn met de code in de optie 2: zonder onderstaande GitHub Copilot-stappen en laat u zelfs weten dat u de wijziging in het Program.cs-bestand moet aanbrengen.
  4. Open Program.cs in de verkenner en voeg de codesuggesties toe. GitHub Copilot geeft u niet elke keer hetzelfde antwoord en dit is niet altijd juist. Mogelijk moet u meer vragen stellen om het antwoord af te stemmen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips ?

Een schermopname die laat zien hoe u een vraag kunt stellen in een nieuwe GitHub Copilot-chatsessie.

Stap 4 (optie 2: zonder GitHub Copilot):

  1. Open Program.cs in de verkenner.
  2. Zoek de commentaarcode (regels 12-21) en verwijder de opmerkingen. Deze code maakt verbinding met de database met behulp van AZURE_SQL_CONNECTIONSTRING en maakt verbinding met de Redis-cache met behulp van de app-instelling AZURE_REDIS_CONNECTIONSTRING.

Een schermopname van een GitHub-coderuimte en het Program.cs-bestand dat is geopend.

Stap 5 (optie 1: met GitHub Copilot):

  1. Open .github/workflows/starter-no-infra_msdocs-core-sql-XYZ in de verkenner. Dit bestand is gemaakt door de wizard App Service maken.
  2. Markeer de dotnet publish stap en selecteer .
  3. Vraag Copilot: "Install dotnet ef, then create a migrations bundle in dezelfde uitvoermap."
  4. Als de suggestie acceptabel is, selecteert u Accepteren. GitHub Copilot geeft u niet elke keer hetzelfde antwoord en dit is niet altijd juist. Mogelijk moet u meer vragen stellen om het antwoord af te stemmen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips ?

Een schermopname van het gebruik van GitHub Copilot in een GitHub-werkstroombestand.

Stap 5 (optie 2: zonder GitHub Copilot):

  1. Open .github/workflows/starter-no-infra_msdocs-core-sql-XYZ in de verkenner. Dit bestand is gemaakt door de wizard App Service maken.
  2. Voeg onder de dotnet publish stap een stap toe om het Entity Framework Core-hulpprogramma met de opdracht dotnet tool install -g dotnet-ef --version 8.*te installeren.
  3. Voeg onder de nieuwe stap nog een stap toe om een databasemigratiebundel te genereren in het implementatiepakket: dotnet ef migrations bundle --runtime linux-x64 -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle. De migratiebundel is een zelfstandig uitvoerbaar bestand dat u kunt uitvoeren in de productieomgeving zonder dat u de .NET SDK nodig hebt. De Linux-container van App Service heeft alleen de .NET-runtime en niet de .NET SDK.

Een schermopname van de stappen die zijn toegevoegd aan het GitHub-werkstroombestand voor databasemigratiebundel.

Stap 6:

  1. Selecteer de extensie Broncodebeheer .
  2. Typ in het tekstvak een doorvoeringsbericht zoals Configure Azure database and cache connections. Of selecteer en laat GitHub Copilot een doorvoerbericht voor u genereren.
  3. Selecteer Doorvoeren en bevestig met Ja.
  4. Selecteer Wijzigingen synchroniseren 1 en bevestig met OK.

Een schermopname van de wijzigingen die worden doorgevoerd en gepusht naar GitHub.

Stap 7: Terug op de pagina Implementatiecentrum in Azure Portal:

  1. Selecteer Logboeken. Er is al een nieuwe implementatieuitvoering gestart op basis van uw doorgevoerde wijzigingen. Mogelijk moet u Vernieuwen selecteren om het te zien.
  2. Selecteer in het logboekitem voor de implementatieuitvoering de vermelding Build/Deploy Logs met de meest recente tijdstempel.

Een schermopname die laat zien hoe u implementatielogboeken opent in het implementatiecentrum.

Stap 8: U gaat naar uw GitHub-opslagplaats en ziet dat de GitHub-actie wordt uitgevoerd. Het werkstroombestand definieert twee afzonderlijke fasen, bouwen en implementeren. Wacht totdat de GitHub-uitvoering de status Geslaagd weergeeft. Het duurt ongeveer 5 minuten.

Een schermopname van een Actieve GitHub-uitvoering.

4. Databaseschema genereren

Met de SQL Database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om dotnet-databasemigraties uit te voeren in een SSH-sessie met de App Service-container.

Stap 1: Ga terug naar de App Service-pagina, selecteer in het menu links de optie Ontwikkelhulpprogramma's>SSH en selecteer Vervolgens Go.

Een schermopname van het openen van de SSH-shell voor uw app vanuit Azure Portal.

Stap 2: In de SSH-terminal:

  1. Voer cd /home/site/wwwroot uit. Hier volgen al uw geïmplementeerde bestanden.
  2. Voer de migratiebundel uit die door de GitHub-werkstroom is gegenereerd, met de opdracht ./migrationsbundle -- --environment Production. Als dit lukt, maakt App Service verbinding met de SQL Database. Houd er rekening mee dat dit overeenkomt met de codewijzigingen die --environment Production u in Program.cs hebt aangebracht.

Een schermopname van de opdrachten die moeten worden uitgevoerd in de SSH-shell en de bijbehorende uitvoer.

In de SSH-sessie kunnen alleen wijzigingen in bestanden blijven /home bestaan na het opnieuw opstarten van de app. Wijzigingen buiten /home zijn niet behouden.

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

5. Blader naar de app

Stap 1: Op de App Service-pagina:

  1. Selecteer Overzicht in het linkermenu.
  2. Selecteer de URL van uw app. U kunt ook rechtstreeks naar https://<app-name>.azurewebsites.net.

Een schermopname die laat zien hoe u een App Service start vanuit Azure Portal.

Stap 2: Voeg een paar taken toe aan de lijst. Gefeliciteerd, u voert een beveiligde gegevensgestuurde ASP.NET Core-app uit in Azure-app Service.

Een schermopname van de .NET Core-app die wordt uitgevoerd in App Service.

Tip

De voorbeeldtoepassing implementeert het cache-aside-patroon . Wanneer u een gegevensweergave voor de tweede keer bezoekt of dezelfde pagina opnieuw laadt nadat u gegevenswijzigingen hebt aangebracht, wordt de verwerkingstijd op de webpagina veel sneller weergegeven omdat de gegevens uit de cache worden geladen in plaats van de database.

6. Diagnostische logboeken streamen

Azure-app Service legt alle berichten vast die zijn vastgelegd in de console om u te helpen bij het diagnosticeren van problemen met uw toepassing. De voorbeeld-app voert consolelogboekberichten uit in elk van de eindpunten om deze mogelijkheid te demonstreren.

Stap 1: Op de App Service-pagina:

  1. Selecteer in het linkermenu App Service-logboeken bewaken>.
  2. Selecteer onder Toepassingslogboek het bestandssysteem en selecteer Vervolgens Opslaan.

Een schermopname van het inschakelen van systeemeigen logboeken in App Service in Azure Portal.

Stap 2: Selecteer in het menu links de optie Logboekstream. U ziet de logboeken voor uw app, inclusief platformlogboeken en logboeken vanuit de container.

Een schermopname die laat zien hoe u de logboekstream kunt weergeven in Azure Portal.

7. Resources opschonen

Wanneer u klaar bent, kunt u alle resources uit uw Azure-abonnement verwijderen door de resourcegroep te verwijderen.

Stap 1: In de zoekbalk boven aan Azure Portal:

  1. Voer de naam van de resourcegroup in.
  2. Selecteer de resourcegroep.

Een schermopname van het zoeken naar en navigeren naar een resourcegroep in Azure Portal.

Stap 2: Selecteer op de pagina Resourcegroep verwijderen.

Een schermopname van de locatie van de knop Resourcegroep verwijderen in Azure Portal.

Stap 3:

  1. Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.
  2. Selecteer Verwijderen.

Een schermopname van het bevestigingsvenster voor het verwijderen van een resourcegroep in Azure Portal. :

2. Azure-resources maken en een voorbeeld-app implementeren

In deze stap maakt u de Azure-resources en implementeert u een voorbeeld-app in App Service op Linux. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service, Azure SQL Database en Azure Cache voor Redis.

De dev-container heeft al de Azure Developer CLI (AZD).

  1. Voer vanuit de hoofdmap van de opslagplaats de opdracht uit azd init.

    azd init --template dotnet-app-service-sqldb-infra
    
  2. Geef de volgende antwoorden wanneer u hierom wordt gevraagd:

    Vraag Antwoord
    De huidige map is niet leeg. Wilt u hier een project initialiseren in '<your-directory>'? Y
    Wat wilt u doen met deze bestanden? Mijn bestaande bestanden ongewijzigd houden
    Voer een nieuwe omgevingsnaam in Typ een unieke naam. De AZD-sjabloon gebruikt deze naam als onderdeel van de DNS-naam van uw web-app in Azure (<app-name>.azurewebsites.net). Alfanumerieke tekens en afbreekstreepjes zijn toegestaan.
  3. Meld u aan bij Azure door de azd auth login opdracht uit te voeren en de prompt te volgen:

    azd auth login
    
  4. Maak de benodigde Azure-resources en implementeer de app-code met de azd up opdracht. Volg de prompt om het gewenste abonnement en de gewenste locatie voor de Azure-resources te selecteren.

    azd up
    

    Het duurt ongeveer 15 minuten voordat de azd up opdracht is voltooid (de Redis-cache duurt het de meeste tijd). Uw toepassingscode wordt ook gecompileerd en geïmplementeerd, maar u wijzigt de code later om met App Service te werken. Terwijl deze wordt uitgevoerd, bevat de opdracht berichten over het inrichtings- en implementatieproces, inclusief een koppeling naar de implementatie in Azure. Wanneer deze is voltooid, wordt met de opdracht ook een koppeling naar de implementatietoepassing weergegeven.

    Deze AZD-sjabloon bevat bestanden (azure.yaml en de inframap ) die een standaardarchitectuur met de volgende Azure-resources genereren:

    • Resourcegroep: de container voor alle gemaakte resources.
    • App Service-plan: definieert de rekenresources voor App Service. Er wordt een Linux-plan in de Basic-laag gemaakt.
    • App Service: Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
    • Virtueel netwerk: geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
    • Privé-eindpunten: Access-eindpunten voor de databaseserver en de Redis-cache in het virtuele netwerk.
    • Netwerkinterfaces: vertegenwoordigt privé-IP-adressen, één voor elk van de privé-eindpunten.
    • Azure SQL Database-server: alleen toegankelijk vanaf achter het privé-eindpunt.
    • Azure SQL Database: een database en een gebruiker worden voor u gemaakt op de server.
    • Azure Cache voor Redis: alleen toegankelijk vanaf achter het privé-eindpunt.
    • Privé-DNS zones: DNS-resolutie van de databaseserver en de Redis-cache in het virtuele netwerk inschakelen.

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

3. Controleer verbindingsreeks s

Tip

De standaard SQL-database verbindingsreeks maakt gebruik van SQL-verificatie. Zie Hoe kan ik de SQL Database-verbinding wijzigen om in plaats daarvan een beheerde identiteit te gebruiken voor een veiligere, wachtwoordloze verificatie?

De AZD-sjabloon die u gebruikt, heeft de connectiviteitsvariabelen voor u al gegenereerd als app-instellingen en voert deze voor uw gemak uit naar de terminal. App-instellingen zijn een manier om verbindingsgeheimen uit uw codeopslagplaats te houden.

  1. Zoek in de AZD-uitvoer de instellingen AZURE_SQL_CONNECTIONSTRING en AZURE_REDIS_CONNECTIONSTRING. Als u geheimen veilig wilt houden, worden alleen de naam van de instelling weergegeven. Ze zien er als volgt uit in de AZD-uitvoer:

     App Service app has the following connection strings:
    
             - AZURE_SQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
     

    AZURE_SQL_CONNECTIONSTRINGbevat de verbindingsreeks naar de SQL Database in Azure en AZURE_REDIS_CONNECTIONSTRING bevat de verbindingsreeks naar de Azure Redis-cache. U moet deze later in uw code gebruiken.

  2. Voor uw gemak toont de AZD-sjabloon u de directe koppeling naar de app-instellingenpagina van de app. Zoek de koppeling en open deze in een nieuw browsertabblad.

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

4. Voorbeeldcode wijzigen en opnieuw implementeren

  1. Start in de GitHub-coderuimte van uw voorbeeldfork een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.

  2. Vraag het volgende: '@workspace Hoe maakt de app verbinding met de database en de cache?' Copilot geeft u mogelijk wat uitleg over de MyDatabaseContext klasse en hoe deze is geconfigureerd in Program.cs.

  3. Vraag het volgende: 'In de productiemodus wil ik dat de app de verbindingsreeks met de naam AZURE_SQL_CONNECTIONSTRING gebruikt voor de database en de app-instelling met de naam AZURE_REDIS_CONNECTIONSTRING*.' Copilot geeft u mogelijk een codesuggesties die vergelijkbaar zijn met de code in de optie 2: zonder onderstaande GitHub Copilot-stappen en laat u zelfs weten dat u de wijziging in het Program.cs-bestand moet aanbrengen.

  4. Open Program.cs in de verkenner en voeg de codesuggesties toe.

    GitHub Copilot geeft u niet elke keer hetzelfde antwoord en dit is niet altijd juist. Mogelijk moet u meer vragen stellen om het antwoord af te stemmen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips ?

Voordat u deze wijzigingen implementeert, moet u nog steeds een migratiebundel genereren.

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

4. Databaseschema genereren

Als de SQL Database wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om databasemigraties uit te voeren in een SSH-sessie met de App Service-container. De App Service Linux-containers hebben echter niet de .NET SDK, dus de eenvoudigste manier om databasemigraties uit te voeren, is door een bundel met zelfstandige migraties te uploaden.

  1. Genereer een migratiebundel voor uw project met de volgende opdracht:

    dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
    

    Tip

    De voorbeeldtoepassing (zie DotNetCoreSqlDb.csproj) is geconfigureerd om dit migratiesbundle-bestand op te nemen. Tijdens de azd package fase wordt migratiesbundle toegevoegd aan het implementatiepakket.

  2. Implementeer alle wijzigingen met azd up.

    azd up
    
  3. Zoek in de azd-uitvoer de URL voor de SSH-sessie en navigeer ernaar in de browser. Dit ziet er als volgt uit in de uitvoer:

     Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
     
  4. Voer in de SSH-terminal de volgende opdrachten uit:

    cd /home/site/wwwroot
    ./migrationsbundle -- --environment Production
    

    Als dit lukt, maakt App Service verbinding met de database. Houd er rekening mee dat dit overeenkomt met de codewijzigingen die --environment Production u in Program.cs hebt aangebracht.

In de SSH-sessie kunnen alleen wijzigingen in bestanden blijven /home bestaan na het opnieuw opstarten van de app. Wijzigingen buiten /home zijn niet behouden.

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

6. Blader naar de app

  1. Zoek in de AZD-uitvoer de URL van uw app en navigeer ernaar in de browser. De URL ziet er als volgt uit in de AZD-uitvoer:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. Voeg een paar taken toe aan de lijst.

    Een schermopname van de ASP.NET Core-web-app met SQL Database die wordt uitgevoerd in Azure met taken.

    Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure SQL Database.

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

7. Diagnostische logboeken streamen

Azure-app Service kan consolelogboeken vastleggen om u te helpen bij het vaststellen van problemen met uw toepassing. Voor het gemak is logboekregistratie van de AZD-sjabloon al ingeschakeld voor het lokale bestandssysteem en worden de logboeken verzonden naar een Log Analytics-werkruimte.

De voorbeeldtoepassing bevat standaardlogboekinstructies om deze mogelijkheid te demonstreren, zoals wordt weergegeven in het volgende codefragment:

public async Task<IActionResult> Index()
{
    var todoItems = await _cache.GetAsync(_TodoItemsCacheKey);
    if (todoItems != null)
    {
        _logger.LogInformation("Data from cache.");
        var todoList = JsonConvert.DeserializeObject<List<Todo>>(Encoding.UTF8.GetString(todoItems));
        return View(todoList);
    }
    else
    {
        _logger.LogInformation("Data from database.");
        var todoList = await _context.Todo.ToListAsync();
        var serializedTodoList = JsonConvert.SerializeObject(todoList);
        await _cache.SetAsync(_TodoItemsCacheKey, Encoding.UTF8.GetBytes(serializedTodoList));
        return View(todoList);
    }
}

Zoek in de AZD-uitvoer de koppeling om App Service-logboeken te streamen en navigeer ernaar in de browser. De koppeling ziet er als volgt uit in de AZD-uitvoer:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

Meer informatie over logboekregistratie in .NET-apps in de reeks over Azure Monitor OpenTelemetry inschakelen voor .NET-, Node.js-, Python- en Java-toepassingen.

Ondervindt u problemen? Controleer de sectie Probleemoplossing.

8. Resources opschonen

Als u alle Azure-resources in de huidige implementatieomgeving wilt verwijderen, voert u de aanwijzingen uit azd down en volgt u de aanwijzingen.

azd down

Probleemoplossing

In de portalimplementatieweergave voor Azure SQL Database wordt een conflictstatus weergegeven

Afhankelijk van uw abonnement en de regio die u selecteert, ziet u mogelijk de implementatiestatus voor Azure SQL Database Conflict, met het volgende bericht in bewerkingsgegevens:

InternalServerError: An unexpected error occured while processing the request.

Deze fout wordt waarschijnlijk veroorzaakt door een limiet voor uw abonnement voor de regio die u selecteert. Kies een andere regio voor uw implementatie.

In Azure Portal worden in de logboekstreamgebruikersinterface voor de web-app netwerkfouten weergegeven

Mogelijk ziet u deze fout:

Unable to open a connection to your app. This may be due to any network security groups or IP restriction rules that you have placed on your app. To use log streaming, please make sure you are able to access your app directly from your current network.

Dit is meestal een tijdelijke fout wanneer de app voor het eerst wordt gestart. Wacht een paar minuten en controleer het opnieuw.

De SSH-sessie in de browser wordt weergegeven SSH CONN CLOSED

Het duurt enkele minuten voordat de Linux-container is opgestart. Wacht een paar minuten en controleer het opnieuw.

De pagina logboekstream van de portal wordt weergegeven Connected! , maar er zijn geen logboeken

Nadat u diagnostische logboeken hebt geconfigureerd, wordt de app opnieuw opgestart. Mogelijk moet u de pagina vernieuwen om de wijzigingen door te voeren in de browser.

Veelgestelde vragen

Hoeveel kost dit instellen?

De prijzen voor de gemaakte resources zijn als volgt:

  • Het App Service-plan wordt gemaakt in de Basic-laag en kan omhoog of omlaag worden geschaald. Zie Prijzen voor App Service.
  • De Azure SQL Database wordt gemaakt in een serverloze laag voor algemeen gebruik op hardware uit de Standard-serie met de minimale kernen. Er zijn kleine kosten en kunnen worden gedistribueerd naar andere regio's. U kunt de kosten nog meer minimaliseren door de maximale grootte te verkleinen of u kunt deze omhoog schalen door de servicelaag, rekenlaag, hardwareconfiguratie, aantal kernen, databasegrootte en zoneredundantie aan te passen. Zie Prijzen van Azure SQL Database.
  • De Azure Cache voor Redis wordt gemaakt in de Basic-laag met de minimale cachegrootte. Er zijn kleine kosten verbonden aan deze laag. U kunt deze omhoog schalen naar hogere prestatielagen voor hogere beschikbaarheid, clustering en andere functies. Zie Azure Cache voor Redis prijzen.
  • Voor het virtuele netwerk worden geen kosten in rekening gebracht, tenzij u extra functionaliteit configureert, zoals peering. Zie prijzen voor Azure Virtual Network.
  • Voor de privé-DNS-zone worden kleine kosten in rekening gebracht. Zie prijzen voor Azure DNS.

Hoe kan ik verbinding maken met de Azure SQL Database-server die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?

  • Voor basistoegang vanuit een opdrachtregelprogramma kunt u uitvoeren sqlcmd vanuit de SSH-terminal van de app. De container van de app wordt niet geleverd sqlcmd, dus u moet deze handmatig installeren. Houd er rekening mee dat de geïnstalleerde client niet blijft bestaan tijdens het opnieuw opstarten van de app.
  • Als u verbinding wilt maken vanuit een SQL Server Management Studio-client of vanuit Visual Studio, moet uw machine zich in het virtuele netwerk bevinden. Het kan bijvoorbeeld een Virtuele Azure-machine zijn die is verbonden met een van de subnetten of een machine in een on-premises netwerk met een site-naar-site-VPN-verbinding met het virtuele Azure-netwerk.

Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?

Neem het automatisch gegenereerde werkstroombestand uit App Service als voorbeeld, elk git push start een nieuwe build- en implementatieuitvoering. Vanuit een lokale kloon van de GitHub-opslagplaats pusht u de gewenste updates naar GitHub. Voorbeeld:

git add .
git commit -m "<some-message>"
git push origin main

Hoe kan ik fouten opsporen tijdens de implementatie van GitHub Actions?

Als een stap mislukt in het automatisch gegenereerde GitHub-werkstroombestand, wijzigt u de mislukte opdracht om uitgebreidere uitvoer te genereren. U kunt bijvoorbeeld meer uitvoer krijgen van een van de dotnet opdrachten door de -v optie toe te voegen. Voer uw wijzigingen door en push deze om een andere implementatie naar App Service te activeren.

Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken

Zie Implementatie van GitHub Actions instellen vanuit het Implementatiecentrum.

Hoe kan ik wijzigt u in plaats daarvan de SQL Database-verbinding om een beheerde identiteit te gebruiken?

De standaard verbindingsreeks naar de SQL-database wordt beheerd door Service Connector, met de naam defaultConnector en maakt gebruik van SQL-verificatie. Als u deze wilt vervangen door een verbinding die gebruikmaakt van een beheerde identiteit, voert u de volgende opdrachten uit in de Cloud Shell nadat u de tijdelijke aanduidingen hebt vervangen:

az extension add --name serviceconnector-passwordless --upgrade
az sql server update --enable-public-network true
az webapp connection delete sql --connection defaultConnector --resource-group <group-name> --name <app-name>
az webapp connection create sql --connection defaultConnector --resource-group <group-name> --name <app-name> --target-resource-group <group-name> --server <database-server-name> --database <database-name> --client-type dotnet --system-identity --config-connstr true
az sql server update --enable-public-network false

De opdracht az webapp connection create sql --client-type dotnet --system-identity --config-connstr doet standaard het volgende:

  • Hiermee stelt u uw gebruiker in als microsoft Entra-id-beheerder van de SQL-databaseserver.
  • Maak een door het systeem toegewezen beheerde identiteit en verleent deze toegang tot de database.
  • Genereert een wachtwoordloze verbindingsreeks aangeroepenAZURE_SQL_CONNECTIONGSTRING, die uw app al aan het einde van de zelfstudie gebruikt.

Uw app moet nu verbinding hebben met de SQL-database. Zie Zelfstudie: Verbinding maken met Azure-databases vanuit App Service zonder geheimen met behulp van een beheerde identiteit voor meer informatie.

Tip

Wilt u geen openbare netwerkverbinding inschakelen? U kunt overslaan az sql server update --enable-public-network true door de opdrachten uit te voeren vanuit een Azure-cloudshell die is geïntegreerd met uw virtuele netwerk als u de roltoewijzing Eigenaar voor uw abonnement hebt.

Als u de identiteit de vereiste toegang wilt verlenen tot de database die wordt beveiligd door het virtuele netwerk, az webapp connection create sql moet u directe connectiviteit met Entra ID-verificatie met de databaseserver hebben. De Azure Cloud Shell heeft standaard geen toegang tot de met het netwerk beveiligde database.

Wat kan ik doen met GitHub Copilot in mijn codespace?

U hebt misschien gemerkt dat de GitHub Copilot-chatweergave al voor u was toen u de coderuimte maakte. Voor uw gemak nemen we de GitHub Copilot-chatextensie op in de containerdefinitie (zie .devcontainer/devcontainer.json). U hebt echter een GitHub Copilot-account nodig (gratis proefversie van 30 dagen beschikbaar).

Enkele tips voor u wanneer u met GitHub Copilot praat:

  • In één chatsessie bouwen de vragen en antwoorden op elkaar voort en kunt u uw vragen aanpassen om het antwoord dat u krijgt af te stemmen.
  • GitHub Copilot heeft standaard geen toegang tot een bestand in uw opslagplaats. Als u vragen wilt stellen over een bestand, opent u het bestand eerst in de editor.
  • Als u GitHub Copilot toegang wilt geven tot alle bestanden in de opslagplaats bij het voorbereiden van de antwoorden, begint u met @workspaceuw vraag. Zie Use the @workspace agent voor meer informatie.
  • In de chatsessie kan GitHub Copilot wijzigingen voorstellen en (met @workspace) zelfs waar de wijzigingen moeten worden aangebracht, maar het is niet toegestaan om de wijzigingen voor u aan te brengen. Het is aan u om de voorgestelde wijzigingen toe te voegen en te testen.

Hier volgen enkele andere dingen die u kunt zeggen om het antwoord dat u krijgt af te stemmen.

  • Ik wil dat deze code alleen wordt uitgevoerd in de productiemodus.
  • Ik wil dat deze code alleen wordt uitgevoerd in Azure-app Service en niet lokaal.
  • De parameter --output-path lijkt niet te worden ondersteund.

Ga naar de volgende zelfstudie voor meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.

U kunt ook andere resources bekijken: