Händelser
17 mars 21 - 21 mars 10
Gå med i mötesserien för att skapa skalbara AI-lösningar baserat på verkliga användningsfall med andra utvecklare och experter.
Registrera dig nuDen här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
I den här självstudien får du lära dig hur du distribuerar en datadriven ASP.NET Core-app till Azure App Service och ansluter till en Azure SQL Database. Du distribuerar också en Azure Cache for Redis för att aktivera cachelagringskoden i ditt program. Azure App Service är en mycket skalbar webbvärdtjänst med självkorrigering som enkelt kan distribuera appar i Windows eller Linux. Även om den här självstudien använder en ASP.NET Core 8.0-app är processen densamma för andra versioner av ASP.NET Core.
I den här självstudien lär du dig att:
Om du bara vill se exempelappen i den här självstudien som körs i Azure kör du bara följande kommandon i Azure Cloud Shell och följer anvisningarna:
dotnet tool install --global dotnet-ef
mkdir msdocs-app-service-sqldb-dotnetcore
cd msdocs-app-service-sqldb-dotnetcore
azd init --template msdocs-app-service-sqldb-dotnetcore
azd up
Först konfigurerar du en exempeldatadriven app som utgångspunkt. Exempellagringsplatsen innehåller för enkelhetens skull en konfiguration av utvecklingscontainer. Utvecklingscontainern har allt du behöver för att utveckla ett program, inklusive databasen, cachen och alla miljövariabler som krävs av exempelprogrammet. Utvecklingscontainern kan köras i ett GitHub-kodområde, vilket innebär att du kan köra exemplet på valfri dator med en webbläsare.
Steg 1: I ett nytt webbläsarfönster:
Steg 2: I GitHub-förgreningen:
Steg 3: I kodområdesterminalen:
dotnet ef database update
.dotnet run
.Your application running on port 5093 is available.
väljer du Öppna i webbläsare.
Du bör se exempelprogrammet på en ny webbläsarflik. Om du vill stoppa programmet skriver du Ctrl
+C
.Tips
Du kan fråga GitHub Copilot om den här lagringsplatsen. Till exempel:
Har du problem? Kontrollera felsökningsavsnittet.
I det här steget skapar du Azure-resurserna. Stegen som används i den här självstudien skapar en uppsättning säkra som standardresurser som inkluderar App Service, Azure SQL Database och Azure Cache. För skapandeprocessen anger du:
https://<app-name>-<hash>.<region>.azurewebsites.net
.Logga in på Azure Portal och följ dessa steg för att skapa dina Azure App Service-resurser.
Steg 1: I Azure Portal:
Steg 2: På sidan Skapa webbapp + databas fyller du i formuläret på följande sätt.
Steg 3: Distributionen tar några minuter att slutföra. När distributionen är klar väljer du knappen Gå till resurs . Du tas direkt till App Service-appen, men följande resurser skapas:
Guiden skapa genererade anslutningsvariabeln åt dig redan som .NET-anslutningssträng ochappinställningar. Bästa praxis för säkerhet är dock att hålla hemligheter borta från App Service helt. Du flyttar dina hemligheter till ett nyckelvalv och ändrar appinställningen till Key Vault-referenser med hjälp av Service Connectors.
Tips
Information om hur du använder lösenordslös autentisering finns i Hur gör jag för att ändra SQL Database-anslutningen till att använda en hanterad identitet i stället?
Steg 1: Hämta den befintliga anslutningssträng
Steg 2: Skapa ett nyckelvalv för säker hantering av hemligheter
Steg 3: Skydda nyckelvalvet med en privat slutpunkt
Steg 4:
Steg 5: Upprätta Key Vault-anslutningen
Steg 6: Slutför inställningarna för SQL Database-anslutningsappen
Steg 7: Konfigurera Redis-anslutningen för att använda Key Vault-hemligheter
Steg 8: Verifiera Key Vault-integreringen
@Microsoft.KeyVault(...)
, vilket innebär att det är en nyckelvalvsreferens eftersom hemligheten nu hanteras i nyckelvalvet.@Microsoft.KeyVault(...)
.För att sammanfatta processen för att skydda dina anslutningshemligheter:
I det här steget konfigurerar du GitHub-distribution med GitHub Actions. Det är bara ett av många sätt att distribuera till App Service, men också ett bra sätt att ha kontinuerlig integrering i distributionsprocessen. Som standard startar varje git push
till din GitHub-lagringsplats bygg- och distributionsåtgärden.
Steg 1: I den vänstra menyn väljer du Distributionsdistributionscenter>.
Steg 2: På sidan Distributionscenter:
.github/workflows
katalogen.
Som standard skapar distributionscentret en användartilldelad identitet för arbetsflödet som ska autentiseras med Hjälp av Microsoft Entra (OIDC-autentisering). Alternativa autentiseringsalternativ finns i Distribuera till App Service med GitHub Actions.
Steg 3: Kör i GitHub-kodområdet i exempelgrenen git pull origin starter-no-infra
.
Detta hämtar den nyligen incheckade arbetsflödesfilen till ditt kodområde.
Steg 4 (alternativ 1: med GitHub Copilot):
MyDatabaseContext
konfigureras i Program.cs.Steg 4 (alternativ 2: utan GitHub Copilot):
AZURE_SQL_CONNECTIONSTRING
av och ansluter till Redis-cachen med hjälp av appinställningen AZURE_REDIS_CONNECTIONSTRING
.Steg 5 (alternativ 1: med GitHub Copilot):
dotnet publish
och välj Steg 5 (alternativ 2: utan GitHub Copilot):
dotnet publish
lägger du till ett steg för att installera Entity Framework Core-verktyget med kommandot dotnet tool install -g dotnet-ef --version 8.*
.dotnet ef migrations bundle --runtime linux-x64 -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle
.
Migreringspaketet är en fristående körbar fil som du kan köra i produktionsmiljön utan att behöva .NET SDK. App Service Linux-containern har bara .NET-körningen och inte .NET SDK.Steg 6:
Configure Azure database and cache connections
. Eller välj Steg 7: Tillbaka på sidan Distributionscenter i Azure Portal:
Steg 8: Du tas till din GitHub-lagringsplats och ser att GitHub-åtgärden körs. Arbetsflödesfilen definierar två separata steg, skapa och distribuera. Vänta tills GitHub-körningen visar statusen Lyckades. Det tar ungefär 5 minuter.
Har du problem? Kontrollera felsökningsavsnittet.
Med SQL Database som skyddas av det virtuella nätverket är det enklaste sättet att köra dotnet-databasmigreringar i en SSH-session med Linux-containern i App Service.
Steg 1: Tillbaka i App Service-sidan, i den vänstra menyn,
Steg 2: I SSH-sessionen:
cd /home/site/wwwroot
. Här är alla dina distribuerade filer../migrationsbundle -- --environment Production
. Om det lyckas ansluter App Service till SQL Database. Kom ihåg att --environment Production
motsvarar de kodändringar som du gjorde i Program.cs.I SSH-sessionen kan endast ändringar av filer i /home
sparas utöver omstarter av appar. Ändringar utanför /home
sparas inte.
Har du problem? Kontrollera felsökningsavsnittet.
Steg 1: På App Service-sidan:
Steg 2: Lägg till några uppgifter i listan. Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure SQL Database.
Tips
Exempelprogrammet implementerar cache-aside-mönstret . När du besöker en datavy för andra gången, eller läser in samma sida igen när du har gjort dataändringar, visar bearbetningstiden på webbsidan en mycket snabbare tid eftersom den läser in data från cacheminnet i stället för databasen.
Azure App Service samlar in alla konsolloggar som hjälper dig att diagnostisera problem med ditt program. Exempelappen innehåller loggningskod i var och en av dess slutpunkter för att demonstrera den här funktionen.
Steg 1: På App Service-sidan:
Steg 2: Välj Loggström på den vänstra menyn. Du ser loggarna för din app, inklusive plattformsloggar och loggar inifrån containern.
När du är klar kan du ta bort alla resurser från din Azure-prenumeration genom att ta bort resursgruppen.
Steg 1: I sökfältet överst i Azure Portal:
Steg 2: På resursgruppssidan väljer du Ta bort resursgrupp.
Steg 3:
I det här steget skapar du Azure-resurserna och distribuerar en exempelapp för att App Service på Linux. Stegen som används i den här självstudien skapar en uppsättning säkra resurser som standard som inkluderar App Service, Azure SQL Database och Azure Cache for Redis.
Utvecklingscontainern har redan Azure Developer CLI (AZD).
Från lagringsplatsens rot kör du azd init
.
azd init --template dotnet-app-service-sqldb-infra
När du uppmanas att ge följande svar:
Fråga | Svar |
---|---|
Den aktuella katalogen är inte tom. Vill du initiera ett projekt här i "<din katalog>"? | Y |
Vad vill du göra med de här filerna? | Behåll mina befintliga filer oförändrade |
Ange ett nytt miljönamn | Skriv ett unikt namn. AZD-mallen använder det här namnet som en del av DNS-namnet på din webbapp i Azure (<app-name>-<hash>.azurewebsites.net ). Alfanumeriska tecken och bindestreck tillåts. |
Logga in på Azure genom att azd auth login
köra kommandot och följa kommandotolken:
azd auth login
Skapa nödvändiga Azure-resurser och distribuera appkoden med azd up
kommandot . Följ uppmaningen för att välja önskad prenumeration och plats för Azure-resurserna.
azd up
Kommandot azd up
tar cirka 15 minuter att slutföra (Redis-cachen tar mest tid). Den kompilerar och distribuerar även programkoden, men du ändrar koden senare så att den fungerar med App Service. När den körs innehåller kommandot meddelanden om etablerings- och distributionsprocessen, inklusive en länk till distributionen i Azure. När det är klart visar kommandot även en länk till distributionsprogrammet.
Den här AZD-mallen innehåller filer (azure.yaml och infra-katalogen ) som genererar en säker arkitektur som standard med följande Azure-resurser:
När kommandot har skapat resurser och distribuerat programkoden första gången fungerar inte den distribuerade exempelappen ännu eftersom du måste göra små ändringar för att den ska kunna ansluta till databasen i Azure.
Har du problem? Kontrollera felsökningsavsnittet.
Tips
Sql-standarddatabasen anslutningssträng använder SQL-autentisering. Mer säker och lösenordslös autentisering finns i Hur gör jag för att ändra SQL Database-anslutningen till att använda en hanterad identitet i stället?
Den AZD-mall som du använder genererade anslutningsvariablerna åt dig redan som appinställningar och matar ut dem till terminalen för din bekvämlighet. Appinställningar är ett sätt att hålla anslutningshemligheter borta från din kodlagringsplats.
I AZD-utdata hittar du inställningarna AZURE_SQL_CONNECTIONSTRING
och AZURE_REDIS_CONNECTIONSTRING
. Endast inställningsnamnen visas. De ser ut så här i AZD-utdata:
App Service app has the following connection strings: - AZURE_SQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
AZURE_SQL_CONNECTIONSTRING
innehåller anslutningssträng till SQL Database i Azure och AZURE_REDIS_CONNECTIONSTRING
innehåller anslutningssträng till Azure Redis-cachen. Du måste använda dem i koden senare.
För att underlätta för dig visar AZD-mallen direktlänken till appens appinställningarssida. Hitta länken och öppna den på en ny webbläsarflik.
Har du problem? Kontrollera felsökningsavsnittet.
I GitHub-kodområdet startar du en ny chattsession genom att välja vyn Chatt och sedan välja +.
Fråga: "@workspace Hur ansluter appen till databasen och cachen?" Copilot kan ge dig en förklaring om klassen och hur den MyDatabaseContext
konfigureras i Program.cs.
Fråga: "I produktionsläge vill jag att appen ska använda anslutningssträng som heter AZURE_SQL_CONNECTIONSTRING för databasen och appinställningen med namnet AZURE_REDIS_CONNECTIONSTRING*." Copilot kan ge dig ett kodförslag som liknar det i alternativ 2: utan GitHub Copilot-stegen nedan och till och med be dig att göra ändringen i filen Program.cs.
Öppna Program.cs i utforskaren och lägg till kodförslaget.
GitHub Copilot ger dig inte samma svar varje gång, och det är inte alltid korrekt. Du kan behöva ställa fler frågor för att finjustera svaret. Tips finns i Vad kan jag göra med GitHub Copilot i mitt kodområde?.
Innan du distribuerar dessa ändringar måste du fortfarande generera ett migreringspaket.
Har du problem? Kontrollera felsökningsavsnittet.
Med SQL Database som skyddas av det virtuella nätverket är det enklaste sättet att köra databasmigreringar i en SSH-session med App Service-containern. Men App Service Linux-containrarna har inte .NET SDK, så det enklaste sättet att köra databasmigreringar är att ladda upp ett fristående migreringspaket.
Generera ett migreringspaket för projektet med följande kommando:
dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
Tips
Exempelprogrammet (se DotNetCoreSqlDb.csproj) har konfigurerats för att inkludera den här migreringsbundle-filen .
azd package
Under fasen läggs migreringsbundle till i distributionspaketet.
Distribuera alla ändringar med azd up
.
azd up
I AZD-utdata letar du reda på URL:en för SSH-sessionen och navigerar till den i webbläsaren. Det ser ut så här i utdata:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
Kör följande kommandon i SSH-sessionen:
cd /home/site/wwwroot
./migrationsbundle -- --environment Production
Om det lyckas ansluter App Service till databasen. Kom ihåg att --environment Production
motsvarar de kodändringar som du gjorde i Program.cs.
Anteckning
Endast ändringar i filer i /home
kan bevaras utöver omstarter av appar. Ändringar utanför /home
sparas inte.
Har du problem? Kontrollera felsökningsavsnittet.
I AZD-utdata letar du reda på url:en för din app och navigerar till den i webbläsaren. URL:en ser ut så här i AZD-utdata:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Lägg till några uppgifter i listan.
Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure SQL Database.
Har du problem? Kontrollera felsökningsavsnittet.
Azure App Service kan samla in konsolloggar som hjälper dig att diagnostisera problem med ditt program. För enkelhetens skull har AZD-mallen redan aktiverat loggning till det lokala filsystemet och skickar loggarna till en Log Analytics-arbetsyta.
Exempelprogrammet innehåller standardloggningsinstruktioner för att demonstrera den här funktionen, enligt följande kodfragment:
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);
}
}
I AZD-utdata hittar du länken för att strömma App Service-loggar och navigera till den i webbläsaren. Länken ser ut så här i AZD-utdata:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Läs mer om loggning i .NET-appar i serien på Aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.
Har du problem? Kontrollera felsökningsavsnittet.
Om du vill ta bort alla Azure-resurser i den aktuella distributionsmiljön kör azd down
du och följer anvisningarna.
azd down
SSH CONN CLOSED
Connected!
men inga loggarBeroende på din prenumeration och den region du väljer kan distributionsstatusen för Azure SQL Database vara Conflict
, med följande meddelande i Åtgärdsinformation:
Location '<region>' is not accepting creation of new Windows Azure SQL Database servers at this time.
Det här felet orsakas troligen av en gräns för din prenumeration för den region du väljer. Prova att välja en annan region för distributionen.
Du kan se det här felet:
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.
Detta är vanligtvis ett tillfälligt fel när appen startas först. Vänta några minuter och kontrollera igen.
Det tar några minuter innan Linux-containern startas. Vänta några minuter och kontrollera igen.
När du har konfigurerat diagnostikloggar startas appen om. Du kan behöva uppdatera sidan för att ändringarna ska börja gälla i webbläsaren.
Prissättningen för de skapade resurserna är följande:
sqlcmd
från appens SSH-terminal. Appens container levereras inte med sqlcmd
, så du måste installera den manuellt. Kom ihåg att den installerade klienten inte finns kvar i omstarter av appar.Ta den autogenererade arbetsflödesfilen från App Service som exempel. Var git push
och en startar en ny version och distributionskörning. Från en lokal klon av GitHub-lagringsplatsen får du önskade uppdateringar att skicka den till GitHub. Till exempel:
git add .
git commit -m "<some-message>"
git push origin main
Om ett steg misslyckas i den autogenererade GitHub-arbetsflödesfilen kan du prova att ändra det misslyckade kommandot för att generera mer utförliga utdata. Du kan till exempel få mer utdata från något av dotnet
kommandona genom att lägga till alternativet -v
. Checka in och skicka ändringarna för att utlösa en annan distribution till App Service.
Se Konfigurera GitHub Actions-distribution från Distributionscenter.
Standard anslutningssträng till SQL-databasen hanteras av Service Connector, med namnet defaultConnector, och den använder SQL-autentisering. Om du vill ersätta den med en anslutning som använder en hanterad identitet kör du följande kommandon i Cloud Shell när du har ersatt platshållarna:
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
Som standard gör kommandot az webapp connection create sql --client-type dotnet --system-identity --config-connstr
följande:
AZURE_SQL_CONNECTIONGSTRING
, som appen redan använder i slutet av självstudien.Din app bör nu ha anslutning till SQL-databasen. Mer information finns i Självstudie: Ansluta till Azure-databaser från App Service utan hemligheter med hjälp av en hanterad identitet.
Tips
Vill du inte aktivera offentlig nätverksanslutning? Du kan hoppa över az sql server update --enable-public-network true
genom att köra kommandona från ett Azure Cloud Shell som är integrerat med ditt virtuella nätverk om du har rollen Ägare i din prenumeration.
För att ge identiteten den nödvändiga åtkomsten till databasen som skyddas av det virtuella nätverket az webapp connection create sql
behöver du direktanslutning med Entra-ID-autentisering till databasservern. Som standard har Azure Cloud Shell inte den här åtkomsten till den nätverkssäkra databasen.
Du kanske har märkt att GitHub Copilot-chattvyn redan fanns där när du skapade kodområdet. För din bekvämlighet inkluderar vi GitHub Copilot-chatttillägget i containerdefinitionen (se .devcontainer/devcontainer.json). Du behöver dock ett GitHub Copilot-konto (30 dagars kostnadsfri utvärderingsversion tillgänglig).
Några tips när du pratar med GitHub Copilot:
@workspace
. Mer information finns i Use the @workspace agent.@workspace
) även var ändringarna ska utföras, men det är inte tillåtet att göra ändringarna åt dig. Det är upp till dig att lägga till de föreslagna ändringarna och testa dem.Här är några andra saker du kan säga för att finjustera svaret du får:
Gå vidare till nästa självstudie för att lära dig hur du skyddar din app med en anpassad domän och ett certifikat.
Eller kolla in andra resurser:
Händelser
17 mars 21 - 21 mars 10
Gå med i mötesserien för att skapa skalbara AI-lösningar baserat på verkliga användningsfall med andra utvecklare och experter.
Registrera dig nuUtbildning
Modul
Anpassa en .NET Aspire-app för att använda befintliga Azure-resurser - Training
I den här modulen får du lära dig hur du flyttar säkerhetskopieringstjänster för din Azure-värdbaserade .NET Aspire-app från containrar till interna Azure-tjänster.
Certifiering
Microsoft Certified: Azure Developer Associate - Certifications
Skapa lösningar från slutpunkt till slutpunkt i Microsoft Azure för att skapa Azure Functions, implementera och hantera webbappar, utveckla lösningar som använder Azure Storage med mera.
Dokumentation
Självstudie: ASP.NET app med Azure SQL Database - Azure App Service
Lär dig hur du distribuerar en C#-ASP.NET-app till Azure och till Azure SQL Database
Snabbstart: Distribuera en ASP.NET webbapp - Azure App Service
Lär dig hur du kör webbappar i Azure App Service genom att distribuera din första ASP.NET app.
Konfigurera ASP.NET appar - Azure App Service
Lär dig hur du konfigurerar en ASP.NET app i Azure App Service. I artikeln visas de vanligaste konfigurationsåtgärderna.