Kurz: Nasazení aplikace .NET v kontejneru Windows do Azure Service Fabric
V tomto kurzu se dozvíte, jak kontejnerizovat existující aplikaci ASP.NET a pak ji zabalit jako aplikaci Service Fabricu. Ve vývojovém clusteru Service Fabricu spustíte kontejnery nejdřív místně a pak aplikaci nasadíte do Azure. Aplikace uchovává data ve službě Azure SQL Database.
V tomto kurzu se naučíte:
- Kontejnerizovat existující aplikaci pomocí sady Visual Studio
- Vytvoření databáze ve službě Azure SQL Database
- Vytvoření registru kontejneru Azure
- Nasadit aplikaci Service Fabricu v Azure
Poznámka:
Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Pokud chcete začít, přečtěte si téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.
Požadavky
- Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet.
- Povolte funkce Windows Hyper-V a kontejnery.
- Nainstalujte Docker Desktop pro Windows , abyste mohli spouštět kontejnery ve Windows 10.
- Nainstalujte modul runtime Service Fabric 6.2 nebo novější a sadu Service Fabric SDK 3.1 nebo novější.
- Nainstalujte Visual Studio a povolte vývoj a ASP.NET Azure a úlohy vývoje webů.
- Nainstalujte Azure PowerShell.
Stažení a spuštění aplikace Fabrikam Fiber CallCenter
Stáhněte si ukázkovou aplikaci Fabrikam Fiber CallCenter z GitHubu.
Ověřte, že se aplikace Fabrikam Fiber CallCenter sestavila a spustila bez chyb. Spusťte Visual Studio jako správce a otevřete soubor VS2015\FabrikamFiber.CallCenter.sln. Stisknutím klávesy F5 spusťte a ladit aplikaci.
Vytvoření databáze SQL Azure
Při spuštění aplikace Fabrikam Fiber CallCenter v produkčním prostředí musí být data ukládána v databázi. V současné době neexistuje způsob, jak zaručit trvalost dat v kontejneru, proto na SQL Server v kontejneru nemůžete ukládat produkční data.
Doporučujeme Azure SQL Database. K nastavení a spuštění spravované databáze SQL Serveru v Azure spusťte následující skript. Podle potřeby upravte proměnné skriptu. clientIP je IP adresa vašeho vývojového počítače. Poznamenejte si název serveru, který skript vypíše.
$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
Pokud jste za podnikovou bránou firewall, IP adresa vašeho vývojového počítače nemusí být přístupná na internetu. Pokud chcete ověřit, že má databáze správnou IP adresu pro pravidlo brány firewall, přejděte na web Azure Portal a v části Databáze SQL vyhledejte svou databázi. Klikněte na její název a pak v části Přehled klikněte na Nastavit bránu firewall serveru. IP adresa klienta je IP adresa vašeho počítače pro vývoj. Ujistěte se, že se shoduje s IP adresou v pravidle AllowClient.
Aktualizace webové konfigurace
Vraťte se do projektu FabrikamFiber.Web a aktualizujte připojovací řetězec v souboru web.config tak, aby odkazoval na SQL Server v kontejneru. Aktualizujte část serveru připojovací řetězec tak, aby byla názvem serveru, který vytvořil předchozí skript. Mělo by to být něco jako "fab-fiber-751718376.database.windows.net". V následujícím kódu XML je nutné aktualizovat pouze connectionString
atribut. providerName
Atributy a name
atributy není nutné měnit.
<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" />
Poznámka:
Pro účely místního ladění můžete použít jakýkoli SQL Server, kterému dáváte přednost, pokud je dostupný z vašeho hostitele. Nicméně localdb nepodporuje komunikaci container -> host
. Pokud při sestavování vaší webové aplikace pro vydání chcete použít jinou databázi SQL, přidejte do souboru web.release.config další připojovací řetězec.
Kontejnerizace aplikace
Klikněte pravým tlačítkem myši na projekt> FabrikamFiber.Web Přidat>podporu nástroje Container Orchestrator. Vyberte Service Fabric jako orchestrátor kontejnerů a klikněte na OK.
Pokud se zobrazí výzva, kliknutím na Ano přepněte Docker na kontejnery Windows.
V řešení se vytvoří nový projekt aplikace Service Fabric FabrikamFiber.CallCenterApplication. Do existujícího projektu FabrikamFiber.Web se přidá soubor Docker. Do projektu FabrikamFiber.Web se také přidá adresář PackageRoot, který obsahuje manifest služby a nastavení pro novou službu FabrikamFiber.Web.
Kontejner je teď připravený k sestavení a zabalení do aplikace Service Fabric. Jakmile na svém počítači budete mít sestavenou image kontejneru, můžete ji nasdílet do jakéhokoli registru kontejnerů a stáhnout a spustit na jakémkoli hostiteli.
Místní spuštění kontejnerizované aplikace
Když stisknete klávesu F5, proběhne ladění a spuštění aplikace v kontejneru v místním vývojovém clusteru Service Fabricu. Pokud se vám zobrazí okno se zprávou žádající o udělení oprávnění ke čtení a spouštění vašeho adresáře projektu sady Visual Studio pro skupinu ServiceFabricAllowedUsers, klikněte na Ano.
Pokud spuštění F5 vyvolá výjimku, jako je následující, nebyla do brány firewall databáze Azure přidána správná IP adresa.
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>
Pokud chcete přidat odpovídající IP adresu do brány firewall databáze Azure, spusťte následující příkaz.
# 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
Vytvoření registru kontejneru
Teď, když aplikace běží místně, začněte s přípravou nasazení do Azure. Image kontejneru musí být uložené v registru kontejneru. Pomocí následujícího skriptu vytvořte registr kontejneru Azure. Název registru kontejneru mohou zobrazovat jiná předplatná Azure, a proto musí být jedinečný. Než aplikaci nasadíte do Azure, odešlete do tohoto registru image kontejneru. Jakmile je aplikace nasazená v clusteru v Azure, image kontejneru se z tohoto registru odebere.
# 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
Vytvoření clusteru Service Fabricu v Azure
Aplikace Service Fabric se spouští v clusteru, což je síťově propojená sada virtuálních nebo fyzických počítačů. Před nasazením aplikace do Azure vytvořte cluster Service Fabric v Azure.
Můžete provádět následující akce:
- Vytvořit testovací cluster v sadě Visual Studio. Tato možnost umožňuje vytvořit zabezpečený cluster přímo ze sady Visual Studio s použitím upřednostňované konfigurace.
- Vytvořit zabezpečený cluster ze šablony
V tomto kurzu vytvoříte cluster v sadě Visual Studio, což je nejvhodnější scénář pro účely testování. Pokud vytvoříte cluster jiným způsobem nebo použijete existující cluster, můžete zkopírovat a vložit svůj koncový bod připojení nebo ho zvolit ze svého předplatného.
Než začnete, otevřete soubor FabrikamFiber.Web –> PackageRoot –> ServiceManifest.xml v Průzkumník řešení. Poznamenejte si port webového front-endu uvedeného v koncovém bodu.
Při vytváření clusteru:
V Průzkumníku řešení klikněte pravým tlačítkem na projekt aplikace FabrikamFiber.CallCenterApplication a zvolte Publikovat.
Přihlaste se pomocí svého účtu Azure, abyste získali přístup ke svým předplatným.
Pod rozevíracím seznamem pro koncový bod připojení vyberte možnost Vytvořit nový cluster...
V dialogovém okně Vytvořit cluster upravte následující nastavení:
a. Do pole Název clusteru zadejte název svého clusteru a zadejte také předplatné a umístění, které chcete použít. Poznamenejte si název skupiny prostředků clusteru.
b. Volitelné: Můžete upravit počet uzlů. Ve výchozím nastavení máte tři uzly, což je požadované minimum pro testovací scénáře pro Service Fabric.
c. Vyberte kartu Certifikát. Na této kartě zadejte heslo, které chcete použít k zabezpečení certifikátu clusteru. Tento certifikát pomáhá zabezpečit váš cluster. Můžete také upravit cestu, kam chcete certifikát uložit. Sada Visual Studio může také importovat certifikát za vás, protože se jedná o požadovaný krok pro publikování aplikace do clusteru.
Poznámka:
Poznamenejte si cestu ke složce, kam se tento certifikát importuje. Dalším krokem po vytvoření clusteru je import tohoto certifikátu.
d. Vyberte kartu Podrobnosti virtuálního počítače. Zadejte heslo, které chcete použít pro virtuální počítače, které tvoří cluster. Pomocí uživatelského jména a hesla je možné se vzdáleně připojit k virtuálním počítačům. Musíte také vybrat velikost virtuálních počítačů a v případě potřeby změnit image virtuálního počítače.
Důležité
Zvolte skladovou položku, která podporuje spuštěné kontejnery. Operační systém Windows Server v uzlech clusteru musí být kompatibilní s operačním systémem Windows Server vašeho kontejneru. Další informace najdete v článku o kompatibilitě operačního systému kontejneru a operačního systému hostitele s Windows Serverem. Tento kurz ve výchozím nastavení vytvoří image Dockeru založenou na Windows Serveru 2016 LTSC. Kontejnery založené na této imagi budou fungovat v clusterech vytvořených pomocí edice Windows Server 2016 Datacenter s produktem Containers. Pokud ale vytvoříte cluster nebo použijete existující cluster založený na jiné verzi Windows Serveru, musíte změnit image operačního systému, na které je kontejner založený. Otevřete soubor dockerfile v projektu FabrikamFiber.Web, zakomentujte všechny existující
FROM
příkazy na základě předchozí verze Windows Serveru a přidejteFROM
příkaz založený na značce požadované verze ze stránky Windows Server Core DockerHub. Další informace o verzích Windows Server Core, časových osách podpory a správě verzí najdete v informacích o vydání jádra Windows Serveru.e. Na kartě Upřesnit uveďte port aplikace, který se po nasazení clusteru otevře v nástroji pro vyrovnávání zatížení. Jedná se o port, který jste si poznamenali před zahájením vytváření clusteru. Můžete také přidat existující klíč Application Insights, který se použije ke směrování souborů aplikačních protokolů.
f. Až dokončíte úpravy nastavení, vyberte tlačítko Vytvořit.
Vytvoření trvá několik minut. Po úplném vytvoření clusteru se zobrazí oznámení v okně výstupu.
Instalace importovaného certifikátu
Nainstalujte certifikát importovaný jako součást kroku vytvoření clusteru do umístění aktuálního úložiště uživatelů a zadejte heslo privátního klíče, které jste zadali.
Instalaci můžete potvrdit tak, že otevřete spravovat uživatelské certifikáty z ovládacího panelu a potvrdíte, že je certifikát nainstalován v části Certifikáty – Aktuální uživatel ->Osobní ->Certifikáty. Certifikát by měl být jako [Název clusteru].[Umístění clusteru]. cloudapp.azure.com, např. fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.
Povolit aplikaci spuštěnou v Azure přístup ke službě SQL Database
V předchozích krocích jste vytvořili pravidlo brány firewall pro SQL, a zajistili jste tak přístup pro vaši místní aplikaci. Teď je potřeba povolit přístup k databázi SQL i pro aplikaci spuštěnou v Azure. Vytvořte koncový bod služby pro virtuální síť pro cluster Service Fabricu a pak vytvořte pravidlo, které pro tento koncový bod povolí přístup k databázi SQL. Nezapomeňte zadat proměnnou skupiny prostředků clusteru, kterou jste si poznamenali při vytváření clusteru.
# 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;
Nasazení aplikace do Azure
Aplikace je teď připravená a můžete ji nasadit do clusteru v Azure přímo ze sady Visual Studio. V Průzkumníku řešení klikněte pravým tlačítkem na projekt aplikace FabrikamFiber.CallCenterApplication a zvolte Publikovat. V rozevíracím seznamu Koncový bod připojení vyberte koncový bod clusteru, který jste vytvořili v předchozím postupu. V rozevíracím seznamu Azure Container Registry vyberte registr kontejneru, který jste vytvořili v předchozím postupu. Kliknutím na Publikovat nasaďte aplikaci do clusteru v Azure.
Postupujte podle pokynů k nasazení v okně výstupu. Po nasazení aplikace otevřete prohlížeč a zadejte adresu clusteru a port aplikace. Například http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/
.
Pokud se stránce nepodaří načíst nebo se nepodaří zobrazit výzvu k certifikátu, zkuste například https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer
otevřít cestu Průzkumníka a vybrat nově nainstalovaný certifikát.
Nastavení průběžné integrace a nasazování (CI/CD) s využitím clusteru Service Fabric
Informace o použití Azure DevOps ke konfiguraci nasazení aplikace s CI/CD do clusteru Service Fabric najdete v článku Kurz: Nasazení aplikace s CI/CD do clusteru Service Fabric. Postup popsaný v tomto kurzu je stejný i pro tento projekt (FabrikamFiber), stačí přeskočit stažení ukázky Voting a místo názvu úložiště Voting použít FabrikamFiber.
Vyčištění prostředků
Po skončení nezapomeňte odebrat všechny prostředky, které jste vytvořili. Nejjednodušší způsob, jak to udělat, je odebrat skupiny prostředků, které obsahují cluster Service Fabricu, databázi SQL Azure a 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
Další kroky
V tomto kurzu jste se naučili, jak:
- Kontejnerizovat existující aplikaci pomocí sady Visual Studio
- Vytvoření databáze ve službě Azure SQL Database
- Vytvoření registru kontejneru Azure
- Nasadit aplikaci Service Fabricu v Azure
V další části tohoto kurzu se dozvíte, jak nasadit aplikaci typu kontejner s CI/CD do clusteru Service Fabric.