Självstudiekurs: Distribuera ett .NET-program i en Windows-container till Azure Service Fabric

I den här självstudiekursen lär du dig hur du skapar en container för ett befintligt ASP.NET-program och hur du paketerar programmet som ett Service Fabric-program. Kör containrarna lokalt i Service Fabric-utvecklingsklustret och distribuera sedan programmet till Azure. Programmet sparar data i Azure SQL Database.

I den här guiden får du lära dig att:

  • Använda en container med 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

Anteckning

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. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Förutsättningar

  1. Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt konto.
  2. Aktivera Windows-funktioner Hyper-V och Containrar.
  3. Installera Docker Desktop för Windows så att du kan köra containrar på Windows 10.
  4. Installera Service Fabric Runtime version 6.2 eller senare och Service Fabric SDK version 3.1 eller senare.
  5. Installera Visual Studio och aktivera arbetsbelastningar för Azure-utveckling och ASP.NET och webbutveckling .
  6. Installera Azure PowerShell

Ladda ned och kör Fabrikam Fiber CallCenter

  1. Ladda ned Exempelprogrammet Fabrikam Fiber CallCenter från GitHub.

  2. Kontrollera att Fabrikam Fiber CallCenter-programmet skapas 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.

    Skärmbild av startsidan för Fabrikam Fiber CallCenter-programmet som körs på den lokala värden. Sidan visar en instrumentpanel med en lista över supportanrop.

Skapa en Azure SQL DB-databas

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. Konfigurera och kör en hanterad SQL Server-databas i Azure genom att köra följande skript. Ändra skriptvariablerna efter behov. clientIP är utvecklingsdatorns IP-adress. Anteckna namnet på den server som genererade 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

Om datorn finns bakom en företagsbrandvägg kanske utvecklingsdatorns IP-adress inte exponeras mot Internet. Kontrollera att databasen har rätt IP-adress för brandväggsregeln genom att gå till Azure-portalen och leta upp din databas i avsnittet för SQL-databaser. Klicka på dess namn. I avsnittet Översikt klickar du sedan på ”Konfigurera serverns brandvägg”. ”Klient-IP-adress” är utvecklingsdatorns IP-adress. Se till att den matchar IP-adressen i regeln ”AllowClient” (tillåt klient).

Uppdatera webbkonfiguration

I projektet FabrikamFiber.Web uppdaterar du anslutningssträngen i filen web.config så att den pekar på SQL Server i containern. Uppdatera Server-delen i anslutningssträngen så att det blir servernamnet som skapades med föregående skript. Det bör vara något som liknar ”fab-fiber-751718376.database.windows.net”. I följande XML behöver du bara connectionString uppdatera attributet. 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" />
  

Anteckning

Du kan använda vilken SQL-Server som helst för lokal felsökning så länge den kan nås från värden, men localdb stöder inte container -> host-kommunikation. Om du vill använda en annan SQL-databas när du skapar ett versionsbygge av ditt webbprogram, lägger du till ytterligare en anslutningssträng i filen web.release.config.

Använd programmet med en container

  1. Högerklicka på projektet >FabrikamFiber.WebLägg till>stöd för Container Orchestrator. Välj Service Fabric som initierare för containern och klicka på OK.

  2. Om du uppmanas till det klickar du på Ja för att växla Docker till Windows-containrar nu.

    Ett nytt Service Fabric-programprojekt 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 FabrikamFiber.Web-projektet, 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 containeravbildningen klar på datorn kan du lägga den i valfritt containerregister och hämta den till valfri värd för körning.

Kör programmet i containern 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 ett meddelande visas där du ombeds att ge gruppen 'ServiceFabricAllowedUsers' läs- och körbehörighet till katalogen Visual Studio-projekt.

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 kan du börja förbereda distributionen till Azure. Containeravbildningar måste lagras i ett containerregister. Skapa ett Azure-containerregister med hjälp av följande skript. Containerregisternamnet är synligt för andra Azure-prenumerationer så det måste vara unikt. Innan du distribuerar programmet till Azure skickar du containeravbildningen via push-teknik 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 i ett kluster, en nätverksansluten uppsättning virtuella eller fysiska datorer. Innan du kan distribuera programmet till Azure måste du skapa 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 dina önskade konfigurationer.
  • Skapa ett säkert kluster från en mall

I den här självstudiekursen skapar du ett kluster från Visual Studio, vilket är idealiskt för testscenarier. Om du skapar ett kluster på något annat sätt eller om du använder ett befintligt kluster kan du kopiera och klistra in anslutningens slutpunkt eller välja den från din prenumeration.

Innan du börjar öppnar du FabrikamFiber.Web –> PackageRoot –> ServiceManifest.xml i Solution Explorer. Anteckna porten för webbklientdelen som visas i Slutpunkt.

När du skapar klustret:

  1. Högerklicka på FabrikamFiber.CallCenterApplication-programprojektet i Solution Explorer och välj Publicera.

  2. Logga in med ditt Azure-konto så att du får åtkomst till dina prenumerationer.

  3. Under listrutan för anslutningsslutpunkten väljer du alternativet Skapa nytt kluster... .

  4. Ä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 som krävs för att testa scenarier i Service Fabric.

    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. Med det här certifikatet blir klustret säkrare. Du kan också ändra sökvägen till den plats där du vill spara certifikatet. Visual Studio kan dessutom importera certifikatet åt dig, eftersom det är ett obligatoriskt steg för att kunna publicera programmet i klustret.

    Anteckning

    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 den Virtual Machines (VM) som utgör klustret. Användarnamnet och lösenordet kan användas för att fjärransluta till de virtuella datorerna. Du måste också välja en virtuell datorstorlek och du kan ändra VM-avbildning om det behövs.

    Viktigt

    Välj en SKU som stöder körningscontainrar. Windows Server-operativsystemet på klusternoderna måste vara kompatibla med Windows Server-operativsystemet för din container. Mer information finns i Kompatibilitet mellan operativsystem för Windows Server-containrar och värdoperativsystem. Den här guiden skapar en Docker-avbildning baserat på Windows Server 2016 LTSC som standard. Containrar som bygger på den här avbildningen kan köras på kluster som skapas med Windows Server 2016 Datacenter med Containers. Men om du skapar ett kluster eller använder ett befintligt kluster baserat på en annan version av Windows Server måste du ändra operativsystemavbildningen som containern baseras på. Öppna dockerfile i projektet FabrikamFiber.Web , kommentera ut eventuella befintliga FROM instruktioner baserat på en tidigare version av Windows Server och lägg till en FROM instruktion baserat på den önskade versionens tagg från Sidan Windows Server Core DockerHub. Mer information om Windows Server Core-versioner, stödtidslinje och versionshantering finns i Windows Server Core-versionsinformation.

    e. På fliken Avancerat visar 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 används för att dirigera programmets loggfiler.

    f. När du har ändrat inställningarna klickar du på knappen Skapa.

  5. Åtgärden tar flera minuter. Utdatafönstret visar när klustret har skapats.

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 –>Personligt –>Certifikat. Certifikatet ska vara som [Klusternamn]. [Klusterplats].cloudapp.azure.com, t.ex. fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

Tillåt att ditt program som körs i Azure får åtkomst till SQL Database

Tidigare skapade du en SQL-brandväggsregel som gav åtkomst till programmet som körs lokalt. Nu måste du ge programmet som körs i Azure åtkomst till SQL DB-databasen. Skapa en tjänstslutpunkt för virtuellt nätverk för Service Fabric-klustret och skapa sedan en regel som ger slutpunkten åtkomst till SQL-databasen. Glöm inte att ange variabeln för klusterresursgruppen 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å FabrikamFiber.CallCenterApplication-programprojektet i Solution Explorer och välj Publicera. I Anslutningens slutpunkt väljer du slutpunkten för klustret som du skapade tidigare. I Azure Container Registry väljer du behållarregistret som du skapade tidigare. Publicera programmet till klustret i Azure genom att klicka på Publicera.

Publicera programmet

Följ distributionsförloppet i utdatafönstret När programmet har distribuerats öppnar du en webbläsare och anger klusteradressen och programporten. Till exempel http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/.

Skärmbild av startsidan för Fabrikam Fiber CallCenter-programmet som körs på azure.com. Sidan visar en instrumentpanel med en lista över supportanrop.

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 till Utforskaren 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 en CI/CD-programdistribution till ett Service Fabric-kluster finns i Självstudiekurs: Distribuera ett program med CI/CD till ett Service Fabric-kluster. Den process som beskrivs i självstudien är densamma för det här projektet (FabrikamFiber), förutom att du hoppar nedladdningen av Voting-exemplet och använder FabrikamFiber som namnet på lagringsplatsen i stället för Voting.

Rensa resurser

När du är klar tar du bort alla resurser du skapat. Det enklaste sättet att göra det är att ta bort resursgrupperna som innehåller Service Fabric-klustret, Azure SQL-databasen 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 självstudiekursen lärde du dig att:

  • Använda en container med 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älvstudierna lär du dig hur du distribuerar ett containerprogram med CI/CD till ett Service Fabric-kluster.