Tutorial: Menerapkan aplikasi .NET dalam kontainer Windows ke Azure Service Fabric

Tutorial ini menunjukkan kepada Anda cara meng-kontainer aplikasi ASP.NET yang ada dan mengemasnya sebagai aplikasi Service Fabric. Jalankan kontainer secara lokal pada kluster pengembangan Service Fabric dan kemudian terapkan aplikasi ke Azure. Aplikasi ini tetap mempertahankan data di Azure SQL Database.

Dalam tutorial ini, Anda akan belajar cara:

  • Meng-kontainer aplikasi yang ada menggunakan Visual Studio
  • Membuat database di Azure SQL Database
  • Membuat registri kontainer Azure
  • Menerapkan aplikasi Service Fabric ke Azure

Catatan

Kami menyarankan agar Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Prasyarat

  1. Jika Anda tidak memiliki langganan Azure, buatlah akun gratis.
  2. Aktifkan fitur Windows Hyper-V dan Kontainer.
  3. Pasang Docker Desktop untuk Windows sehingga Anda dapat menjalankan kontainer pada Windows 10.
  4. Pasang Service Fabric runtime versi 6.2 atau yang lebih baru dan Service Fabric SDK versi 3.1 atau yang lebih baru.
  5. Instal Visual Studio dan aktifkan Pengembangan Azure dan beban kerja ASP.NET dan pengembangan web.
  6. Pasang Azure PowerShell

Unduh dan jalankan Fabrikam Fiber CallCenter

  1. Unduh aplikasi contoh Fabrikam Fiber CallCenter dari GitHub.

  2. Pastikan bahwa aplikasi Fabrikam Fiber CallCenter membangun dan berjalan tanpa kesalahan. Luncurkan Visual Studio sebagai admin dan buka file VS2015\FabrikamFiber.CallCenter.sln. Tekan F5 untuk menjalankan dan men-debug aplikasi.

    Cuplikan layar beranda aplikasi Fabrikam Fiber CallCenter yang berjalan di host lokal. Halaman ini menampilkan dasbor dengan daftar panggilan dukungan.

Membuat Azure SQL DB

Saat menjalankan aplikasi Fabrikam Fiber CallCenter dalam produksi, data perlu dipertahankan dalam database. Saat ini tidak ada cara untuk menjamin data tahan dalam kontainer, oleh karena itu, Anda tidak dapat menyimpan data produksi di SQL Server dalam kontainer.

Kami merekomendasikan Azure SQL Database. Untuk menyiapkan dan menjalankan SQL Server DB yang terkelola di Azure, jalankan skrip berikut ini. Ubah variabel skrip bila diperlukan. clientIP adalah alamat IP komputer pengembangan Anda. Catat nama server yang dihasilkan oleh skrip.

$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

Jika Anda berada di belakang firewall perusahaan, alamat IP komputer pengembangan Anda mungkin bukan alamat IP yang disingkap pada internet. Untuk memverifikasi bahwa database memiliki alamat IP yang benar untuk aturan firewall, buka portal Microsoft Azure dan temukan database Anda di bagian SQL Database. Klik namanya, lalu di bagian Gambaran Umum klik "Atur firewall server". "Alamat IP klien" adalah alamat IP komputer pengembangan Anda. Pastikan alamat IP cocok dengan alamat IP dalam aturan "AllowClient".

Memperbarui konfigurasi web

Kembali ke proyek FabrikamFiber.Web, perbarui string koneksi dalam file web.config, untuk mengarahkan ke SQL Server dalam kontainer. Perbarui bagian Server dari string koneksi menjadi nama server yang dibuat oleh skrip sebelumnya. Seharusnya namanya menjadi seperti "fab-fiber-751718376.database.windows.net". Dalam XML berikut, Anda hanya perlu memperbarui connectionString atribut; providerName dan name atribut tidak perlu diubah.

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

Catatan

Anda dapat menggunakan SQL Server apa pun yang Anda inginkan untuk debugging lokal, selama dapat dijangkau dari host Anda. Namun, localdb tidak mendukung container -> host komunikasi. Jika Anda ingin menggunakan database SQL lain saat membuat build rilis aplikasi web Anda, tambahkan string koneksi lain ke file web.release.config Anda.

Meng-kontainer aplikasi

  1. Klik kanan proyek FabrikamFiber.Web>Tambahkan>Dukungan Orkestrator Kontainer. Pilih Service Fabric sebagai orchestrator kontainer dan klik OK.

  2. Jika diminta, klik Ya untuk mengalihkan Docker ke kontainer Windows sekarang.

    Proyek baru proyek aplikasi Service Fabric FabrikamFiber.CallCenterApplication dibuat dalam solusi. Dockerfile ditambahkan ke proyek FabrikamFiber.Web yang ada. Direktori PackageRoot juga ditambahkan ke proyek FabrikamFiber.Web, yang berisi manifes layanan dan pengaturan untuk layanan FabrikamFiber.Web baru.

    Kontainer tersebut kini siap dibangun dan dikemas dalam aplikasi Service Fabric. Setelah Anda memiliki gambar kontainer yang dibangun di komputer Anda, Anda dapat mendorongnya ke registri kontainer apa pun dan menariknya ke host mana pun untuk dijalankan.

Jalankan aplikasi yang ter-kontainer secara lokal

Tekan F5 untuk menjalankan dan men-debug aplikasi dalam kontainer pada kluster pengembangan Service Fabric lokal. Klik Ya jika disajikan dengan kotak pesan yang meminta untuk memberi izin baca grup 'ServiceFabricAllowedUsers' dan menjalankan izin ke direktori proyek Visual Studio Anda.

Jika eksekusi F5 menampilkan pengecualian seperti berikut, maka IP yang benar belum ditambahkan ke firewall database 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>

Untuk menambahkan IP yang sesuai ke firewall database Azure, jalankan perintah berikut ini.

# 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

Membuat registri kontainer

Setelah aplikasi berjalan secara lokal, mulai bersiap untuk menerapkannya ke Azure. Gambar kontainer perlu disimpan dalam registri kontainer. Buat registri kontainer Azure menggunakan skrip berikut ini. Nama registri kontainer dapat dilihat oleh langganan Azure lainnya, sehingga harus unik. Sebelum menerapkan aplikasi ke Azure, doronglah gambar kontainer ke registri ini. Ketika aplikasi diterapkan ke kluster di Azure, gambar kontainer ditarik dari registri ini.

# 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

Membuat kluster Service Fabric di Azure

Aplikasi Service Fabric berjalan pada kluster, serangkaian mesin virtual atau fisik yang terhubung ke jaringan. Sebelum Anda dapat menerapkan aplikasi ke Azure, buatlah kluster Service Fabric di Azure.

Anda dapat:

  • Buat kluster pengujian dari Visual Studio. Opsi ini memungkinkan Anda membuat kluster aman langsung dari Visual Studio dengan konfigurasi yang Anda inginkan.
  • Membuat kluster aman dari templat

Tutorial ini membuat kluster dari Visual Studio, yang ideal untuk skenario pengujian. Jika Anda membuat kluster dengan cara lain atau menggunakan kluster yang sudah ada, Anda dapat menyalin dan menempelkan titik akhir sambungan atau pilih dari langganan Anda.

Sebelum memulai, buka FabrikamFiber.Web -> PackageRoot -> ServiceManifest.xml di Penjelajah Solusi. Perhatikan port untuk front-end web yang tercantum di Titik Akhir.

Saat membuat kluster:

  1. Klik kanan pada proyek aplikasi FabrikamFiber.CallCenterApplication di Penjelajah Solusi dan pilih Terbitkan.

  2. Masuk dengan menggunakan akun Azure Anda sehingga Anda dapat memiliki akses ke langganan Anda.

  3. Di bawah daftar menurun untuk Titik Akhir Koneksi, pilih opsi Buat Kluster Baru...

  4. Dalam dialog Buat kluster, ubah pengaturan berikut ini:

    a. Tentukan nama kluster Anda di bidang Nama Kluster, serta langganan dan lokasi yang ingin Anda gunakan. Perhatikan nama grup sumber daya kluster Anda.

    b. Opsional: Anda dapat memodifikasi jumlah node. Secara default Anda memiliki tiga node, jumlah minimum yang diperlukan untuk menguji skenario Service Fabric.

    c. Pilih tab Sertifikat. Di tab ini, ketik kata sandi yang akan digunakan untuk mengamankan sertifikat kluster Anda. Sertifikat ini membantu mengamankan kluster Anda. Anda juga dapat mengubah jalur ke tempat penyimpanan sertifikat. Visual Studio juga dapat mengimpor sertifikat untuk Anda, karena ini adalah langkah yang diperlukan untuk mempublikasikan aplikasi ke kluster.

    Catatan

    Catat jalur folder tempat sertifikat ini diimpor. Langkah selanjutnya setelah pembuatan kluster adalah mengimpor sertifikat ini.

    d. Pilih tab Detail VM. Tentukan kata sandi yang ingin Anda gunakan untuk Virtual Machines (VM) yang membentuk kluster. Nama pengguna dan kata sandi dapat digunakan untuk menyambungkan ke VM dari jarak jauh. Anda juga harus memilih ukuran mesin VM dan dapat mengubah gambar VM jika diperlukan.

    Penting

    Pilih SKU yang mendukung kontainer yang sedang berjalan. OS Windows Server pada node kluster Anda harus kompatibel dengan OS Windows Server kontainer Anda. Untuk mempelajari selengkapnya, lihat OS kontainer Windows Server dan kompatibilitas OS host. Secara default, tutorial ini membuat gambar Docker berdasarkan Windows Server 2016 LTSC. Kontainer berdasarkan gambar ini akan berjalan pada kluster yang dibuat dengan Pusat Data Windows Server 2016 dengan Kontainer. Namun, jika Anda membuat kluster atau menggunakan kluster yang ada berdasarkan versi Windows Server yang berbeda, Anda harus mengubah gambar OS yang menjadi dasar kontainer. Buka dockerfile dalam proyek FabrikamFiber.Web, komentari FROM pernyataan apa pun yang ada berdasarkan versi Windows Server sebelumnya, dan tambahkan FROM pernyataan berdasarkan tag versi yang diinginkan dari halaman Windows Server Core DockerHub. Untuk informasi tambahan tentang rilis Windows Server Core, garis waktu dukungan, dan penerapan versi, lihat info rilis Windows Server Core.

    e. Di tab Tingkat Lanjut, buat daftar port aplikasi yang akan dibuka di penyeimbang muatan saat kluster diterapkan. Ini adalah port yang Anda perhatikan sebelum mulai membuat kluster. Anda juga dapat menambahkan kunci Application Insights yang ada untuk merutekan file log aplikasi.

    f. Bila Anda sudah selesai mengubah pengaturan, pilih tombol Buat.

  5. Pembuatan membutuhkan waktu beberapa menit hingga selesai; jendela output akan menunjukkan kapan kluster sepenuhnya dibuat.

Pasang sertifikat yang diimpor

Pasang sertifikat yang diimpor sebagai bagian dari langkah pembuatan kluster, buka lokasi penyimpanan Pengguna Saat Ini dan berikan kata sandi kunci pribadi yang Anda sediakan.

Anda dapat mengonfirmasi pemasangan dengan membuka Kelola Sertifikat Pengguna dari panel kontrol dan mengonfirmasi sertifikat dipasang di bawah Sertifikat - Pengguna Saat Ini ->Sertifikat ->Pribadi. Sertifikat harus seperti [Cluster Name] . [Cluster Location] .cloudapp.azure.com, misalnya fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

Perbolehkan aplikasi Anda berjalan di Azure untuk mengakses SQL Database

Sebelumnya, Anda membuat aturan firewall SQL untuk memberikan akses ke aplikasi Anda yang berjalan secara lokal. Selanjutnya, Anda perlu mengaktifkan aplikasi yang berjalan di Azure untuk mengakses SQL DB. Buat titik akhir layanan jaringan virtual untuk kluster Service Fabric lalu buat aturan untuk memperbolehkan titik akhir tersebut mengakses SQL DB. Pastikan untuk menentukan variabel grup sumber daya kluster yang Anda catat saat membuat kluster.

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

Menerapkan aplikasi ke Azure

Setelah aplikasi siap, Anda dapat menerapkannya ke kluster di Azure langsung dari Visual Studio. Di Penjelajah Solusi, klik kanan proyek aplikasi FabrikamFiber.CallCenterApplication dan pilih Terbitkan. Di Titik Akhir Koneksi, pilih titik akhir kluster yang Anda buat sebelumnya. Di Azure Container Registry, pilih registri kontainer yang Anda buat sebelumnya. Klik Terbitkan untuk menerapkan aplikasi ke kluster di Azure.

Menerbitkan aplikasi

Ikuti progres penerapan di jendela output. Ketika aplikasi diterapkan, buka browser dan ketik alamat kluster dan port aplikasi. Contohnya:http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/

Cuplikan layar beranda aplikasi Fabrikam Fiber CallCenter yang berjalan di azure.com. Halaman ini menampilkan dasbor dengan daftar panggilan dukungan.

Jika halaman gagal dimuat, atau gagal meminta sertifikat, coba buka jalur Explorer, misalnya, https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer dan pilih sertifikat yang baru dipasang.

Menyiapkan Integrasi dan Penerapan Berkelanjutan (CI/CD) dengan kluster Service Fabric

Untuk mempelajari cara menggunakan Azure DevOps untuk mengonfigurasi penerapan aplikasi CI/CD ke kluster Service Fabric, lihat Tutorial: Menerapkan aplikasi dengan CI/CD ke kluster Service Fabric. Proses yang dijelaskan dalam tutorial tersebut sama untuk proyek ini (FabrikamFiber), lewati mengunduh sampel Voting dan ganti FabrikamFiber sebagai nama repositori, bukan Voting.

Membersihkan sumber daya

Jika sudah selesai, pastikan untuk menghapus semua sumber daya yang Anda buat. Cara paling sederhana adalah menghapus grup sumber daya yang berisi kluster Service Fabric, Azure SQL DB, dan 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

Langkah berikutnya

Dalam tutorial ini, Anda akan belajar cara:

  • Meng-kontainer aplikasi yang ada menggunakan Visual Studio
  • Membuat database di Azure SQL Database
  • Membuat registri kontainer Azure
  • Menerapkan aplikasi Service Fabric ke Azure

Di bagian tutorial berikutnya, pelajari cara Menerapkan aplikasi kontainer dengan CI / CD ke kluster Service Fabric.