Sdílet prostřednictvím


Kurz: Nasazení aplikace .NET v kontejneru Windows do Azure Service Fabric

V tomto kurzu se dozvíte, jak kontejnerizovat existující ASP.NET aplikaci a zabalit ji jako aplikaci Service Fabric. Spusťte kontejnery místně ve vývojovém clusteru Service Fabric a pak aplikaci nasaďte do Azure. Aplikace udržuje data ve službě Azure SQL Database.

V tomto kurzu se naučíte:

  • Kontejnerizace existující aplikace pomocí sady Visual Studio
  • Vytvoření databáze ve službě Azure SQL Database
  • Vytvoření registru kontejneru Azure
  • Nasazení aplikace Service Fabric do Azure

Poznámka:

K interakci s Azure doporučujeme použít modul Azure Az PowerShell. 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

  1. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet.
  2. Povolte funkce Windows Hyper-V a kontejnery.
  3. Nainstalujte Docker Desktop pro Windows , abyste mohli spouštět kontejnery ve Windows 10.
  4. Nainstalujte modul runtime Service Fabric verze 6.2 nebo novější a sadu Service Fabric SDK verze 3.1 nebo novější.
  5. Nainstalujte Visual Studio a povolte vývoj pro Azure a úlohy vývoje pro ASP.NET a webového vývoje.
  6. Instalovat Azure PowerShell

Stažení a spuštění Fabrikam Fiber CallCenter

  1. Stáhněte si ukázkovou aplikaci Fabrikam Fiber CallCenter z GitHubu.

  2. Ověřte, že se aplikace Fabrikam Fiber CallCenter sestaví a spustí bez chyby. Spusťte Visual Studio jako správce a otevřete soubor VS2015\FabrikamFiber.CallCenter.sln . Stisknutím klávesy F5 spusťte a laďte aplikaci.

    Snímek obrazovky domovské stránky aplikace Fabrikam Fiber CallCenter spuštěné na místním hostiteli Na stránce se zobrazí řídicí panel se seznamem hovorů podpory.

Vytvoření databáze Azure SQL

Při spuštění aplikace Fabrikam Fiber CallCenter v produkčním prostředí je potřeba data uchovávat v databázi. V současné době neexistuje žádný způsob, jak zaručit trvalá data v kontejneru, proto není možné ukládat produkční data do SQL Serveru v kontejneru.

Doporučujeme Azure SQL Database. Pokud chcete nastavit a spustit spravovanou databázi 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"

Návod

Pokud se nacházíte za podnikovou bránou firewall, IP adresa vašeho vývojového počítače nemusí být ta, která je vystavena internetu. Pokud chcete ověřit správnost IP adresy pravidla brány firewall uvedené v databázi, přejděte na Azure portal a najděte svou databázi v sekci SQL databáze. Klikněte na jeho název, poté v sekci Přehled klikněte na "Nastavit bránu firewall serveru". IP adresa klienta je IP adresa vašeho vývojového počítače. Ujistěte se, že odpovídá IP adrese v pravidle AllowClient.

Aktualizace konfigurace webu

Zpátky v projektu FabrikamFiber.Web aktualizujte připojovací řetězec v souboru web.config tak, aby odkazoval na SQL Server v kontejneru. Aktualizujte část připojovacího řetězce serveru tak, aby byla názvem serveru vytvořeného předchozím skriptem. 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:

Můžete použít libovolný SQL Server, který preferujete pro místní ladění, pokud je dostupný z vašeho počítače. Localdb však nepodporuje container -> host komunikaci. Pokud chcete při sestavování verze typu release své webové aplikace použít jinou SQL databázi, přidejte do souboruweb.release.config další připojovací řetězec.

Kontejnerizace aplikace

  1. Klikněte pravým tlačítkem myši na projekt >FabrikamFiber.WebPřidat>podporu nástroje Container Orchestrator. Jako orchestrátor kontejneru vyberte Service Fabric a klikněte na OK.

  2. 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 Dockerfile. Do projektu FabrikamFiber.Web je přidán také adresář PackageRoot, který obsahuje manifest služby a nastavení pro novou službu FabrikamFiber.Web.

    Kontejner je teď připravený k sestavení a zabalení v aplikaci Service Fabric. Jakmile máte image kontejneru postavená na vašem počítači, můžete ji odeslat do libovolného registru kontejneru a stáhnout ji na libovolného hostitele, aby se spustil.

Místní spuštění kontejnerizované aplikace

Stisknutím klávesy F5 spusťte a ladtě aplikaci v kontejneru v místním vývojovém clusteru pro Service Fabric. Klepněte na tlačítko Ano , pokud se zobrazí okno se zprávou s výzvou, aby skupina ServiceFabricAllowedUsers přečetla a spustila oprávnění k adresáři projektu sady Visual Studio.

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

Když teď aplikace běží místně, začněte se připravovat na nasazení do Azure. Image kontejnerů musí být uložené v registru kontejneru. Pomocí následujícího skriptu vytvořte registr kontejneru Azure . Název registru kontejneru je viditelný jinými předplatnými Azure, takže musí být jedinečný. Před nasazením aplikace do Azure odešlete image kontejneru do tohoto registru. Když se aplikace nasadí do clusteru v Azure, image kontejneru se načítá z tohoto registru.

# 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 Fabric v Azure

Aplikace Service Fabric běží v clusteru, v sadě virtuálních nebo fyzických počítačů připojených k síti. Před nasazením aplikace do Azure vytvořte cluster Service Fabric v Azure.

Můžete:

Tento kurz vytvoří cluster ze sady Visual Studio, který je ideální pro testovací scénáře. Pokud cluster vytvoříte jiným způsobem nebo použijete existující cluster, můžete zkopírovat a vložit koncový bod připojení nebo ho vybrat z vašeho předplatného.

Než začnete, otevřete FabrikamFiber.Web –> PackageRoot –> ServiceManifest.xml v Průzkumníku řešení. Poznamenejte si port webového front-endu uvedeného v koncovém bodu.

Při vytváření clusteru:

  1. V Průzkumníku řešení klikněte pravým tlačítkem na projekt aplikace FabrikamFiber.CallCenterApplication a zvolte Publikovat.

  2. Přihlaste se pomocí svého účtu Azure, abyste měli přístup ke svým předplatným.

  3. Pod rozevíracím seznamem pro koncový bod připojení vyberte možnost Vytvořit nový cluster...

  4. V dialogovém okně Vytvořit cluster upravte následující nastavení:

    a. Do pole Název clusteru zadejte název clusteru a 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, minimální požadovaná pro testování scénářů 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 k umístění, kam chcete certifikát uložit. Visual Studio může také importovat certifikát za vás, protože se jedná o požadovaný krok k 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. Uživatelské jméno a heslo je možné použít k vzdálenému připojení k virtuálním počítačům. Musíte také vybrat velikost virtuálního počítače a v případě potřeby změnit jeho image.

    Důležité

    Zvolte skladovou položku, která podporuje spuštěné kontejnery. Operační systém Windows Server na uzlech clusteru musí být kompatibilní s operačním systémem Windows Serveru vašeho kontejneru. Další informace najdete v tématu OS kontejneru Windows Serveru a kompatibilitě hostitelského operačního systému. Ve výchozím nastavení tento kurz vytvoří image Dockeru založenou na Windows Serveru 2016 LTSC. Kontejnery založené na této imagi se budou spouštět na clusterech vytvořených s Windows Serverem 2016 Datacenter s kontejnery. 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řidejte FROM 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 vypište port aplikace, který se má otevřít v nástroji pro vyrovnávání zatížení při nasazení clusteru. 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 k routování souborů protokolu aplikace.

    f. Po dokončení úprav nastavení vyberte tlačítko Vytvořit .

  5. Vytvoření trvá několik minut; Okno výstupu bude indikovat, kdy je cluster plně vytvořen.

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

Dříve jste vytvořili pravidlo brány firewall SQL pro udělení přístupu k místně spuštěné aplikaci. Dále je potřeba povolit aplikaci spuštěnou v Azure pro přístup k DATABÁZI SQL. Vytvořte koncový bod služby virtuální sítě pro cluster Service Fabric a pak vytvořte pravidlo, které ho umožní 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

Teď, když je aplikace připravená, 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 vyberte Publikovat. V části Koncový bod připojení vyberte koncový bod clusteru, který jste vytvořili dříve. Ve službě Azure Container Registry vyberte registr kontejneru, který jste vytvořili dříve. Kliknutím na Publikovat nasadíte aplikaci do clusteru v Azure.

Publikování aplikace

Sledujte průběh 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/.

Snímek obrazovky domovské stránky aplikace Fabrikam Fiber CallCenter spuštěné na azure.com Na stránce se zobrazí řídicí panel se seznamem hovorů podpory.

Pokud se stránka nepodaří načíst, nebo se nepodaří zobrazit výzvu k certifikátu, zkuste otevřít cestu Průzkumníka, například https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer, a vybrat nově nainstalovaný certifikát.

Nastavení kontinuální integrace a nasazování (CI/CD) s využitím clusteru Service Fabric

Pokud chcete zjistit, jak pomocí Azure DevOps nakonfigurovat nasazení aplikace CI/CD do clusteru Service Fabric, přečtěte si kurz: Nasazení aplikace s CI/CD do clusteru Service Fabric. Proces popsaný v tomto kurzu je stejný pro tento projekt (FabrikamFiber), stačí přeskočit stažení ukázky Voting a místo voting nahradit název úložiště FabrikamFiber.

Čištění zdrojů

Pokud jste hotovi, nezapomeňte odebrat všechny prostředky, které jste vytvořili. Nejjednodušším způsobem je odebrat skupiny prostředků, které obsahují cluster Service Fabric, Azure SQL DB 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:

  • Kontejnerizace existující aplikace pomocí sady Visual Studio
  • Vytvoření databáze ve službě Azure SQL Database
  • Vytvoření registru kontejneru Azure
  • Nasazení aplikace Service Fabric do Azure

V další části kurzu se dozvíte, jak nasadit aplikaci kontejneru s CI/CD do clusteru Service Fabric.