Öğretici: Azure Service Fabric’e Windows kapsayıcısındaki bir .NET uygulamasını dağıtma

Bu öğreticide mevcut ASP.NET uygulamasını kapsayıcılı hale getirme ve bir Service Fabric uygulaması olarak paketleme işlemleri gösterilir. Kapsayıcıları yerel olarak Service Fabric geliştirme kümesinde çalıştırın ve ardından uygulamayı Azure'a dağıtın. Uygulama verileri Azure SQL Veritabanında kalıcı olarak bulundurur.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Visual Studio kullanarak mevcut uygulamayı kapsayıcılı hale getirme
  • Azure SQL Veritabanında veritabanı oluşturma
  • Azure kapsayıcı kayıt defteri oluşturma
  • Service Fabric uygulamasını Azure'a dağıtma

Not

Azure ile etkileşime geçmek için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

Önkoşullar

  1. Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun.
  2. Windows'un Hyper-V ve Kapsayıcılar özelliklerini etkinleştirin.
  3. kapsayıcıları Windows 10 üzerinde çalıştırabilmeniz için Windows için Docker Desktop'ı yükleyin.
  4. Service Fabric çalışma zamanı sürümü 6.2 veya üstünü ve Service Fabric SDK sürüm 3.1 veya üstünü yükleyin.
  5. Visual Studio'yu yükleyin ve Azure geliştirme ile ASP.NET ve web geliştirme iş yüklerini etkinleştirin.
  6. Azure PowerShell yükleme

Fabrikam Fiber CallCenter'ı indirme ve çalıştırma

  1. Fabrikam Fiber CallCenter örnek uygulamasını GitHub'dan indirin.

  2. Fabrikam Fiber CallCenter uygulamasının hatasız derlendiğinden ve çalıştırıldığından emin olun. Visual Studio'yu yönetici olarak başlatın ve VS2015\FabrikamFiber.CallCenter.sln dosyasını açın. Uygulamayı çalıştırmak ve uygulamada hata ayıklamak için F5 tuşuna basın.

    Yerel konakta çalışan Fabrikam Fiber CallCenter uygulaması giriş sayfasının ekran görüntüsü. Sayfada, destek çağrılarının listesini içeren bir pano gösterilir.

Azure SQL Veritabanı oluşturma

Fabrikam Fiber CallCenter uygulamasını üretim ortamında çalıştırırken, verilerin bir veritabanında kalıcı olarak bulunması gerekir. Şu anda kapsayıcıdaki verilerin kalıcı olmasını garanti altına alan bir yöntem olmadığından üretim verileriniz, kapsayıcıdaki bir SQL Server’da depolanamaz.

Azure SQL Veritabanı'nı öneririz. Azure'da yönetilen SQL Server Veritabanı ayarlamak ve çalıştırmak için aşağıdaki betiği çalıştırın. Betik değişkenlerinde gerekli değişiklikleri yapın. clientIP, geliştirme bilgisayarınızın IP adresidir. Betik tarafından çıktısı alınan sunucunun adını not alın.

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

İpucu

Bir şirket güvenlik duvarının arkasındaysanız, geliştirme bilgisayarınızın IP adresi İnternet'e gösterilen IP adresi olmayabilir. Veritabanının güvenlik duvarı kuralı için doğru IP adresine sahip olduğunun doğrulamak için Azure portal’a gidin ve SQL Veritabanları bölümünde veritabanınızı bulun. Adına tıklayın ve sonra Genel Bakış bölümünde “Sunucu güvenlik duvarını ayarla”ya tıklayın. "İstemci IP adresi", geliştirme makinenizin IP adresidir. "AllowClient" kuralındaki IP adresiyle eşleştiğinden emin olun.

Web yapılandırmasını güncelleştirme

FabrikamFiber.Web projesine geri dönüp web.config dosyasındaki bağlantı dizesini kapsayıcıdaki SQL Server noktası ile güncelleştirin. Bağlantı dizesinin Sunucu bölümünü, önceki betik tarafından oluşturulan sunucu adı olacak şekilde güncelleştirin. "fab-fiber-751718376.database.windows.net" gibi bir şey olmalı. Aşağıdaki XML'de yalnızca connectionString özniteliği güncelleştirmeniz gerekir; providerName ve name özniteliklerinin değiştirilmesi gerekmez.

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

Not

Ana bilgisayarınızdan erişilebilir olduğu sürece, yerel hata ayıklama için tercih ettiğiniz herhangi bir SQL Server’ı kullanabilirsiniz. Ancak localdb, container -> host iletişimini desteklemez. Web uygulamanızın sürüm derlemesini oluştururken farklı bir SQL veritabanı kullanmak isterseniz, web.release.config dosyasına başka bir bağlantı dizesi ekleyin.

Uygulamayı kapsayıcılı hale getirme

  1. FabrikamFiber.Web projesi >Kapsayıcı Düzenleyicisi DesteğiEkle'ye> sağ tıklayın. Kapsayıcı düzenleyicisi olarak Service Fabric'i seçin ve Tamam'a tıklayın.

  2. İstenirse Docker'ı Windows kapsayıcılarına şimdi değiştirmek için Evet'e tıklayın.

    Çözümde yeni bir Service Fabric uygulama projesi (FabrikamFiber.CallCenterApplication) oluşturulur. Mevcut FabrikamFiber.Web projesine bir Dockerfile eklenir. Ayrıca FabrikamFiber.Web projesine bir PackageRoot dizini de eklenir ve bu dizin yeni FabrikamFiber.Web hizmetinin hizmet bildirimiyle ayarlarını içerir.

    Artık kapsayıcı, Service Fabric uygulamasında oluşturulup paketlenmeye hazırdır. Makinenizde kapsayıcı görüntüsü oluşturulduğunda, bu görüntüyü herhangi bir kapsayıcı kayıt defterine gönderebilir ve çalıştırmak için herhangi bir ana bilgisayara çekebilirsiniz.

Kapsayıcılı hale getirilen uygulamayı yerel olarak çalıştırma

Uygulamayı yerel Service Fabric geliştirme kümesindeki bir kapsayıcıda çalıştırmak ve hatalarını ayıklamak için F5 tuşuna basın. 'ServiceFabricAllowedUsers' grubuna, Visual Studio proje dizininize yönelik okuma ve yürütme izni verilmesini isteyen bir ileti kutusu sunulursa Evet’e tıklayın.

F5 çalıştırması aşağıdaki gibi bir özel durum oluşturursa, Azure veritabanı güvenlik duvarına doğru IP eklenmemiş demektir.

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>

Azure veritabanı güvenlik duvarına uygun IP'yi eklemek için aşağıdaki komutu çalıştırın.

# 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

Kapsayıcı kayıt defteri oluşturma

Artık uygulama yerel olarak çalıştırıldığına göre, Azure'a dağıtmak için hazırlamaya başlayın. Kapsayıcı görüntülerinin bir kapsayıcı kayıt defterinde depolanması gerekir. Aşağıdaki betiği kullanarak bir Azure kapsayıcı kayıt defteri oluşturun. Kapsayıcı kayıt defteri adı diğer Azure aboneliklerine görünür olduğundan benzersiz olmalıdır. Uygulamayı Azure'a dağıtmadan önce kapsayıcı görüntüsünü bu kayıt defterine gönderirsiniz. Uygulama Azure'daki kümeye dağıtılırken kapsayıcı görüntüsü bu kayıt defterinden çekilir.

# 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

Azure’da Service Fabric kümesi oluşturma

Service Fabric uygulamaları, ağ bağlantılı sanal veya fiziksel makinelerin bulunduğu bir kümede çalışır. Uygulamayı Azure'a dağıtmadan önce Azure'da bir Service Fabric kümesi oluşturun.

Şunları yapabilirsiniz:

  • Visual Studio'dan test kümesi oluşturma. Bu seçenek doğrudan Visual Studio'dan tercih ettiğiniz yapılandırmalarla güvenli bir küme oluşturmanızı sağlar.
  • Şablondan güvenli bir küme oluşturma

Bu öğretici Visual Studio'dan bir küme oluşturur; bu test senaryoları için idealdir. Başka herhangi bir yolla küme oluşturursanız veya mevcut kümelerden birini kullanırsanız, bağlantı uç noktanızı kopyalayıp yapıştırabilir veya aboneliğinizden seçebilirsiniz.

Başlamadan önce, Çözüm Gezgini FabrikamFiber.Web -> PackageRoot -> ServiceManifest.xml açın. Uç Nokta'da listelenen web ön ucu için bağlantı noktasını not edin.

Kümeyi oluştururken:

  1. Çözüm Gezgini'nde FabrikamFiber.CallCenterApplication uygulama projesine sağ tıklayın ve Yayımla’yı seçin.

  2. Aboneliklerinize erişebilmek için Azure hesabınızı kullanarak oturum açın.

  3. Bağlantı Uç Noktası açılır listesinin altında Yeni Küme Oluştur... seçeneğini belirleyin.

  4. Küme oluştur iletişim kutusunda aşağıdaki ayarları değiştirin:

    a. Küme adı alanında kümenizin adını, ayrıca kullanmak istediğiniz aboneliği ve konumu belirtin. Küme kaynak grubunuzun adını not alın.

    b. İsteğe bağlı: Düğüm sayısını değiştirebilirsiniz. Varsayılan olarak üç düğümünüz vardır; bu, Service Fabric senaryolarını test etmek için gereken en düşük sayıdır.

    c. Sertifika sekmesini seçin. Bu sekmede, kümenizin sertifikasının güvenliğini sağlamak için kullanılacak parolayı yazın. Bu sertifika, kümenizin güvenliğine yardımcı olur. Ayrıca sertifikayı kaydetmek istediğiniz yolu da değiştirebilirsiniz. Visual Studio sertifikayı sizin için içeri aktarabilir, çünkü uygulamayı kümeye yayımlarken bu gerekli bir adımdır.

    Not

    Bu sertifikanın içeri aktarıldığı klasör yolunu not edin. Küme oluşturulduktan sonraki adım bu sertifikayı içeri aktarmaktır.

    d. VM Ayrıntı sekmesini seçin. Kümeyi oluşturan Sanal Makineler (VM) için kullanmak istediğiniz parolayı belirtin. Kullanıcı adı ve parola, VM'lere uzaktan bağlanmak için kullanılabilir. Ayrıca VM makine boyutu da seçmelisiniz ve gerekirse VM görüntüsü değiştirebilirsiniz.

    Önemli

    Kapsayıcı çalıştırmayı destekleyen bir SKU seçin. Küme düğümlerinizdeki Windows Server işletim sistemi, kapsayıcınızın Windows Server işletim sistemiyle uyumlu olmalıdır. Daha fazla bilgi için bkz. Windows Server kapsayıcı işletim sistemi ve ana bilgisayar işletim sistemi uyumluluğu. Varsayılan olarak bu öğretici, Windows Server 2016 LTSC’yi temel alan bir Docker görüntüsü oluşturur. Bu görüntüyü temel alan kapsayıcılar, Kapsayıcılar içeren Windows Server 2016 Veri Merkezi ile oluşturulan kümelerde çalıştırılır. Ancak, bir küme oluşturursanız veya Windows Server'ın farklı bir sürümünü temel alan mevcut bir kümeyi kullanırsanız, kapsayıcının temel alındığı işletim sistemi görüntüsünü değiştirmeniz gerekir. FabrikamFiber.Web projesinde dockerfile dosyasını açın, Windows Server'ın önceki bir sürümünü temel alan mevcut FROM deyimleri açıklama satırı yapın ve Windows Server Core DockerHub sayfasından istenen sürümün etiketine göre bir FROM deyim ekleyin. Windows Server Core sürümleri, destek zaman çizelgeleri ve sürüm oluşturma hakkında ek bilgi için bkz. Windows Server Core sürüm bilgileri.

    e. Gelişmiş sekmesinde, küme dağıtılırken yük dengeleyicide açılacak uygulama bağlantı noktasını listeleyin. Bu, kümeyi oluşturmaya başlamadan önce not ettiğiniz bağlantı noktasıdır. Ayrıca uygulama günlük dosyalarını yönlendirmek için kullanılacak mevcut bir Application Insights anahtarı ekleyebilirsiniz.

    f. Ayarları değiştirmeyi bitirdiğinizde Oluştur düğmesini seçin.

  5. Oluşturma işleminin tamamlanması birkaç dakika sürer; çıkış penceresinde kümenin ne zaman tam olarak oluşturulduğu gösterilir.

İçeri aktarılan sertifikayı yükleme

Küme oluşturma adımının bir parçası olarak içeri aktarılan sertifikayı Geçerli Kullanıcı deposu konumuna yükleyin ve sağladığınız özel anahtar parolasını sağlayın.

Denetim masasından Kullanıcı Sertifikalarını Yönet'i açıp sertifikanın Sertifikalar - Geçerli Kullanıcı -Kişisel ->>Sertifikalar altında yüklü olduğunu onaylayarak yüklemeyi onaylayabilirsiniz. Sertifika [Küme Adı] gibi olmalıdır. [Küme Konumu].cloudapp.azure.com, örneğin fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

Azure'da çalışan uygulamanızın SQL Veritabanı erişmesine izin verme

Daha önce, yerel olarak çalıştırılan uygulamanıza erişim vermek için bir SQL güvenlik duvarı kuralı oluşturmuştunuz. Bundan sonra, Azure'da çalıştırılan uygulamanın SQL veritabanına erişimini etkinleştirmeniz gerekir. Service Fabric kümesi için bir sanal ağ hizmet uç noktası oluşturun ve ardından bu uç noktanın SQL veritabanına erişmesine izin verecek bir kural oluşturun. Kümeyi oluştururken not ettiğiniz küme kaynak grubu değişkenini belirttiğinizden emin olun.

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

Uygulamayı Azure'a dağıtma

Uygulama hazır olduğuna göre, doğrudan Visual Studio'dan Azure'daki bir kümeye dağıtabilirsiniz. Çözüm Gezgini'nde FabrikamFiber.CallCenterApplication uygulama projesine sağ tıklayın ve Yayımla'yı seçin. Bağlantı Uç Noktası'nda, daha önce oluşturmuş olduğunuz kümenin uç noktasını seçin. Azure Container Registry'de, daha önce oluşturmuş olduğunuz kapsayıcı kayıt defterini seçin. Uygulamayı Azure'daki kümeye dağıtmak için Yayımla’ya tıklayın.

Uygulama yayımlama

Çıkış penceresinde dağıtımın ilerleme durumunu izleyin. Uygulama dağıtıldığında, tarayıcıyı açın ve küme adresiyle uygulama bağlantı noktasını yazın. Örneğin, http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/.

azure.com üzerinde çalışan Fabrikam Fiber CallCenter uygulaması giriş sayfasının ekran görüntüsü. Sayfada, destek çağrılarının listesini içeren bir pano gösterilir.

Sayfa yüklenemezse veya sertifikayı sormazsa, örneğin https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer Gezgin yolunu açmayı deneyin ve yeni yüklenen sertifikayı seçin.

Service Fabric kümesi ile Sürekli Tümleştirme ve Dağıtımı (CI/CD) ayarlama

Service Fabric kümesinde CI/CD uygulama dağıtımını yapılandırmak için Azure DevOps kullanma hakkında bilgi edinmek için bkz. Öğretici: CI/CD ile Service Fabric kümesine uygulama dağıtma. Bu öğreticide anlatılan işlem, bu (FabrikamFiber) projesiyle aynıdır, tek yapmanız gereken Voting örneğini indirme adımını atlayıp depo adını Voting yerine FabrikamFiber olarak değiştirmektir.

Kaynakları temizleme

İşiniz bittiğinde, oluşturduğunuz tüm kaynakları kaldırmayı unutmayın. Bunun en basit yolu Service Fabric kümesini, Azure SQL veritabanını ve Azure Container Registry'yi içeren kaynak gruplarını kaldırmaktır.

$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

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  • Visual Studio kullanarak mevcut uygulamayı kapsayıcılı hale getirme
  • Azure SQL Veritabanında veritabanı oluşturma
  • Azure kapsayıcı kayıt defteri oluşturma
  • Service Fabric uygulamasını Azure'a dağıtma

Öğreticinin bir sonraki bölümünde, Service Fabric kümesine CI/CD ile kapsayıcı uygulaması dağıtmayı öğreneceksiniz.