Samouczek: wdrażanie aplikacji .NET w kontenerze systemu Windows w usłudze Azure Service Fabric

W tym samouczku przedstawiono sposób konteneryzacji istniejącej aplikacji ASP.NET i tworzenia z niej pakietu będącego aplikacją usługi Service Fabric. Uruchom kontenery lokalnie w klastrze programistycznym usługi Service Fabric, a następnie wdróż aplikację na platformie Azure. Aplikacja będzie utrwalać dane w usłudze Azure SQL Database.

Ten samouczek zawiera informacje na temat wykonywania następujących czynności:

  • Konteneryzowanie istniejącej aplikacji za pomocą programu Visual Studio
  • Tworzenie bazy danych w bazie danych Azure SQL
  • Tworzenie rejestru kontenerów platformy Azure
  • Wdrażanie aplikacji usługi Service Fabric na platformie Azure

Uwaga

Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Wymagania wstępne

  1. Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.
  2. Włączanie funkcji Hyper-V i kontenerów systemu Windows.
  3. Zainstaluj program Docker Desktop dla systemu Windows, aby można było uruchamiać kontenery w Windows 10.
  4. Zainstaluj środowisko uruchomieniowe usługi Service Fabric w wersji 6.2 lub nowszej i zestaw SDK usługi Service Fabric w wersji 3.1 lub nowszej.
  5. Zainstaluj program Visual Studio i włącz programowanie na platformie Azureoraz obciążenia ASP.NET i tworzenie aplikacji internetowych .
  6. Instalowanie Azure PowerShell

Pobieranie i uruchamianie aplikacji Fabrikam Fiber CallCenter

  1. Pobierz przykładową aplikację Fabrikam Fiber CallCenter z witryny GitHub.

  2. Sprawdź, czy aplikację Fabrikam Fiber CallCenter można skompilować i uruchomić bez błędów. Uruchom program Visual Studio jako administrator i otwórz plik VS2015\FabrikamFiber.CallCenter.sln . Naciśnij klawisz F5, aby uruchomić i debugować aplikację.

    Zrzut ekranu przedstawiający stronę główną aplikacji Fabrikam Fiber CallCenter uruchomioną na hoście lokalnym. Na stronie zostanie wyświetlony pulpit nawigacyjny z listą połączeń pomocy technicznej.

Tworzenie bazy danych usługi Azure SQL DB

Gdy aplikacja Fabrikam Fiber CallCenter działa w środowisku produkcyjnym, dane muszą być utrwalane w bazie danych. Obecnie nie ma możliwości zagwarantowania trwałości danych w kontenerze, dlatego nie można zapisywać danych produkcyjnych w programie SQL Server w kontenerze.

Zalecamy usługę Azure SQL Database. Aby skonfigurować i uruchomić zarządzaną bazę danych SQL Server na platformie Azure, uruchom następujący skrypt. Zmodyfikuj zmienne skryptu odpowiednio do potrzeb. Element clientIP określa adres IP Twojego komputera programistycznego. Zanotuj zwróconą przez skrypt nazwę serwera.

$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"

Porada

Jeśli jesteś za firmową zaporą, adres IP komputera programistycznego może nie być adresem IP ujawnianym w Internecie. Aby sprawdzić, czy baza danych ma poprawny adres IP dla reguły zapory, przejdź do witryny Azure Portal i znajdź swoją bazę danych w sekcji Bazy danych SQL. Kliknij jej nazwę, a następnie w sekcji Przegląd kliknij pozycję „Ustaw zaporę serwera”. Parametr „Adres IP klienta” określa adres IP Twojej maszyny programistycznej. Upewnij się, że jest on zgodny z adresem IP w regule „AllowClient”.

Aktualizowanie konfiguracji internetowej

W projekcie FabrikamFiber.Web zaktualizuj parametry połączenia w pliku web.config, aby wskazywały na program SQL Server w kontenerze. Zaktualizuj część Server parametrów połączenia do poziomu nazwy serwera utworzonej przez poprzedni skrypt. Powinna to być informacja podobna do „fab-fiber-751718376.database.windows.net”. W poniższym kodzie XML należy zaktualizować tylko connectionString atrybut. Atrybuty providerName i name nie muszą być zmieniane.

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

Uwaga

Na potrzeby lokalnego debugowania można używać dowolnego programu SQL Server, ale musi on być dostępny z hosta. Baza danych localdb nie obsługuje jednak komunikacji typu container -> host. Jeśli podczas tworzenia kompilacji wydania aplikacji internetowej ma zostać użyta inna usługa SQL Database, dodaj kolejne parametry połączenia do pliku web.release.config.

Konteneryzowanie aplikacji

  1. Kliknij prawym przyciskiem myszy projekt >FabrikamFiber.WebDodaj>obsługę orkiestratora kontenerów. Wybierz pozycję Service Fabric jako orkiestratora kontenerów i kliknij pozycję OK.

  2. Jeśli zostanie wyświetlony monit, kliknij przycisk Tak, aby przełączyć platformę Docker na kontenery systemu Windows.

    Nowy projekt aplikacji usługi Service Fabric FabrikamFiber.CallCenterApplication zostanie utworzony w rozwiązaniu. Plik Dockerfile zostanie dodany do istniejącego projektu FabrikamFiber.Web. Katalog PackageRoot także zostanie dodany do projektu FabrikamFiber.Web. Zawiera on manifest usługi i ustawienia dla nowej usługi FabrikamFiber.Web.

    Kontener jest teraz gotowy do skompilowania i spakowania w aplikację usługi Service Fabric. Po skompilowaniu obrazu kontenera na komputerze możesz wypchnąć go do dowolnego rejestru kontenerów, a następnie ściągnąć na dowolny host w celu uruchomienia.

Uruchamianie aplikacji konteneryzowanych lokalnie

Naciśnij klawisz F5, aby uruchomić i debugować aplikację w kontenerze w lokalnym klastrze programistycznym usługi Service Fabric. Kliknij przycisk Tak, jeśli zostanie wyświetlone pole komunikatu z prośbą o nadanie grupie „ServiceFabricAllowedUsers” uprawnień do odczytu i wykonywania do katalogu projektu programu Visual Studio.

Jeśli uruchomienie F5 zgłasza wyjątek, taki jak poniżej, prawidłowy adres IP nie został dodany do zapory usługi Azure Database.

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>

Aby dodać odpowiedni adres IP do zapory usługi Azure Database, uruchom następujące polecenie.

# 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

Tworzenie rejestru kontenerów

Teraz, gdy aplikacja działa lokalnie, rozpocznij przygotowania do wdrożenia na platformie Azure. Obrazy kontenerów muszą być przechowywane w rejestrze kontenerów. Utwórz usługę Azure Container Registry za pomocą następującego skryptu. Nazwa rejestru kontenera jest widoczna w innych subskrypcjach platformy Azure, dlatego musi być unikatowa. Przed wdrożeniem aplikacji na platformie Azure wypchnij obraz kontenera do tego rejestru. Gdy aplikacja jest wdrażana na klastrze platformy Azure, obraz kontenera jest ściągany z tego rejestru.

# 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

Tworzenie klastra usługi Service Fabric na platformie Azure

Aplikacje usługi Service Fabric działają w klastrze — połączonym z siecią zestawie maszyn wirtualnych lub fizycznych. Przed wdrożeniem aplikacji na platformie Azure utwórz klaster usługi Service Fabric na platformie Azure.

Możesz:

W ramach tego samouczka klaster jest tworzony za pomocą programu Visual Studio, co jest bardzo przydatne w przypadku scenariuszy testowych. Jeśli utworzono klaster w inny sposób lub jest używany istniejący klaster, możesz skopiować i wkleić punkt końcowy połączenia lub wybrać go z subskrypcji.

Przed rozpoczęciem otwórz plik FabrikamFiber.Web —> PackageRoot —> ServiceManifest.xml w Eksplorator rozwiązań. Zwróć uwagę na numer portu frontonu internetowego podany w polu Punkt końcowy.

Podczas tworzenia klastra:

  1. Kliknij prawym przyciskiem myszy projekt aplikacji FabrikamFiber.CallCenterApplication w Eksploratorze rozwiązań i wybierz polecenie Publikuj.

  2. Zaloguj się przy użyciu konta platformy Azure, aby uzyskać dostęp do subskrypcji.

  3. Poniżej listy rozwijanej punktu końcowego połączenia wybierz opcję Utwórz nowy klaster...

  4. W oknie dialogowym Tworzenie klastra zmodyfikuj następujące ustawienia:

    a. Określ nazwę klastra w polu Nazwa klastra, a także subskrypcję i lokalizację, których chcesz użyć. Zanotuj nazwę grupy zasobów klastra.

    b. Opcjonalnie możesz zmodyfikować liczbę węzłów. Domyślne ustawienie to trzy węzły, czyli minimalna liczba wymagana do testowania scenariuszy usługi Service Fabric.

    c. Wybierz kartę Certyfikat . Na tej karcie wpisz hasło do użycia w celu zabezpieczenia certyfikatu klastra. Ten certyfikat pomaga zabezpieczyć klaster. Możesz również zmodyfikować ścieżkę, w której ma zostać zapisany certyfikat. Program Visual Studio może również automatycznie zaimportować certyfikat, ponieważ jest to krok wymagany do opublikowania aplikacji w klastrze.

    Uwaga

    Zanotuj ścieżkę folderu, w której jest importowany ten certyfikat. Następnym krokiem po utworzeniu klastra jest zaimportowanie tego certyfikatu.

    d. Wybierz kartę Szczegóły maszyny wirtualnej. Określ hasło, którego chcesz użyć dla Virtual Machines (maszyny wirtualnej), które tworzą klaster. Za pomocą nazwy użytkownika i hasła można zdalnie łączyć się z maszynami wirtualnymi. Należy również wybrać rozmiar maszyny wirtualnej oraz zmienić obraz maszyny wirtualnej, jeśli jest to konieczne.

    Ważne

    Wybierz jednostkę SKU, która obsługuje uruchomione kontenery. System operacyjny Windows Server na węzłach klastra musi być zgodny z systemem operacyjnym Windows Server kontenera. Aby dowiedzieć się więcej, zobacz temat Windows Server container OS and host OS compatibility (Zgodność między systemami operacyjnymi Windows Server kontenera i hosta). Domyślnie w tym samouczku zostanie utworzony obraz platformy Docker opartej na systemie Windows Server 2016 LTSC. Kontenery oparte na tym obrazie zostaną uruchomione na klastrach utworzonych za pomocą Windows Server 2016 Datacenter with Containers. Jeśli jednak utworzysz klaster lub użyjesz istniejącego klastra w oparciu o inną wersję systemu Windows Server, musisz zmienić obraz systemu operacyjnego oparty na kontenerze. Otwórz plik dockerfile w projekcie FabrikamFiber.Web , oznacz wszystkie istniejące FROM instrukcje w oparciu o poprzednią wersję systemu Windows Server i dodaj instrukcję FROM opartą na tagu żądanej wersji na stronie Windows Server Core DockerHub. Aby uzyskać dodatkowe informacje na temat wersji systemu Windows Server Core, osi czasu obsługi i przechowywania wersji, zapoznaj się z informacjami o wersji systemu Windows Server Core.

    e. Na karcie Zaawansowane wyświetl port aplikacji otwierany w module równoważenia obciążenia przy wdrażaniu klastra. Jest to port zanotowany przed rozpoczęciem tworzenia klastra. Można również dodać istniejący klucz usługi Application Insights, do którego mają być kierowane pliki dziennika aplikacji.

    f. Po zakończeniu modyfikowania ustawień wybierz przycisk Utwórz.

  5. Tworzenie klastra może zająć kilka minut. Informacja o ukończeniu tworzenia klastra pojawi się w oknie danych wyjściowych.

Instalowanie zaimportowanych certyfikatów

Zainstaluj certyfikat zaimportowany w ramach kroku tworzenia klastra do lokalizacji magazynu Bieżącego użytkownika i podaj podane hasło klucza prywatnego.

Instalację można potwierdzić, otwierając pozycję Zarządzaj certyfikatami użytkowników z panelu sterowania i potwierdzając, że certyfikat jest zainstalowany w obszarze Certyfikaty — bieżący użytkownik -Osobiste ->>Certyfikaty. Certyfikat powinien być taki jak [Nazwa klastra]. [Lokalizacja klastra].cloudapp.azure.com, np. fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

Zezwól aplikacji działającej na platformie Azure na dostęp do SQL Database

Wcześniej dla usługi SQL została utworzona reguła zapory, która udziela dostępu aplikacji uruchomionej lokalnie. W następnej kolejności należy włączyć dostęp do usługi SQL DB dla aplikacji uruchomionej na platformie Azure. Utwórz punkt końcowy usługi dla sieci wirtualnej dla klastra usługi Service Fabric, a następnie utwórz regułę, która umożliwia dostęp do usługi SQL DB temu punktowi końcowemu. Pamiętaj o określeniu zmiennej grupy zasobów klastra zanotowanej podczas tworzenia klastra.

# 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;

Wdrożenie aplikacji na platformie Azure

Kiedy aplikacja jest gotowa, można wdrożyć ją w klastrze platformy Azure bezpośrednio z programu Visual Studio. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt aplikacji FabrikamFiber.CallCenterApplication i wybierz polecenie Publikuj. W polu Punkt końcowy połączenia wybierz punkt końcowy klastra, który został utworzony wcześniej. W polu Azure Container Registry wybierz rejestr kontenerów utworzony wcześniej. Kliknij polecenie Publikuj, aby wdrożyć aplikację w klastrze platformy Azure.

Publikowanie aplikacji

Śledzenie postępu wdrażania w oknie danych wyjściowych. Gdy aplikacja jest wdrażana, otwórz przeglądarkę, a następnie wpisz adres klastra i port aplikacji. Na przykład http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/.

Zrzut ekranu przedstawiający stronę główną aplikacji Fabrikam Fiber CallCenter uruchomioną na azure.com. Na stronie zostanie wyświetlony pulpit nawigacyjny z listą połączeń pomocy technicznej.

Jeśli nie można załadować strony lub nie zostanie wyświetlony monit o certyfikat, spróbuj otworzyć ścieżkę Eksploratora, na przykład https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer i wybrać nowo zainstalowany certyfikat.

Konfigurowanie ciągłej integracji i ciągłego wdrażania (CI/CD) przy użyciu klastra usługi Service Fabric

Aby dowiedzieć się, jak skonfigurować wdrożenie aplikacji ciągłej integracji/ciągłego wdrażania w klastrze usługi Service Fabric za pomocą usługi Azure DevOps, zobacz Samouczek: wdrażanie aplikacji przy użyciu ciągłej integracji/ciągłego wdrażania w klastrze usługi Service Fabric. Proces opisany w tym samouczku jest taki sam dla tego projektu (FabrikamFiber) — wystarczy po prostu pominąć pobieranie przykładu Voting i zastąpić nazwę repozytorium Voting nazwą FabrikamFiber.

Czyszczenie zasobów

Po zakończeniu pracy usuń wszystkie utworzone zasoby. Najprostszym sposobem jest usunięcie grup zasobów, które zawierają klaster usługi Service Fabric, usługę Azure SQL DB i usługę 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

Następne kroki

W niniejszym samouczku zawarto informacje na temat wykonywania następujących czynności:

  • Konteneryzowanie istniejącej aplikacji za pomocą programu Visual Studio
  • Tworzenie bazy danych w bazie danych Azure SQL
  • Tworzenie rejestru kontenerów platformy Azure
  • Wdrażanie aplikacji usługi Service Fabric na platformie Azure

Z następnej części samouczka dowiesz się, jak wdrażać aplikację kontenera przy użyciu ciągłej integracji/ciągłego wdrażania w klastrze usługi Service Fabric.