Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym samouczku pokazano, jak konteneryzować istniejącą aplikację ASP.NET i spakować ją jako aplikację usługi Service Fabric. Uruchom kontenery lokalnie w klastrze deweloperów usługi Service Fabric, a następnie wdróż aplikację na platformie Azure. Aplikacja utrwala dane w usłudze Azure SQL Database.
Z tego samouczka dowiesz się, jak wykonywać następujące działania:
- Konteneryzowanie istniejącej aplikacji przy użyciu 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
Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. 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 oraz 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 tworzenie aplikacji internetowych .
- Instalowanie programu Azure PowerShell
Pobieranie i uruchamianie aplikacji Fabrikam Fiber CallCenter
Pobierz przykładową aplikację Fabrikam Fiber CallCenter z usługi GitHub.
Sprawdź, czy aplikacja Fabrikam Fiber CallCenter kompiluje i działa bez błędu. 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 Azure SQL DB
Podczas uruchamiania aplikacji Fabrikam Fiber CallCenter w środowisku produkcyjnym dane muszą być utrwalane w bazie danych. Obecnie nie ma możliwości zagwarantowania trwałych danych w kontenerze, dlatego nie można przechowywać danych produkcyjnych w programie SQL Server w kontenerze.
Zalecamy usługę Azure SQL Database. Aby skonfigurować i uruchomić zarządzaną bazę danych programu SQL Server na platformie Azure, uruchom następujący skrypt. Zmodyfikuj zmienne skryptu zgodnie z potrzebami. clientIP to adres IP komputera deweloperskiego. Zanotuj nazwę serwera wyjściowego skryptu.
$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
Jeśli używasz zapory sieciowej firmy, adres IP twojego komputera deweloperskiego może nie być widoczny w Internecie. Aby sprawdzić, czy baza danych ma prawidłowy adres IP reguły zapory, przejdź do witryny Azure Portal i znajdź bazę danych w sekcji Bazy danych SQL. Kliknij jego nazwę, a następnie w sekcji Przegląd kliknij pozycję "Ustaw zaporę serwera". "Adres IP klienta" to adres IP maszyny dewelopera. Upewnij się, że jest on zgodny z adresem IP w regule "AllowClient".
Aktualizowanie konfiguracji sieci Web
Wróć do projektu FabrikamFiber.Web , zaktualizuj parametry połączenia w pliku web.config , aby wskazać program SQL Server w kontenerze. Zaktualizuj część parametrów połączenia server jako nazwę serwera utworzoną przez poprzedni skrypt. Powinno to być coś takiego jak "fab-fiber-751718376.database.windows.net". W poniższym kodzie XML należy zaktualizować tylko atrybut connectionString; 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
Możesz użyć dowolnego programu SQL Server, który jest preferowany do debugowania lokalnego, o ile jest dostępny z hosta. Jednak baza danych localdb nie obsługuje container -> host komunikacji. Jeśli chcesz użyć innej bazy danych SQL podczas tworzenia kompilacji wydania aplikacji internetowej, dodaj kolejne parametry połączenia do pliku web.release.config .
Konteneryzowanie aplikacji
Kliknij prawym przyciskiem myszy projekt >Dodaj>obsługę orkiestratora kontenerów. Wybierz Service Fabric jako orchestrator kontenerów i kliknij OK.
Jeśli zostanie wyświetlony monit, kliknij przycisk Tak , aby przełączyć platformę Docker do kontenerów systemu Windows.
W rozwiązaniu utworzono nowy projekt aplikacji Service Fabric FabrikamFiber.CallCenterApplication. Plik Dockerfile jest dodawany do istniejącego projektu FabrikamFiber.Web . Katalog PackageRoot jest również dodawany do projektu FabrikamFiber.Web , który zawiera manifest usługi i ustawienia dla nowej usługi FabrikamFiber.Web.
Kontener jest teraz gotowy do skompilowania i spakowania w aplikacji usługi Service Fabric. Po utworzeniu obrazu kontenera na maszynie, możesz zapisać go w dowolnym rejestrze kontenerów i pobrać na dowolnego hosta, aby go uruchomić.
Lokalne uruchamianie konteneryzowanej aplikacji
Naciśnij F5 , aby uruchomić i debugować aplikację w kontenerze w lokalnym klastrze deweloperów usługi Service Fabric. Kliknij przycisk Tak , jeśli zostanie wyświetlone okno komunikatu z prośbą o przyznanie grupie "ServiceFabricAllowedUsers" uprawnienia do odczytu i wykonywania w 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 przygotowywanie do wdrożenia na platformie Azure. Obrazy kontenerów muszą być przechowywane w rejestrze kontenerów. Utwórz rejestr kontenerów platformy Azure przy użyciu następującego skryptu. Nazwa rejestru kontenerów jest widoczna przez inne subskrypcje platformy Azure, dlatego musi być unikatowa. Przed wdrożeniem aplikacji na platformie Azure należy wypchnąć obraz kontenera do tego rejestru. Gdy aplikacja zostanie wdrożona w klastrze na platformie Azure, obraz kontenera zostanie pobrany 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:
- Utwórz klaster testowy z poziomu programu Visual Studio. Ta opcja umożliwia utworzenie bezpiecznego klastra bezpośrednio z poziomu programu Visual Studio przy użyciu preferowanych konfiguracji.
- Tworzenie bezpiecznego klastra na podstawie szablonu
Ten samouczek tworzy klaster z poziomu programu Visual Studio, który jest idealny dla scenariuszy testowych. Jeśli utworzysz klaster w inny sposób lub użyjesz istniejącego klastra, 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 Eksploratorze rozwiązań. Zanotuj port frontonu internetowego wymienionego w punkcie końcowym.
Podczas tworzenia klastra:
Kliknij prawym przyciskiem myszy projekt aplikacji FabrikamFiber.CallCenterApplication w Eksploratorze rozwiązań i wybierz pozycję Publikuj.
Zaloguj się przy użyciu konta platformy Azure, aby mieć 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órej chcesz użyć. Zanotuj nazwę grupy zasobów klastra.
b. Opcjonalnie: możesz zmodyfikować liczbę węzłów. Domyślnie masz trzy węzły, co najmniej wymagane 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ę do lokalizacji, w której chcesz zapisać certyfikat. Program Visual Studio może również zaimportować certyfikat, ponieważ ten krok jest niezbędny do opublikowania aplikacji na 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. Nazwa użytkownika i hasło mogą służyć do zdalnego łączenia się z maszynami wirtualnymi. Należy również wybrać rozmiar maszyny wirtualnej i w razie potrzeby zmienić obraz maszyny wirtualnej.
Ważne
Wybierz jednostkę SKU, która obsługuje uruchamianie kontenerów. System operacyjny Windows Server w węzłach klastra musi być zgodny z systemem operacyjnym Windows Server kontenera. Aby dowiedzieć się więcej, zobacz zgodność systemu operacyjnego kontenera Windows Server i systemu operacyjnego hosta. Domyślnie ten samouczek tworzy obraz Docker oparty na Windows Server 2016 LTSC. Kontenery oparte na tym obrazie będą uruchamiane w klastrach utworzonych w systemie Windows Server 2016 Datacenter z kontenerami. 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ą
FROMinstrukcję opartą na poprzedniej wersji systemu Windows Server i dodaj instrukcję opartąFROMna 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, który ma zostać otwarty w module równoważenia obciążenia podczas wdrażania klastra. Jest to port, który zanotowałeś przed rozpoczęciem tworzenia klastra. Możesz również dodać istniejący klucz usługi Application Insights, który będzie używany do kierowania plików dziennika aplikacji do.
f. Po zakończeniu modyfikowania ustawień wybierz przycisk Utwórz .
Tworzenie trwa kilka minut. okno danych wyjściowych wskaże, kiedy klaster zostanie w pełni utworzony.
Instalowanie zaimportowanych certyfikatów
Zainstaluj certyfikat zaimportowany w ramach kroku tworzenia klastra do lokalizacji magazynu Bieżący użytkownik i wprowadź hasło klucza prywatnego, które podałeś wcześniej.
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 utworzono regułę zapory SQL w celu udzielenia dostępu do aplikacji uruchomionej lokalnie. Następnie należy włączyć aplikację działającą na platformie Azure, aby uzyskać dostęp do bazy danych SQL. Utwórz punkt końcowy usługi dla sieci wirtualnej dla klastra usługi Service Fabric, a następnie utwórz regułę zezwalającą na dostęp do bazy danych SQL. Pamiętaj, aby określić zmienną grupy zasobów klastra, której wartość zanotowałeś 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
Teraz, gdy aplikacja jest gotowa, możesz wdrożyć ją w klastrze na platformie Azure bezpośrednio z poziomu programu Visual Studio. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt aplikacji FabrikamFiber.CallCenterApplication i wybierz pozycję Publikuj. W obszarze Punkt końcowy połączenia wybierz punkt końcowy utworzonego wcześniej klastra. W usłudze Azure Container Registry wybierz utworzony wcześniej rejestr kontenerów. Kliknij pozycję Publikuj , aby wdrożyć aplikację w klastrze na platformie Azure.
Śledź postęp wdrażania w oknie wyjściowym. Po wdrożeniu aplikacji otwórz przeglądarkę i 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 wdrażania (CI/CD) za pomocą klastra Service Fabric
Aby dowiedzieć się, jak za pomocą Azure DevOps skonfigurować wdrażanie aplikacji CI/CD w klastrze Service Fabric, zobacz Samouczek: Wdrażanie aplikacji CI/CD w klastrze Service Fabric. Proces opisany w samouczku jest taki sam dla tego projektu (FabrikamFiber), po prostu pomiń pobieranie przykładu Voting i użyj FabrikamFiber jako nazwy repozytorium zamiast Voting.
Czyszczenie zasobów
Jeśli wszystko będzie gotowe, usuń wszystkie utworzone zasoby. Najprostszym sposobem jest usunięcie grup zasobów zawierających klaster usługi Service Fabric, bazę danych 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 nauczyłeś się następujących rzeczy:
- Konteneryzowanie istniejącej aplikacji przy użyciu 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
W następnej części samouczka dowiesz się, jak wdrożyć aplikację kontenera przy użyciu ciągłej integracji/ciągłego wdrażania w klastrze usługi Service Fabric.