Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här självstudien visar hur du containeriserar ett befintligt ASP.NET program och paketerar det som ett Service Fabric-program. Kör containrarna lokalt i Service Fabric-utvecklingsklustret och distribuera sedan programmet till Azure. Programmet bevarar data i Azure SQL Database.
I den här tutorialen lär du dig följande:
- Containerisera ett befintligt program med Hjälp av Visual Studio
- Skapa en databas i Azure SQL Database
- Skapa ett Azure-containerregister
- Distribuera ett Service Fabric-program till Azure
Anmärkning
Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. För att lära dig hur du migrerar till Az PowerShell-modulen, se Migrera Azure PowerShell från AzureRM till Az.
Förutsättningar
- Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
- Aktivera Windows-funktionen Hyper-V och Containrar.
- Installera Docker Desktop för Windows så att du kan köra containrar på Windows 10.
- Installera Service Fabric Runtime version 6.2 eller senare och Service Fabric SDK version 3.1 eller senare.
- Installera Visual Studio och aktivera arbetsbelastningar för Azure-utveckling och ASP.NET och webbutveckling .
- Installera Azure PowerShell
Ladda ned och kör Fabrikam Fiber CallCenter
Ladda ned exempelprogrammet Fabrikam Fiber CallCenter från GitHub.
Kontrollera att Fabrikam Fiber CallCenter-programmet bygger och körs utan fel. Starta Visual Studio som administratör och öppna filen VS2015\FabrikamFiber.CallCenter.sln . Tryck på F5 för att köra och felsöka programmet.
Skapa en Azure SQL DB
När du kör Fabrikam Fiber CallCenter-programmet i produktion måste data sparas i en databas. Det finns för närvarande inget sätt att garantera beständiga data i en container, därför kan du inte lagra produktionsdata i SQL Server i en container.
Vi rekommenderar Azure SQL Database. Kör följande skript för att konfigurera och köra en hanterad SQL Server DB i Azure. Ändra skriptvariablerna efter behov. clientIP är IP-adressen för utvecklingsdatorn. Anteckna namnet på servern som ges som utdata av skriptet.
$subscriptionID="<subscription ID>"
# Sign in to your Azure account and select your subscription.
Login-AzAccount -SubscriptionId $subscriptionID
# The data center and resource name for your resources.
$dbresourcegroupname = "fabrikam-fiber-db-group"
$location = "southcentralus"
# The server name: Use a random value or replace with your own value (do not capitalize).
$servername = "fab-fiber-$(Get-Random)"
# Set an admin login and password for your database.
# The login information for the server.
$adminlogin = "ServerAdmin"
$password = "Password@123"
# The IP address of your development computer that accesses the SQL DB.
$clientIP = "<client IP>"
# The database name.
$databasename = "call-center-db"
# Create a new resource group for your deployment and give it a name and a location.
New-AzResourceGroup -Name $dbresourcegroupname -Location $location
# Create the SQL server.
New-AzSqlServer -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-Location $location `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-FirewallRuleName "AllowClient" -StartIpAddress $clientIP -EndIpAddress $clientIP
# Create the database in the server.
New-AzSqlDatabase -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-DatabaseName $databasename `
-RequestedServiceObjectiveName "S0"
Write-Host "Server name is $servername"
Tips/Råd
Om du är bakom en företagsbrandvägg kanske IP-adressen för utvecklingsdatorn inte är IP-adress som exponeras för Internet. Om du vill kontrollera att databasen har rätt IP-adress för brandväggsregeln går du till Azure-portalen och letar reda på databasen i avsnittet SQL Databases. Klicka på namnet och klicka sedan på "Ange serverbrandvägg" i avsnittet Översikt. "Klientens IP-adress" är IP-adressen för utvecklingsdatorn. Kontrollera att den matchar IP-adressen i regeln "AllowClient".
Uppdatera webbkonfigurationen
I projektet FabrikamFiber.Web uppdaterar du anslutningssträngen i web.config-filen så att den pekar på SQL Server i containern. Uppdatera serverdelen av anslutningssträngen så att den är det servernamn som skapades av föregående skript. Det borde vara något i stil med "fab-fiber-751718376.database.windows.net". I följande XML behöver du uppdatera bara attributet connectionString; attributen providerName och name behöver inte ändras.
<add name="FabrikamFiber-Express" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
<add name="FabrikamFiber-DataWarehouse" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
Anmärkning
Du kan använda valfri SQL Server som du föredrar för lokal felsökning, så länge den kan nås från datorn.
Localdb stöder container -> host dock inte kommunikation. Om du vill använda en annan SQL-databas när du skapar en versionsversion av webbappen lägger du till ytterligare en anslutningssträng i web.release.config-filen .
Containerisera applikationen
Högerklicka på projektet >Lägg till>stöd för Container Orchestrator. Välj Service Fabric som containerorkestrerare och klicka på OK.
Om du uppmanas till det klickar du på Ja för att växla Docker till Windows-containrar nu.
Ett nytt projekt för Service Fabric-programprojektet FabrikamFiber.CallCenterApplication skapas i lösningen. En Dockerfile läggs till i det befintliga FabrikamFiber.Web-projektet . En PackageRoot-katalog läggs också till i projektet FabrikamFiber.Web , som innehåller tjänstmanifestet och inställningarna för den nya FabrikamFiber.Web-tjänsten.
Containern är nu redo att byggas och paketeras i ett Service Fabric-program. När du har skapat containeravbildningen på din dator kan du skicka den till valfritt containerregister och dra ner den till valfri värd för att köra.
Kör det containerbaserade programmet lokalt
Tryck på F5 för att köra och felsöka programmet i en container i det lokala Service Fabric-utvecklingsklustret. Klicka på Ja om du får en meddelanderuta där du uppmanas att bevilja gruppen ServiceFabricAllowedUsers läs- och körningsbehörighet till visual studio-projektkatalogen.
Om F5-körningen genererar ett undantag, till exempel följande, har rätt IP-adress inte lagts till i Azure Database-brandväggen.
System.Data.SqlClient.SqlException
HResult=0x80131904
Message=Cannot open server 'fab-fiber-751718376' requested by the login. Client with IP address '123.456.789.012' is not allowed to access the server. To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range. It may take up to five minutes for this change to take effect.
Source=.Net SqlClient Data Provider
StackTrace:
<Cannot evaluate the exception stack trace>
Kör följande kommando för att lägga till lämplig IP-adress i Azure Database-brandväggen.
# The IP address of your development computer that accesses the SQL DB.
$clientIPNew = "<client IP from the Error Message>"
# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-FirewallRuleName "AllowClientNew" -StartIpAddress $clientIPNew -EndIpAddress $clientIPNew
Skapa ett containerregister
Nu när programmet körs lokalt börjar du förbereda distributionen till Azure. Containeravbildningar måste lagras i ett containerregister. Skapa ett Azure-containerregister med hjälp av följande skript. Containerregistrets namn visas av andra Azure-prenumerationer, så det måste vara unikt. Innan du distribuerar programmet till Azure skickar du containeravbildningen till det här registret. När programmet distribueras till klustret i Azure hämtas containeravbildningen från det här registret.
# Variables
$acrresourcegroupname = "fabrikam-acr-group"
$location = "southcentralus"
$registryname="fabrikamregistry$(Get-Random)"
New-AzResourceGroup -Name $acrresourcegroupname -Location $location
$registry = New-AzContainerRegistry -ResourceGroupName $acrresourcegroupname -Name $registryname -EnableAdminUser -Sku Basic
Skapa ett Service Fabric-kluster i Azure
Service Fabric-program körs på ett kluster, en nätverksansluten uppsättning virtuella eller fysiska datorer. Innan du kan distribuera programmet till Azure skapar du ett Service Fabric-kluster i Azure.
Du kan:
- Skapa ett testkluster från Visual Studio. Med det här alternativet kan du skapa ett säkert kluster direkt från Visual Studio med önskade konfigurationer.
- Skapa ett säkert kluster från en mall
Den här handledningen skapar ett kluster via Visual Studio, vilket är idealiskt för testscenarier. Om du skapar ett kluster på något annat sätt eller använder ett befintligt kluster kan du kopiera och klistra in anslutningsslutpunkten eller välja den från din prenumeration.
Öppna FabrikamFiber.Web –> PackageRoot –> ServiceManifest.xml i Solution Explorer innan du börjar. Anteckna porten för webbgränssnittet som anges i Endpoint.
När du skapar klustret:
Högerklicka på programprojektet FabrikamFiber.CallCenterApplication i Solution Explorer och välj Publicera.
Logga in med ditt Azure-konto så att du kan få åtkomst till dina prenumerationer.
Under listrutan för anslutningsslutpunkten väljer du alternativet Skapa nytt kluster... .
Ändra följande inställningar i dialogrutan Skapa kluster :
a. Ange namnet på klustret i fältet Klusternamn samt den prenumeration och plats som du vill använda. Anteckna namnet på klusterresursgruppen.
b) Valfritt: Du kan ändra antalet noder. Som standard har du tre noder, vilket är det minsta som krävs för att testa Service Fabric-scenarier.
c. Välj fliken Certifikat . På den här fliken skriver du ett lösenord som ska användas för att skydda certifikatet för klustret. Det här certifikatet hjälper till att skydda klustret. Du kan också ändra sökvägen till den plats där du vill spara certifikatet. Visual Studio kan också importera certifikatet åt dig, eftersom det här är ett obligatoriskt steg för att publicera programmet i klustret.
Anmärkning
Anteckna mappsökvägen där certifikatet importeras. Nästa steg när klustret har skapats är att importera det här certifikatet.
d. Välj fliken Information om virtuell dator . Ange det lösenord som du vill använda för de virtuella datorer (VM) som utgör klustret. Användarnamnet och lösenordet kan användas för fjärranslutning till de virtuella datorerna. Du måste också välja en vm-datorstorlek och kan ändra VM-avbildningen om det behövs.
Viktigt!
Välj en SKU som stöder körning av containrar. Windows Server-operativsystemet på klusternoderna måste vara kompatibelt med Windows Server OS för din container. Mer information finns i kompatibilitet med Windows Server-containeroperativsystem och värdoperativsystem. Som standardinställning skapar den här handledningen en Docker-avbildning baserad på Windows Server 2016 LTSC. Containrar baserade på den här avbildningen körs på kluster som skapats med Windows Server 2016 Datacenter med containrar. Men om du skapar ett kluster eller använder ett befintligt kluster baserat på en annan version av Windows Server måste du ändra os-avbildningen som containern baseras på. Öppna dockerfile i FabrikamFiber.Web-projektet , kommentera ut eventuella befintliga
FROMinstruktioner baserat på en tidigare version av Windows Server och lägg till enFROMinstruktion baserat på den önskade versionens tagg från Sidan Windows Server Core DockerHub. Mer information om Windows Server Core-versioner, supporttidslinje och versionshantering finns i information om Windows Server Core-versionen.e. På fliken Avancerat listar du programporten som ska öppnas i lastbalanseraren när klustret distribueras. Det här är den port som du antecknade innan du började skapa klustret. Du kan också lägga till en befintlig Application Insights-nyckel som ska användas för att dirigera programloggfiler till.
f. När du är klar med att ändra inställningarna väljer du knappen Skapa .
Det tar flera minuter att skapa. utdatafönstret anger när klustret är helt skapat.
Installera det importerade certifikatet
Installera certifikatet som importerats som en del av steget för att skapa klustret på platsen för aktuellt användararkiv och ange lösenordet för den privata nyckeln som du angav.
Du kan bekräfta installationen genom att öppna Hantera användarcertifikat från kontrollpanelen och bekräfta att certifikatet har installerats under Certifikat – Aktuell användare –>Personliga ->Certifikat. Certifikatet ska vara som [Klusternamn]. [Klusterplats].cloudapp.azure.com, t.ex. fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.
Tillåt att ditt program körs i Azure för att få åtkomst till SQL Database
Tidigare skapade du en SQL-brandväggsregel för att ge åtkomst till ditt program som körs lokalt. Därefter måste du aktivera programmet som körs i Azure för att få åtkomst till SQL DB. Skapa en tjänstslutpunkt för virtuellt nätverk för Service Fabric-klustret och skapa sedan en regel för att tillåta att slutpunkten får åtkomst till SQL DB. Se till att ange den klusterresursgruppvariabel som du antecknade när du skapade klustret.
# Create a virtual network service endpoint
$clusterresourcegroup = "<cluster resource group>"
$resource = Get-AzResource -ResourceGroupName $clusterresourcegroup -ResourceType Microsoft.Network/virtualNetworks | Select-Object -first 1
$vnetName = $resource.Name
Write-Host 'Virtual network name: ' $vnetName
# Get the virtual network by name.
$vnet = Get-AzVirtualNetwork `
-ResourceGroupName $clusterresourcegroup `
-Name $vnetName
Write-Host "Get the subnet in the virtual network:"
# Get the subnet, assume the first subnet contains the Service Fabric cluster.
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet | Select-Object -first 1
$subnetName = $subnet.Name
$subnetID = $subnet.Id
$addressPrefix = $subnet.AddressPrefix
Write-Host "Subnet name: " $subnetName " Address prefix: " $addressPrefix " ID: " $subnetID
# Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet.
$vnet = Set-AzVirtualNetworkSubnetConfig `
-Name $subnetName `
-AddressPrefix $addressPrefix `
-VirtualNetwork $vnet `
-ServiceEndpoint Microsoft.Sql | Set-AzVirtualNetwork
$vnet.Subnets[0].ServiceEndpoints; # Display the first endpoint.
# Add a SQL DB firewall rule for the virtual network service endpoint
$subnet = Get-AzVirtualNetworkSubnetConfig `
-Name $subnetName `
-VirtualNetwork $vnet;
$VNetRuleName="ServiceFabricClusterVNetRule"
$vnetRuleObject1 = New-AzSqlServerVirtualNetworkRule `
-ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-VirtualNetworkRuleName $VNetRuleName `
-VirtualNetworkSubnetId $subnetID;
Distribuera appen till Azure
Nu när programmet är klart kan du distribuera det till klustret i Azure direkt från Visual Studio. Högerklicka på programprojektet FabrikamFiber.CallCenterApplication i Solution Explorer och välj Publicera. I Anslutningsslutpunkt väljer du slutpunkten för klustret som du skapade tidigare. I Azure Container Registry väljer du det containerregister som du skapade tidigare. Klicka på Publicera för att distribuera programmet till klustret i Azure.
Följ distributionsstatusen i utdatafönstret. När programmet har distribuerats öppnar du en webbläsare och skriver in klusteradressen och programporten. Till exempel http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/.
Om sidan inte kan läsas in, eller om det inte går att fråga efter certifikatet, kan du till exempel https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer försöka öppna sökvägen Explorer och välja det nyligen installerade certifikatet.
Konfigurera kontinuerlig integrering och distribution (CI/CD) med ett Service Fabric-kluster
Mer information om hur du använder Azure DevOps för att konfigurera CI/CD-programdistribution till ett Service Fabric-kluster finns i Självstudie: Distribuera ett program med CI/CD till ett Service Fabric-kluster. Processen som beskrivs i självstudien är densamma för det här projektet (FabrikamFiber), hoppa bara över att ladda ned röstningsexemplet och ersätta FabrikamFiber som lagringsplatsnamn i stället för Röstning.
Rensa resurser
Om du är klar måste du ta bort alla resurser som du har skapat. Det enklaste sättet är att ta bort de resursgrupper som innehåller Service Fabric-klustret, Azure SQL DB och Azure Container Registry.
$dbresourcegroupname = "fabrikam-fiber-db-group"
$acrresourcegroupname = "fabrikam-acr-group"
$clusterresourcegroupname="fabrikamcallcentergroup"
# Remove the Azure SQL DB
Remove-AzResourceGroup -Name $dbresourcegroupname
# Remove the container registry
Remove-AzResourceGroup -Name $acrresourcegroupname
# Remove the Service Fabric cluster
Remove-AzResourceGroup -Name $clusterresourcegroupname
Nästa steg
I den här handledningen lärde du dig att:
- Containerisera ett befintligt program med Hjälp av Visual Studio
- Skapa en databas i Azure SQL Database
- Skapa ett Azure-containerregister
- Distribuera ett Service Fabric-program till Azure
I nästa del av självstudien lär du dig hur du distribuerar ett containerprogram med CI/CD till ett Service Fabric-kluster.