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.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Konteneryzowanie istniejącej aplikacji za pomocą programu Visual Studio
- Tworzenie bazy danych w usłudze Azure SQL Database
- Tworzenie rejestru kontenerów platformy Azure
- Wdrażanie aplikacji usługi Service Fabric na platformie Azure
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. 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
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.
- Włączanie funkcji Hyper-V i kontenerów systemu Windows.
- Zainstaluj program Docker Desktop dla systemu Windows , aby można było uruchamiać kontenery w systemie Windows 10.
- 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.
- Zainstaluj program Visual Studio i włącz tworzenie aplikacji na platformie Azure oraz ASP.NET i obciążeń tworzenia aplikacji internetowych.
- Zainstaluj program Azure PowerShell.
Pobieranie i uruchamianie aplikacji Fabrikam Fiber CallCenter
Pobierz przykładową aplikację Fabrikam Fiber CallCenter z usługi GitHub.
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 F5, aby uruchomić i debugować aplikację.
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"
Napiwek
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 ; providerName
atrybuty 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
Kliknij prawym przyciskiem myszy projekt> FabrikamFiber.Web Dodaj>obsługę orkiestratora kontenerów. Wybierz pozycję Service Fabric jako orkiestratora kontenerów i kliknij pozycję OK.
Jeśli zostanie wyświetlony monit, kliknij przycisk Tak , aby przełączyć platformę Docker do kontenerów 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 bazy danych platformy Azure.
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 bazy danych platformy Azure, 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.
Masz następujące możliwości:
- Utworzyć klaster testowy z poziomu programu Visual Studio. Ta opcja służy do tworzenia bezpiecznego klastra bezpośrednio z poziomu programu Visual Studio z preferowaną konfiguracją.
- Utworzyć zabezpieczony klaster na podstawie szablonu
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:
Kliknij prawym przyciskiem myszy projekt aplikacji FabrikamFiber.CallCenterApplication w Eksploratorze rozwiązań i wybierz polecenie Publikuj.
Zaloguj się przy użyciu konta platformy Azure, aby uzyskać dostęp do subskrypcji.
Poniżej listy rozwijanej punktu końcowego połączenia wybierz opcję Utwórz nowy klaster... .
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, które ma być używane do 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 maszyn wirtualnych tworzących 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, na którym jest oparty kontener. Otwórz plik dockerfile w projekcie FabrikamFiber.Web , oznacz jako komentarz dowolną istniejącą
FROM
instrukcję opartą na poprzedniej wersji systemu Windows Server i dodaj instrukcję opartąFROM
na tagu żądanej wersji ze strony Windows Server Core DockerHub. Aby uzyskać dodatkowe informacje na temat wersji systemu Windows Server Core, osi czasu pomocy technicznej 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.
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żący użytkownik i podaj podane hasło klucza prywatnego.
Instalację można potwierdzić, otwierając pozycję Zarządzaj certyfikatami użytkownika 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.
Zezwalanie aplikacji uruchomionej na platformie Azure na dostęp do usługi 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.
Ś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/
.
Jeśli ładowanie strony nie powiedzie się lub wyświetlenie monitu o certyfikat nie powiedzie się, 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 tym samouczku zawarto informacje na temat wykonywania następujących czynności:
- Konteneryzowanie istniejącej aplikacji za pomocą programu Visual Studio
- Tworzenie bazy danych w usłudze Azure SQL Database
- 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.