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

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

K interakci s Azure doporučujeme použít modul Azure Az PowerShell. Začněte tím, že si projdete 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 nemáte předplatné Azure, vytvořte si bezplatný účet.
  2. Povolte funkce Systému Windows Hyper-V a kontejnery.
  3. Nainstalujte Docker Desktop pro Windows, abyste mohli spouštět kontejnery na Windows 10.
  4. Nainstalujte modul runtime Service Fabric 6.2 nebo novější a sadu Service Fabric SDK 3.1 nebo novější.
  5. Nainstalujte sadu Visual Studio a povolte úlohy vývoje a ASP.NET a vývoje pro web vAzure.
  6. Instalace Azure PowerShell

Stažení a spuštění aplikace 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 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 vylaďte aplikaci.

    Snímek obrazovky s domovskou stránkou aplikace Fabrikam Fiber CallCenter spuštěnou na místním hostiteli Na stránce se zobrazí řídicí panel se seznamem volání podpory.

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. Část Server připojovacího řetězce aktualizujte tak, aby byl název serveru vytvořený 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 potřeba aktualizovat pouze connectionString atribut ; providerName atributy a name 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

  1. Klikněte pravým tlačítkem na projekt >FabrikamFiber.Web– Přidat>podporu orchestratoru kontejnerů. Vyberte Service Fabric jako orchestrátor kontejnerů 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 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 například následující, nebyla do brány firewall služby Azure Database 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 příslušnou IP adresu do brány firewall služby Azure Database, 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:

  • 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 v Průzkumník řešení soubor FabrikamFiber.Web –> PackageRoot –> ServiceManifest.xml. Poznamenejte si port pro webový front-end uvedený v části Koncový bod.

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 získali přístup ke svým předplatným.

  3. Pod rozevíracím seznamem 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 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é se má použít k zabezpečení certifikátu vašeho 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, do které 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 Virtual Machines,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 založené na předchozí verzi Windows Serveru a přidejte FROM příkaz založený na značce požadované verze ze stránky DockerHubu Jádra Windows Serveru. Další informace o verzích Windows Server Core, časových osách podpory a správě verzí najdete v článku Informace 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í. Toto je 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.

  5. 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ý v rámci kroku vytvoření clusteru do umístění úložiště Aktuální uživatel a zadejte heslo privátního klíče, které jste zadali.

Instalaci můžete potvrdit tak, že v ovládacích panelech otevřete Spravovat uživatelské certifikáty a potvrdíte, že je certifikát nainstalovaný v části Certifikáty – Aktuální uživatel –>Osobní –>Certifikáty. Certifikát by měl vypadat takto : [Název clusteru]. [Umístění clusteru].cloudapp.azure.com, například fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

Povolit aplikaci spuštěnou v Azure přístup k 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.

Publikování aplikace

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/.

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 volání podpory.

Pokud se stránku nepodaří načíst nebo se nepodaří zobrazit výzvu k zadání certifikátu, zkuste otevřít například https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer 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:

  • Kontejnerizovat existující aplikaci pomocí sady Visual Studio
  • Vytvoření databáze v 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.