Zelfstudie: Een .NET-toepassing in een Windows-container implementeren in Azure Service Fabric
Deze zelfstudie laat u zien hoe u een bestaande ASP.NET-toepassing in een container plaatst en verpakt als een Service Fabric-toepassing. Voer de containers lokaal uit in het Service Fabric-ontwikkelingscluster en implementeer de toepassing vervolgens in Azure. De toepassing maakt gegevens persistent in Azure SQL Database.
In deze zelfstudie leert u het volgende:
- Een bestaande toepassing in een container plaatsen met behulp van Visual Studio
- Een database maken in Azure SQL Database
- Een Azure-containerregister maken
- Een Service Fabric-toepassing implementeren in Azure
Notitie
Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.
Vereisten
- Als u nog geen Azure-abonnement hebt, maakt u een gratis account.
- Schakel Windows-functies in Hyper-V en Containers in.
- Installeer Docker Desktop voor Windows , zodat u containers kunt uitvoeren in Windows 10.
- Installeer Service Fabric-runtime versie 6.2 of hoger en de Service Fabric SDK versie 3.1 of hoger.
- Installeer Visual Studio en schakel Azure-ontwikkel- en ASP.NET- en webontwikkelingsworkloads in.
- Installeer Azure PowerShell
Fabrikam Fiber CallCenter downloaden en uitvoeren
Download de voorbeeldtoepassing Fabrikam Fiber CallCenter van GitHub.
Controleer of de toepassing Fabrikam Fiber CallCenter wordt opgebouwd en zonder fouten wordt uitgevoerd. Start Visual Studio als beheerder en open het BESTAND VS2015\FabrikamFiber.CallCenter.sln . Druk op F5 om de toepassing uit te voeren en fouten op te sporen.
Een Azure SQL DB maken
Wanneer de toepassing Fabrikam Fiber CallCenter in productie wordt uitgevoerd, moeten de gegevens persistent worden gemaakt in een database. Er is momenteel geen manier om behoud van gegevens in een container te waarborgen, daarom kunt u productiegegevens niet opslaan in SQL Server in een container.
Wij raden Azure SQL Database aan. Als u een beheerde SQL Server-database in Azure wilt instellen en uitvoeren, voert u het volgende script uit. Wijzig de scriptvariabelen indien nodig. client-IP is het IP-adres van uw ontwikkelcomputer. Noteer de naam van de server die door het script wordt weergegeven.
$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"
Tip
Als u zich achter een bedrijfsfirewall bevindt, is het IP-adres van uw ontwikkelcomputer mogelijk geen IP-adres dat beschikbaar is voor internet. Ter verificatie of de database het juiste IP-adres heeft voor de firewall-regel, gaat u naar de Azure-portal en zoekt u uw database in de sectie SQL Database. Klik op de naam van de database en klik in de sectie Overzicht op Serverfirewall instellen. Client-IP-adres is het IP-adres van uw ontwikkelcomputer. Controleer of dit adres overeenkomt met het IP-adres in de regel AllowClient.
De webconfiguratie bijwerken
Werk in het project FabrikamFiber.Web de verbindingsreeks in het bestand web.config bij om te verwijzen naar de SQL Server in de container. Wijzig het Server-gedeelte van de verbindingsreeks in de naam van de server die door het vorige script is gemaakt. Deze moet ongeveer als volgt zijn: fab-fiber-751718376.database.windows.net. In de volgende XML hoeft u alleen het kenmerk connectionString
bij te werken. De kenmerken providerName
en name
hoeven niet te worden gewijzigd.
<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" />
Notitie
U een SQL Server naar keuze gebruiken voor lokale foutopsporing, zolang deze bereikbaar is vanaf de host. localdb biedt echter geen ondersteuning voor container -> host
-communicatie. Als u een andere SQL-database wilt gebruiken tijdens het bouwen van een release-build van uw webtoepassing, voeg dan nog een verbindingsreeks toe aan uw web.release.config-bestand.
De toepassing in een container plaatsen
Klik met de rechtermuisknop op het project >FabrikamFiber.Web Add>Container Orchestrator Support. Selecteer Service Fabric als de containerorchestrator en klik op OK.
Klik op Ja als dat wordt gevraagd om Docker nu over te schakelen naar Windows-containers.
Het nieuwe Service Fabric-toepassingsproject FabrikamFiber.CallCenterApplication wordt in de oplossing gemaakt. Er wordt een Dockerfile toegevoegd aan het bestaande FabrikamFiber.Web-project. Ook wordt de map PackageRoot toegevoegd aan het project FabrikamFiber.Web, dat het servicemanifest en de instellingen voor de nieuwe FabrikamFiber.Web-service bevat.
De container is nu klaar om te worden gebouwd en verpakt in een Service Fabric-toepassing. Zodra u de installatiekopie van de container hebt gebouwd op uw computer, kunt u deze naar een containerregister pushen en naar elke host ophalen om te worden uitgevoerd.
De in een container geplaatste toepassing lokaal uitvoeren
Druk op F5 om de toepassing in een container uit te voeren en er fouten in op te sporen in het Service Fabric-ontwikkelingscluster. Klik op Ja als u een bericht ziet waarin wordt gevraagd om de groep 'ServiceFabricAllowedUsers' lees- en schrijfmachtigingen te verlenen voor de projectmap van Visual Studio.
Als de F5-uitvoering een uitzondering als volgt genereert, is het juiste IP-adres niet toegevoegd aan de Azure-databasefirewall.
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>
Voer de volgende opdracht uit om het juiste IP-adres toe te voegen aan de Azure-databasefirewall.
# 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
Een containerregister maken
Nu de toepassing lokaal wordt uitgevoerd, begint u met de voorbereidingen voor implementatie in Azure. Containerinstallatiekopieën moeten worden opgeslagen in een containerregister. Maak een Azure Container Registry met behulp van het volgende script. De registernaam van de container is zichtbaar voor andere Azure-abonnementen en moet daarom uniek zijn. Voordat u de toepassing in Azure implementeert, pusht u de containerinstallatiekopie naar dit register. Wanneer de toepassing in het cluster in Azure is geïmplementeerd, wordt de installatiekopie van de container opgehaald uit dit register.
# 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
Een Service Fabric-cluster maken in Azure
Service Fabric-toepassingen worden uitgevoerd op een cluster, een set virtuele of fysieke machines die verbonden zijn over een netwerk. Voordat u de toepassing in Azure kunt implementeren, moet u een Service Fabric-cluster maken in Azure.
U kunt:
- Een testcluster maken vanuit Visual Studio. Met deze optie kunt u een beveiligd cluster rechtstreeks vanuit Visual Studio met de configuraties van uw voorkeur maken.
- Een beveiligd cluster maken op basis van een sjabloon
In deze zelfstudie wordt een cluster gemaakt vanuit Visual Studio, wat ideaal is voor testscenario's. Als u op een andere manier een cluster hebt gemaakt of een bestaand cluster gebruikt, kunt u uw verbindingseindpunt kopiëren en plakken, of kunt u het kiezen vanuit uw abonnement.
Voordat u begint, opent u FabrikamFiber.Web -> PackageRoot -> ServiceManifest.xml in Solution Explorer. Noteer de poort voor de webfront-end die vermeld staat in Eindpunt.
Als u het cluster maakt, gaat u als volgt te werk:
Klik met de rechtermuisknop op het toepassingsproject FabrikamFiber.CallCenterApplication in Solution Explorer en kies Publiceren.
Meld u aan met behulp van uw Azure-account, zodat u toegang hebt tot uw abonnement(en).
Selecteer onder de vervolgkeuzelijst voor het verbindingseindpunt de optie Nieuw cluster maken....
Wijzig de volgende instellingen in het dialoogvenster Cluster maken:
a. Geef de naam van het cluster op in het veld Clusternaam, evenals het abonnement en de locatie die u wilt gebruiken. Noteer de naam van de clusterbrongroep.
b. Optioneel: u kunt het aantal knooppunten wijzigen. Standaard beschikt u over drie knooppunten, het minimale aantal dat is vereist om Service Fabric-scenario's te kunnen testen.
c. Selecteer het tabblad Certificaat . Typ op dit tabblad een wachtwoord dat u wilt gebruiken om het certificaat van uw cluster te beveiligen. Met dit certificaat is uw cluster beter beveiligd. U kunt ook het pad wijzigen waar u het certificaat wilt opslaan. Visual Studio kan het certificaat voor u importeren, aangezien dit een vereiste stap is om de toepassing naar het cluster te kunnen publiceren.
Notitie
Noteer het mappad waarin dit certificaat wordt geïmporteerd. De volgende stap na het maken van het cluster is het importeren van dit certificaat.
d. Selecteer het tabblad VM-detail . Geef het wachtwoord op dat u wilt gebruiken voor de virtuele machines (VM) waaruit het cluster bestaat. De gebruikersnaam en het wachtwoord kunnen worden gebruikt om een externe verbinding met de virtuele machines tot stand te brengen. U moet ook een VM-machinegrootte selecteren, en u kunt indien nodig de VM-installatiekopie wijzigen.
Belangrijk
Kies een SKU die ondersteuning biedt voor actieve containers. Het besturingssysteem Windows Server op de clusterknooppunten moet compatibel zijn met het Windows Server-besturingssysteem van de container. Zie Compatibiliteit tussen besturingssysteem van Windows Server-container en host-besturingssysteem voor meer informatie. In deze zelfstudie wordt standaard een Docker-installatiekopie op basis van Windows Server 2016 LTSC gebruikt. Containers op basis van deze installatiekopie kunnen worden uitgevoerd op clusters die zijn gemaakt met Windows Server 2016 Datacenter with Containers. Als u echter een cluster maakt of een bestaand cluster gebruikt op een andere versie van Windows Server, moet u de installatiekopie van het besturingssysteem wijzigen waarop de container is gebaseerd. Open de dockerfile in het project FabrikamFiber.Web Voeg een opmerking toe aan een eventuele
FROM
-instructie op basis van een vorige versie van Windows Server en voeg vanaf de DockerHub-pagina Windows Server Core eenFROM
-instructie toe op basis van de tag van de gewenste versie. Zie Windows Server Core release info (Informatie over de versie van Windows Server Core) voor meer informatie over versies, ondersteuningstijdlijnen en versiebeheer van Windows Server Core.e. Geef op het tabblad Geavanceerd de toepassingspoort aan die moet worden geopend in de load balancer wanneer het cluster wordt geïmplementeerd. Dit is de poort die u hebt genoteerd voordat u het cluster ging maken. U kunt ook een bestaande Application Insights-sleutel toevoegen die moet worden gebruikt om logboekbestanden naar door te sturen.
f. Wanneer u klaar bent met het wijzigen van de instellingen, selecteert u de knop Maken.
Het maken duurt enkele minuten; in het uitvoervenster wordt aangegeven wanneer het cluster helemaal klaar is.
Het geïmporteerde certificaat installeren
Installeer het certificaat dat is geïmporteerd als onderdeel van de stap voor het maken van het cluster, naar de locatie van het huidige gebruikersarchief en geef het wachtwoord voor de persoonlijke sleutel op dat u hebt opgegeven.
U kunt de installatie bevestigen door Gebruikerscertificaten beheren te openen vanuit het configuratiescherm en te bevestigen dat het certificaat is geïnstalleerd onder Certificaten - Huidige gebruiker -> Persoonlijk ->Certificaten. Het certificaat moet lijken op [clusternaam].[Clusterlocatie]. cloudapp.azure.com, bijvoorbeeld fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.
Toestaan dat uw toepassing die in Azure wordt uitgevoerd toegang heeft tot SQL Database
Eerder hebt u een SQL-firewallregel gemaakt om toegang te verlenen aan uw toepassing die lokaal wordt uitgevoerd. Nu moet u voor de toepassing die in Azure wordt uitgevoerd toegang inschakelen voor de SQL-database. Maak een service-eindpunt voor virtueel netwerk voor het Service Fabric-cluster en maak vervolgens een regel om dat eindpunt toegang tot de SQL-database toe te staan. Geef de variabele van de clusterbrongroep op die u hebt genoteerd toen u het cluster maakte.
# 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;
De app implementeren in Azure
Nu de toepassing klaar is, kunt u deze rechtstreeks vanuit Visual Studio implementeren naar het cluster in Azure. Klik in Solution Explorer met de rechtermuisknop op het toepassingsproject FabrikamFiber.CallCenterApplication in Solution Explorer en selecteer Publiceren. Selecteer in Verbindingseindpunt het eindpunt van het cluster dat u eerder hebt gemaakt. Selecteer in Azure Container Registry het containerregister dat u eerder hebt gemaakt. Klik op Publiceren om de toepassing naar het cluster in Azure te publiceren.
Volg de voortgang van de implementatie in het uitvoervenster. Wanneer de toepassing is geïmplementeerd, opent u een browser en typt u het clusteradres en de toepassingspoort. Bijvoorbeeld: http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/
.
Als de pagina niet kan worden geladen of niet om het certificaat wordt gevraagd, opent u het pad Explorer, bijvoorbeeld https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer
en selecteert u het zojuist geïnstalleerde certificaat.
Continue integratie en implementatie (CI/CD) met een Service Fabric-cluster instellen
Zie Tutorial: Deploy an application with CI/CD to a Service Fabric cluster (Zelfstudie: Een toepassing met CI/CD implementeren in een Service Fabric-cluster) voor meer informatie over het gebruik van Azure DevOps om de implementatie van de toepassing van CI/CD in een Service Fabric-cluster te configureren. De procedure die in de zelfstudie is beschreven is dezelfde voor dit project (FabrikamFiber), maar sla het downloaden van het voorbeeld van de stemtoepassing gewoon over en vervang Voting als de naam van de opslagplaats door FabrikamFiber.
Resources opschonen
Vergeet als u klaar bent niet om alle resources die u hebt gemaakt te verwijderen. De eenvoudigste manier hiervoor is om de resourcegroepen te verwijderen die het Service Fabric-cluster, Azure SQL DB en Azure Container Registry bevatten.
$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
Volgende stappen
In deze zelfstudie heeft u het volgende geleerd:
- Een bestaande toepassing in een container plaatsen met behulp van Visual Studio
- Een database maken in Azure SQL Database
- Een Azure-containerregister maken
- Een Service Fabric-toepassing implementeren in Azure
In het volgende deel van de zelfstudie leert u hoe u een containertoepassing met CI/CD in een Service Fabric-cluster kunt implementeren.