Integrasikan API Management dengan Service Fabric di Azure

Menyebarkan Azure API Management dengan Service Fabric adalah skenario lanjutan. API Management berguna ketika Anda perlu menerbitkan API dengan set aturan perutean yang kaya untuk layanan Service Fabric ujung belakang Anda. Aplikasi cloud biasanya memerlukan gateway ujung depan untuk menyediakan satu titik masuk bagi pengguna, perangkat, atau aplikasi lainnya. Dalam Service Fabric, gateway dapat menjadi layanan tanpa status apa pun yang dirancang untuk jalan masuk lalu lintas seperti aplikasi ASP.NET Core, Pusat Aktivitas, IoT Hub, atau Azure API Management.

Artikel ini memperlihatkan kepada Anda cara menyiapkan Azure API Management dengan Service Fabric untuk merutekan lalu lintas ke layanan ujung belakang di Service Fabric. Setelah selesai, Anda telah menyebarkan API Management ke VNET, mengonfigurasi operasi API untuk mengirim lalu lintas ke layanan tanpa status ujung belakang. Untuk mempelajari selengkapnya tentang skenario Azure API Management dengan Service Fabric, lihat artikel gambaran umumnya.

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.

Ketersediaan

Penting

Fitur ini tersedia di tingkat Premium dan Pengembang API Management karena dukungan jaringan virtual yang diminta.

Prasyarat

Sebelum Anda mulai:

  • Jika Anda tidak memiliki langganan Azure, buatlah akun gratis
  • Pasang Azure PowerShell atau Azure CLI.
  • Buat kluster Windows yang aman dalam grup keamanan jaringan.
  • Jika Anda menyebarkan kluster Windows, siapkan lingkungan pengembangan Windows. Pasang Visual Studio 2019 dan pengembangan Azure, ASP.NET dan pengembangan web, dan beban kerja .NET Core pengembangan lintas platform. Kemudian siapkan lingkungan pengembangan .NET.

Topologi jaringan

Sekarang, setelah Anda memiliki kluster Windows yang aman di Azure, menyebarkan API Management ke jaringan virtual (VNET) dalam subnet dan BSG yang ditunjuk untuk API Management. Untuk artikel ini, templat API Management Resource Manager telah dikonfigurasi sebelumnya untuk menggunakan nama VNET, subnet, dan NSG yang Anda siapkan di tutorial kluster Windows Artikel ini menyebarkan topologi ke Azure tempat API Management dan Service Fabric di subnet Jaringan Virtual yang sama:

Keterangan gambar

Masuk ke Azure dan pilih langganan Anda

Masuk ke akun Azure Anda pilih langganan Anda sebelum Anda menjalankan perintah Azure.

Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId <guid>
az login
az account set --subscription <guid>

Sebarkan layanan ujung belakang Service Fabric

Sebelum mengonfigurasi API Management untuk merutekan lalu lintas ke layanan ujung layanan Service Fabric, pertama-tama Anda memerlukan layanan yang sedang berjalan untuk menerima permintaan.

Buat ASP.NET Core Reliable Service stateless tanpa status dasar menggunakan templat proyek Web API default. Ini membuat titik akhir HTTP untuk layanan Anda, yang Anda ekspos melalui Azure API Management.

Mulai Visual Studio sebagai Administrator dan buat layanan ASP.NET Core:

  1. Di Visual Studio, pilih File -> Proyek Baru.

  2. Pilih templat Aplikasi Service Fabric pada Cloud dan beri nama "ApiApplication" .

  3. Pilih templat layanan ASP.NET Core dan beri nama proyek "WebApiService" .

  4. Pilih templat proyek Web API ASP.NET Core 2.1.

  5. Setelah proyek dibuat, buka PackageRoot\ServiceManifest.xml dan hapus atribut Port dari konfigurasi sumber daya titik akhir:

    <Resources>
      <Endpoints>
        <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" />
      </Endpoints>
    </Resources>
    

    Menghapus port memungkinkan Service Fabric untuk menentukan port secara dinamis dari rentang port aplikasi, dibuka melalui Grup Keamanan Jaringan di templat Cluster Resource Manager, memungkinkan lalu lintas mengalir ke sana dari API Management.

  6. Tekan F5 di Visual Studio untuk memverifikasi bahwa API web tersedia secara lokal.

    Buka Service Fabric Explorer dan telusuri paling detail ke instans tertentu layanan ASP.NET Core untuk melihat alamat dasar yang didengarkan layanan. Tambahkan /api/values ke alamat dasar dan buka di browser, yang menggunakan metode DAPATKAN pada ValuesController di templat Web API. Ini mengembalikan respons default yang disediakan oleh templat, array JSON yang berisi dua string:

    ["value1", "value2"]`
    

    Ini adalah titik akhir yang Anda ekspos melalui API Management di Azure.

  7. Terakhir, terapkan aplikasi ke kluster Anda di Azure. Di Visual Studio, klik kanan proyek Aplikasi dan pilih Terbitkan. Berikan titik akhir kluster Anda (misalnya, mycluster.southcentralus.cloudapp.azure.com:19000 ) untuk menyebarkan aplikasi ke kluster Service Fabric Anda di Azure.

Layanan ASP.NET Core tanpa status bernama fabric:/ApiApplication/WebApiService harus sekarang berjalan di kluster Service Fabric Anda di Azure.

Mengunduh dan memahami templat Resource Manager

Unduh dan simpan file templat dan parameter Resource Manager berikut ini:

Templat network-apim.json menyebarkan subnet baru dan grup keamanan jaringan dalam jaringan virtual tempat kluster Service Fabric disebarkan.

Bagian berikut ini menjelaskan sumber daya yang ditentukan oleh templat apim.json. Untuk informasi selengkapnya, ikuti link ke dokumentasi referensi templat pada setiap bagian. Parameter yang dapat dikonfigurasi yang didefinisikan dalam file parameter apim.parameters.json ditentukan nanti dalam artikel ini.

Microsoft.ApiManagement/service

Microsoft.ApiManagement/service menjelaskan instans layanan API Management: nama, SKU atau tingkat, lokasi grup sumber daya, informasi penerbit, dan jaringan virtual.

Microsoft.ApiManagement/service/certificates

Microsoft.ApiManagement/service/certificates mengonfigurasi keamanan API Management. API Management harus mengautentikasi dengan kluster Service Fabric Anda untuk penemuan layanan menggunakan sertifikat klien yang memiliki akses ke kluster Anda. Artikel ini menggunakan sertifikat yang sama yang ditentukan sebelumnya saat membuat kluster Windows yang secara default dapat digunakan untuk mengakses kluster Anda.

Artikel ini menggunakan sertifikat yang sama untuk autentikasi klien dan keamanan node-ke-node kluster. Anda dapat menggunakan sertifikat klien terpisah jika Anda memiliki sertifikat yang dikonfigurasi untuk mengakses kluster Service Fabric Anda. Berikan nama, , kata sandi, dan data (string yang dikodekan base-64) dari file kunci pribadi (.pfx) dari sertifikat kluster yang Anda tentukan saat membuat kluster Service Fabric Anda.

Microsoft.ApiManagement/service/backends

Microsoft.ApiManagement/service/backends menjelaskan layanan backend tempat lalu lintas diteruskan.

Untuk ujung belakang Service Fabric, kluster Service Fabric adalah ujung belakang alih-alih layanan Service Fabric tertentu. Ini memungkinkan satu kebijakan untuk merutekan ke lebih dari satu layanan dalam kluster. Bidang url di sini adalah nama layanan yang sepenuhnya memenuhi syarat layanan di kluster Anda yang semua permintaan dirutekan secara default jika tidak ada nama layanan yang ditentukan dalam kebijakan ujung belakang. Anda dapat menggunakan nama layanan palsu, seperti "fabric:/fake/service" jika Anda tidak berniat untuk memiliki layanan fallback. resourceId menentukan titik akhir manajemen kluster. clientCertificateThumbprint dan serverCertificateThumbprints mengidentifikasi sertifikat yang digunakan untuk mengautentikasi dengan kluster.

Microsoft.ApiManagement/service/products

Microsoft.ApiManagement/service/products membuat produk. Di Azure API Management, produk berisi satu atau beberapa API serta kuota penggunaan dan ketentuan penggunaan. Setelah produk diterbitkan, pengembang dapat berlangganan produk dan mulai menggunakan API produk.

Masukkan displayName dan description deskriptif untuk produk. Untuk artikel ini, langganan diperlukan tetapi persetujuan langganan oleh admin tidak diperlukan. Status produk ini "diterbitkan" dan bisa dilihat oleh pelanggan.

Microsoft.ApiManagement/service/apis

Microsoft.ApiManagement/service/apis membuat API. API dalam API Management mewakili set operasi yang dapat digunakan oleh aplikasi klien. Setelah operasi ditambahkan, API ditambahkan ke produk dan dapat diterbitkan. Setelah API diterbitkan, API dapat berlangganan dan digunakan oleh pengembang.

  • displayName bisa berupa nama apa pun untuk API Anda. Untuk artikel ini, gunakan "Aplikasi Service Fabric".
  • name menyediakan nama yang unik dan deskriptif untuk API, seperti "service-fabric-app". Ini ditampilkan pada portal pengembang dan penerbit.
  • serviceUrl mereferensikan layanan HTTP yang mengimplementasikan API. API Management meneruskan permintaan ke alamat ini. Untuk ujung belakang Service Fabric, nilai URL ini tidak digunakan. Anda dapat memberikan nilai apa pun di sini. Untuk artikel ini, misalnya "http://servicefabric".
  • path ditambahkan ke URL dasar untuk layanan manajemen API. URL dasar umum untuk semua API yang dihosting oleh instans layanan API Management. API Management membedakan API berdasarkan akhirannya, karenanya akhiran harus unik untuk setiap API untuk penerbit tertentu.
  • protocols menentukan protokol mana yang dapat digunakan untuk mengakses API. Untuk artikel ini, mencantumkan http dan https.
  • path adalah akhiran untuk API. Untuk artikel ini, gunakan "myapp".

Microsoft.ApiManagement/service/apis/operations

Microsoft.ApiManagement/service/apis/operations Sebelum API dalam API Management bisa digunakan, operasi harus ditambahkan ke API. Klien eksternal menggunakan operasi untuk berkomunikasi dengan ASP.NET Core tanpa status yang berjalan di kluster Service Fabric.

Untuk menambahkan operasi API ujung depan, isi nilai:

  • displayName dan description menjelaskan operasi. Untuk artikel ini, gunakan "Nilai".
  • method menentukan kata kerja HTTP. Untuk artikel ini, tentukan DAPATKAN.
  • urlTemplate ditambahkan ke URL dasar API dan mengidentifikasi satu operasi HTTP. Untuk artikel ini, gunakan /api/values jika Anda menambahkan layanan ujung belakang .NET atau getMessage jika Anda menambahkan layanan ujung belakang Java. Secara default, jalur URL yang ditentukan di sini adalah jalur URL yang dikirim ke layanan Service Fabric ujung belakang. Jika Anda menggunakan jalur URL yang sama di sini dengan yang digunakan layanan Anda, seperti "/api/values", operasi bekerja tanpa modifikasi lebih lanjut. Anda juga dapat menentukan jalur URL di sini yang berbeda dari jalur URL yang digunakan oleh layanan Service Fabric ujung belakang Anda, dalam hal ini Anda juga perlu menentukan penulisan ulang jalur dalam kebijakan operasi Anda nanti.

Microsoft.ApiManagement/service/apis/policies

Microsoft.ApiManagement/service/apis/policies membuat kebijakan ujung belakang, yang mengikat semuanya bersama-sama. Di sinilah Anda mengonfigurasi layanan Service Fabric ujung belakang di mana permintaan dirutekan. Anda dapat menerapkan kebijakan ini ke operasi API apa pun. Untuk informasi selengkapnya, lihat Gambaran umum kebijakan.

Konfigurasi ujung belakang untuk Service Fabric menyediakan kontrol perutean permintaan berikut:

  • Pemilihan instans layanan dengan menentukan nama instans layanan Service Fabric, baik yang dikodekan secara permanen (misalnya, "fabric:/myapp/myservice") atau dihasilkan dari permintaan HTTP (misalnya, "fabric:/myapp/users/" + context.Request.MatchedParameters["name"]).
  • Resolusi partisi dengan menghasilkan kunci partisi menggunakan skema partisi Service Fabric apa pun.
  • Pemilihan replika untuk layanan yang berstatus.
  • Resolusi mencoba kembali kondisi yang memungkinkan Anda menentukan kondisi untuk menyelesaikan ulang lokasi layanan dan mengirim ulang permintaan.

policyContent adalah Json yang lolos konten XML kebijakan. Untuk artikel ini, buat kebijakan ujung belakang untuk merutekan permintaan langsung ke layanan tanpa status .NET atau Java yang disebarkan sebelumnya. Tambahkan kebijakan set-backend-service dalam kebijakan masuk. Ganti nilai sf-service-instance-name dengan fabric:/ApiApplication/WebApiService jika Anda sebelumnya menyebarkan layanan ujung belakang .NET, atau fabric:/EchoServerApplication/EchoServerService jika Anda menyebarkan layanan Java. backend-id mereferensikan sumber daya ujung belakang, dalam kasus ini sumber daya Microsoft.ApiManagement/service/backends yang ditentukan dalam templat apim.json. backend-id juga bisa mereferensikan sumber daya ujung belakang lainnya yang dibuat menggunakan API dari API Management. Untuk artikel ini, atur backend-id ke nilai parameter service_fabric_backend_name.

<policies>
  <inbound>
    <base/>
    <set-backend-service
        backend-id="servicefabric"
        sf-service-instance-name="service-name"
        sf-resolve-condition="@(context.LastError?.Reason == "BackendConnectionFailure")" />
  </inbound>
  <backend>
    <base/>
  </backend>
  <outbound>
    <base/>
  </outbound>
</policies>

Untuk set atribut kebijakan ujung belakang Service Fabric, lihat dokumentasi ujung belakang API Management

Mengatur parameter dan menyebarkan API Management

Isi parameter kosong berikut dalam apim.parameters.json untuk penyebaran Anda.

Parameter Nilai
apimInstanceName sf-apim
apimPublisherEmail myemail@contosos.com
apimSku Pengembang
serviceFabricCertificateName sfclustertutorialgroup320171031144217
certificatePassword q6D7nN%6ck@6
serviceFabricCertificateThumbprint C4C1E541AD512B8065280292A8BA6079C3F26F10
serviceFabricCertificate <string yang dikodekan base-64 encoded>
url_path /api/values
clusterHttpManagementEndpoint https://mysfcluster.southcentralus.cloudapp.azure.com:19080
inbound_policy <string XML>

certificatePassword and serviceFabricCertificateThumbprint harus cocok dengan sertifikat kluster yang digunakan untuk menyiapkan kluster.

serviceFabricCertificate adalah sertifikat sebagai string yang dikodekan base-64, yang dibuat menggunakan skrip berikut:

$bytes = [System.IO.File]::ReadAllBytes("C:\mycertificates\sfclustertutorialgroup220171109113527.pfx");
$b64 = [System.Convert]::ToBase64String($bytes);
[System.Io.File]::WriteAllText("C:\mycertificates\sfclustertutorialgroup220171109113527.txt", $b64);

In inbound_policy, ganti nilai sf-service-instance-name dengan fabric:/ApiApplication/WebApiService jika sebelumnya Anda menyebarkan layanan ujung belakang .NET, atau fabric:/EchoServerApplication/EchoServerService jika Anda menyebarkan layanan Java. backend-id mereferensikan sumber daya ujung belakang, dalam kasus ini sumber daya Microsoft.ApiManagement/service/backends yang ditentukan dalam templat apim.json. backend-id juga bisa mereferensikan sumber daya ujung belakang lainnya yang dibuat menggunakan API dari API Management. Untuk artikel ini, atur backend-id ke nilai parameter service_fabric_backend_name.

<policies>
  <inbound>
    <base/>
    <set-backend-service
        backend-id="servicefabric"
        sf-service-instance-name="service-name"
        sf-resolve-condition="@(context.LastError?.Reason == "BackendConnectionFailure")" />
  </inbound>
  <backend>
    <base/>
  </backend>
  <outbound>
    <base/>
  </outbound>
</policies>

Gunakan skrip berikut untuk menyebarkan templat Resource Manager dan file parameter untuk API Management:

$groupname = "sfclustertutorialgroup"
$clusterloc="southcentralus"
$templatepath="C:\clustertemplates"

New-AzResourceGroupDeployment -ResourceGroupName $groupname -TemplateFile "$templatepath\network-apim.json" -TemplateParameterFile "$templatepath\network-apim.parameters.json" -Verbose

New-AzResourceGroupDeployment -ResourceGroupName $groupname -TemplateFile "$templatepath\apim.json" -TemplateParameterFile "$templatepath\apim.parameters.json" -Verbose
ResourceGroupName="sfclustertutorialgroup"
az deployment group create --name ApiMgmtNetworkDeployment --resource-group $ResourceGroupName --template-file network-apim.json --parameters @network-apim.parameters.json

az deployment group create --name ApiMgmtDeployment --resource-group $ResourceGroupName --template-file apim.json --parameters @apim.parameters.json

Uji

Anda sekarang dapat mencoba mengirim permintaan ke layanan ujung belakang di Service Fabric melalui API Management langsung dari portal Microsoft Azure.

  1. Pada layanan API Management, pilih API.

  2. Dalam API Aplikasi Service Fabric yang Anda buat dalam langkah sebelumnya, pilih tab Uji lalu operasi Nilai.

  3. Klik tombol Kirim untuk mengirim permintaan pengujian ke layanan ujung belakang. Anda akan melihat respons HTTP yang mirip dengan:

    HTTP/1.1 200 OK
    
    Transfer-Encoding: chunked
    
    Content-Type: application/json; charset=utf-8
    
    Vary: Origin
    
    Ocp-Apim-Trace-Location: https://apimgmtstodhwklpry2xgkdj.blob.core.windows.net/apiinspectorcontainer/PWSQOq_FCDjGcaI1rdMn8w2-2?sv=2015-07-08&sr=b&sig=MhQhzk%2FEKzE5odlLXRjyVsgzltWGF8OkNzAKaf0B1P0%3D&se=2018-01-28T01%3A04%3A44Z&sp=r&traceId=9f8f1892121e445ea1ae4d2bc8449ce4
    
    Date: Sat, 27 Jan 2018 01:04:44 GMT
    
    
    ["value1", "value2"]
    

Membersihkan sumber daya

Kluster terdiri dari sumber daya Azure lainnya selain sumber daya kluster itu sendiri. Cara termudah untuk menghapus kluster dan seluruh sumber daya yang digunakannya adalah dengan menghapus grup sumber daya.

Masuk ke Azure dan pilih ID langganan yang ingin Anda hapus klusternya. Anda dapat mengetahui ID langganan Anda dengan cara masuk ke portal Microsoft Azure. Hapus grup sumber daya dan semua sumber daya kluster menggunakan perintah Remove-AzResourceGroup cmdlet.

$ResourceGroupName = "sfclustertutorialgroup"
Remove-AzResourceGroup -Name $ResourceGroupName -Force
ResourceGroupName="sfclustertutorialgroup"
az group delete --name $ResourceGroupName

Langkah berikutnya

Pelajari lebih lanjut cara menggunakan API Management.

Anda juga dapat menggunakan portal Microsoft Azure untuk membuat dan mengelola ujung belakang Service Fabric untuk API Management.