Layanan mikro tanpa server terintegrasi jaringan virtual

Azure API Management
Azure Cosmos DB
Azure Functions
Azure Key Vault
Azure Virtual Network

Dalam solusi Azure ini, Azure API Management (APIM) mengontrol akses ke API melalui satu titik akhir terkelola. Backend aplikasi terdiri dari dua aplikasi layanan mikro Azure Functions yang saling bergantung yang membuat dan mengelola rekaman pasien dan rekaman audit. APIM dan dua aplikasi fungsi saling mengakses melalui jaringan virtual yang terkunci.

Artikel ini dan proyek kode terkait menyaring contoh skenario ke komponen teknis utama, untuk berfungsi sebagai perancah untuk implementasi tertentu. Solusi ini mengotomatiskan semua penyebaran kode dan infrastruktur dengan Terraform, dan mencakup integrasi otomatis, unit, serta pengujian beban.

Sistem

Diagram berikut menunjukkan alur permintaan pembuatan rekaman pasien:

Diagram yang memperlihatkan layanan mikro terintegrasi jaringan virtual.

Unduh file Visio arsitektur ini.

Alur kerja

  1. Layanan dan klien luar membuat permintaan POST ke APIM, dengan bodi data yang mencakup informasi pasien.
  2. APIM memanggil fungsi CreatePatient di API Patient dengan informasi pasien yang diberikan.
  3. Fungsi CreatePatient di API Patient memanggil fungsi CreateAuditRecord di aplikasi fungsi API Audit untuk membuat rekaman audit.
  4. Fungsi Audit APICreateAuditRecord membuat rekaman audit di Azure Cosmos DB, dan mengembalikan respons keberhasilan ke fungsi API PatientCreatePatient.
  5. Fungsi CreatePatient membuat dokumen pasien di Azure Cosmos DB, dan mengembalikan respons keberhasilan ke APIM.
  6. Layanan dan klien luar menerima respons keberhsilan dari APIM.

Komponen

Solusinya menggunakan komponen berikut:

  • Azure API Management (APIM) adalah platform multicloud hibrid untuk mengelola API di semua lingkungan. Dalam solusi ini, APIM mengontrol akses internal dan pihak ketiga ke API Patient yang memungkinkan pembacaan dan /atau penulisan data. APIM memungkinkan integrasi yang mudah dengan mekanisme autentikasi yang berbeda.

  • Azure Functions adalah platform komputasi tanpa server yang menangani potongan kode kecil yang digerakkan oleh peristiwa. Infrastruktur cloud menyediakan pembaruan server yang diperlukan untuk menjalankan fungsi dalam skala besar. Solusi saat ini menggunakan serangkaian dua layanan mikro API Azure Functions yang membuat dan mengelola operasi untuk hasil pengujian pasien dan rekaman audit.

  • Azure Virtual Network menyediakan lingkungan aplikasi yang terisolasi dan sangat aman dengan membatasi akses jaringan ke alamat IP atau subnet tertentu. APIM dan Azure Functions mendukung pembatasan akses dan penyebaran di jaringan virtual. Solusi ini menggunakan integrasi jaringan virtual regional untuk menyebarkan kedua aplikasi fungsi di jaringan virtual yang sama di wilayah yang sama.

  • Azure Key Vault secara terpusat menyimpan, mengenkripsi, dan mengelola akses ke kunci, sertifikat, dan string koneksi. Solusi ini mempertahankan kunci host Azure Functions dan string koneksi Azure Cosmos DB di Key Vault yang hanya dapat diakses oleh identitas tertentu.

  • Azure Cosmos DB adalah database tanpa server yang dikelola sepenuhnya dengan penskalaan otomatis instan. Dalam solusi saat ini, kedua layanan mikro menyimpan data di Azure Cosmos DB, menggunakan driver Node.js MongoDB. Layanan tidak berbagi data, dan Anda dapat menyebarkan setiap layanan ke database independennya sendiri.

  • Application Insights, fitur Azure Monitor, melaporkan performa aplikasi, penggunaan, ketersediaan, dan perilaku untuk mendeteksi dan membantu mendiagnosis anomali.

    Kegagalan dalam arsitektur berbasis layanan mikro sering didistribusikan melalui berbagai komponen, dan tidak dapat didiagnosis dengan melihat layanan secara terpisah. Kemampuan untuk menghubungkan telemetri di seluruh komponen sangat penting untuk mendiagnosis masalah ini. Telemetri Application Insights memusatkan pengelogan di sepanjang seluruh alur permintaan untuk mendeteksi anomali performa. Telemetri berbagi ID operasi umum, memungkinkan korelasi di seluruh komponen.

    APIM dan runtime Azure Functions memiliki dukungan bawaan untuk Application Insights untuk menghasilkan dan menghubungkan berbagai macam telemetri, termasuk output aplikasi standar. Aplikasi fungsi menggunakan SDK Node.js Application Insights untuk melacak dependensi dan telemetri kustom lainnya secara manual.

    Untuk informasi selengkapnya tentang pelacakan telemetri terdistribusi dalam solusi ini, lihat Telemetri terdistribusi.

Alternatif

  • Solusi saat ini memerlukan kunci langganan untuk mengakses titik akhir APIM, tetapi Anda juga dapat menggunakan autentikasi Microsoft Entra.
  • Selain memerlukan kunci akses API, Anda dapat menggunakan autentikasi App Service bawaan Azure Functions untuk mengaktifkan otorisasi Microsoft Entra untuk identitas terkelola API.
  • Anda dapat mengganti titik akhir Azure Cosmos DB dalam solusi ini dengan layanan MongoDB lain tanpa mengubah kode.
  • Untuk keamanan Azure Cosmos DB tambahan, Anda dapat mengunci lalu lintas dari database Azure Cosmos DB ke aplikasi fungsi.
  • Komponen seperti Azure Cosmos DB dapat mengirim telemetri ke Azure Monitor, tempat komponen dapat berkorelasi dengan telemetri dari Application Insights.
  • Alih-alih Terraform, Anda dapat menggunakan portal Azure atau Azure CLI untuk tugas rotasi kunci Key Vault.
  • Alih-alih Terraform, Anda dapat menggunakan sistem seperti Azure DevOps atau GitHub Actions untuk mengotomatiskan penyebaran solusi.
  • Untuk ketersediaan yang lebih tinggi, solusi ini dapat disebarkan ke beberapa wilayah. Atur Azure Cosmos DB ke multi-master, gunakan dukungan multi-wilayah bawaan APIM, dan sebarkan aplikasi Azure Function ke wilayah yang dipasangkan.

Detail skenario

Artikel ini menjelaskan solusi terintegrasi untuk manajemen rekaman pasien. Organisasi kesehatan perlu menyimpan sejumlah besar data pengujian medis pasien yang sangat sensitif secara digital di cloud. Sistem internal dan pihak ketiga harus mampu membaca dan menulis data dengan aman melalui antarmuka pemrograman aplikasi (API). Semua interaksi dengan data harus direkam dalam daftar audit.

Kemungkinan kasus penggunaan

  • Akses data yang sangat sensitif dari titik akhir eksternal yang ditentukan.
  • Terapkan audit yang aman untuk operasi akses data.
  • Integrasikan aplikasi layanan mikro yang saling bergantung dengan akses dan keamanan umum.
  • Gunakan fitur keamanan jaringan virtual sambil memanfaatkan penghematan biaya tanpa server dan fleksibilitas.

Keuntungan

Beberapa manfaat dari aplikasi tanpa server seperti Azure Functions adalah penghematan biaya dan fleksibilitas untuk hanya menggunakan sumber daya komputasi yang diperlukan, daripada membayar di muka untuk server khusus. Solusi ini memungkinkan Azure Functions menggunakan pembatasan akses jaringan virtual untuk keamanan, tanpa menimbulkan biaya dan kelebihan operasional Azure App Service Environments (ASE) penuh.

APIM mengontrol akses internal dan pihak ketiga ke serangkaian layanan mikro API yang dibangun di Azure Functions. API Patient menyediakan operasi create, read, update, and delete (CRUD) untuk pasien dan hasil pengujian mereka. Aplikasi fungsi API Audit menyediakan operasi untuk membuat entri audit.

Setiap aplikasi fungsi menyimpan datanya dalam database Azure Cosmos DB independen. Azure Key Vault secara aman menyimpan semua kunci, rahasia, dan string koneksi yang terkait dengan aplikasi dan database. Telemetri Application Insights dan Azure Monitor memusatkan pengelogan di seluruh sistem.

Pertimbangan

Pertimbangan ini mengimplementasikan pilar Azure Well-Architected Framework, yang merupakan serangkaian tenet panduan yang dapat digunakan untuk meningkatkan kualitas beban kerja. Untuk informasi selengkapnya, lihat Microsoft Azure Well-Architected Framework.

Pertimbangkan aspek-aspek berikut saat menerapkan solusi ini.

Keamanan

Keamanan memberikan jaminan terhadap serangan yang disukai dan penyalahgunaan data dan sistem berharga Anda. Untuk informasi selengkapnya, lihat Gambaran Umum pilar keamanan.

Karena sensitivitas data, keamanan adalah hal yang terpenting dalam solusi ini. Solusi ini menggunakan beberapa mekanisme untuk melindungi data:

  • Manajemen gateway APIM
  • Pembatasan akses jaringan virtual
  • String kunci dan koneksi akses layanan
  • Manajemen string kunci dan koneksi di Key Vault
  • Rotasi kunci Key Vault
  • Identitas layanan terkelola

Anda dapat melindungi instans Azure API Management Anda dari serangan penolakan layanan terdistribusi (DDoS) menggunakan perlindungan Azure DDoS. Azure DDoS Protection menyediakan fitur mitigasi DDoS yang ditingkatkan untuk bertahan dari serangan DDoS volumetrik dan protokol.

Untuk detail selengkapnya tentang pola keamanan untuk solusi ini, lihat Pola keamanan untuk komunikasi antara API Management, aplikasi Functions, dan Azure Cosmos DB.

Manajemen gateway API

Sistem ini hanya dapat diakses secara publik melalui satu titik akhir APIM terkelola. Subnet APIM membatasi lalu lintas masuk ke alamat IP node gateway tertentu.

APIM memungkinkan integrasi yang mudah dengan mekanisme autentikasi yang berbeda. Solusi saat ini memerlukan kunci langganan, tetapi Anda juga dapat menggunakan ID Microsoft Entra untuk mengamankan titik akhir APIM tanpa perlu mengelola kunci langganan di APIM.

Jaringan virtual

Agar API dan fungsi tidak terekspos secara publik, Azure Virtual Network membatasi akses jaringan untuk API dan fungsi ke alamat IP atau subnet tertentu. API Management dan Azure Functions mendukung pembatasan akses dan penyebaran di jaringan virtual.

Aplikasi fungsi dapat membatasi akses subnet jaringan IPv4, IPv6, dan virtual. Secara default, aplikasi fungsi memungkinkan semua akses, tetapi setelah Anda menambahkan satu atau beberapa pembatasan alamat atau subnet, aplikasi tersebut menolak semua lalu lintas jaringan lainnya.

Dalam solusi ini, aplikasi fungsi memungkinkan interaksi hanya dalam jaringan virtualnya sendiri. Api Pasien memungkinkan panggilan dari subnet APIM dengan menambahkan subnet APIM ke daftar izin pembatasan aksesnya. API Audit memungkinkan komunikasi dengan PATIENT API dengan menambahkan subnet Patient API ke daftar izin pembatasan aksesnya. API menolak lalu lintas dari sumber lain.

Solusi ini menggunakan integrasi jaringan virtual regional untuk mengintegrasikan APIM dan aplikasi fungsi dengan jaringan virtual dan wilayah Azure yang sama. Ada beberapa pertimbangan penting untuk menggunakan integrasi jaringan virtual regional:

  • Anda perlu menggunakan SKU Azure Functions Premium untuk memiliki integrasi dan skalabilitas jaringan virtual regional.
  • Anda perlu menggunakan Pengembang APIM atau Premium SKU untuk mengaktifkan konektivitas VNET
  • Karena Anda menyebarkan aplikasi fungsi di subnet jaringan virtual, Anda mengonfigurasi pembatasan akses aplikasi fungsi untuk memungkinkan lalu lintas dari subnet lain di jaringan virtual.
  • Integrasi jaringan virtual regional hanya membatasi lalu lintas keluar dari Azure Function ke jaringan virtual. Lalu lintas masuk masih dirutekan di luar jaringan virtual, meskipun dibatasi oleh daftar akses aplikasi.

Hanya Lingkungan App Service yang menawarkan isolasi jaringan virtual tingkat jaringan lengkap. ASE dapat menuntut implementasi biaya dan upaya yang jauh lebih banyak daripada Azure Functions yang mendukung integrasi jaringan virtual regional. Penskalaan ASE juga kurang elastis.

Kunci akses

Anda dapat memanggil APIM dan aplikasi fungsi tanpa menggunakan kunci akses. Namun, menonaktifkan kunci akses bukanlah praktik keamanan yang baik, sehingga semua komponen dalam solusi ini memerlukan kunci untuk akses.

  • Mengakses APIM memerlukan kunci langganan, sehingga pengguna perlu menyertakan Ocp-Apim-Subscription-Key di header HTTP.
  • Semua fungsi dalam aplikasi fungsi API Patient memerlukan kunci akses API, sehingga APIM harus menyertakan x-functions-key dalam header HTTP saat memanggil API Patient.
  • Memanggil CreateAuditRecord di aplikasi fungsi API Audit memerlukan kunci akses API, sehingga API Patient perlu menyertakan x-functions-key di header HTTP saat memanggil fungsi CreateAuditRecord.
  • Kedua aplikasi Functions menggunakan Azure Cosmos DB sebagai penyimpanan data mereka, sehingga mereka harus menggunakan string koneksi untuk mengakses database Azure Cosmos DB.

Penyimpanan Key Vault

Meskipun dimungkinkan untuk menyimpan kunci akses dan string koneksi di pengaturan aplikasi, ini bukan praktik yang baik, karena siapa pun yang dapat mengakses aplikasi dapat melihat kunci dan string. Praktik terbaik, terutama untuk lingkungan produksi, adalah menyimpan kunci dan string di Azure Key Vault, serta menggunakan referensi Key Vault untuk memanggil aplikasi. Key Vault hanya memungkinkan akses ke identitas terkelola tertentu.

APIM menggunakan kebijakan masuk untuk menyimpan kunci host API Patient untuk meningkatkan performa. Untuk upaya selanjutnya, APIM mencari kunci dalam cache-nya terlebih dahulu.

  • APIM mengambil kunci host API Patient dari Key Vault, menyimpannya, dan memasukkannya ke header HTTP saat memanggil aplikasi fungsi API Patient.
  • Aplikasi fungsi API Patient mengambil kunci host API Audit dari Key Vault dan memasukkannya ke header HTTP saat memanggil aplikasi fungsi API Audit.
  • Runtime Azure Function memvalidasi kunci di header HTTP pada permintaan masuk.

Rotasi kunci

Memutar kunci Key Vault membantu membuat sistem lebih aman. Anda dapat secara otomatis memutar kunci secara berkala, atau Anda dapat memutar kunci secara manual atau sesuai permintaan jika terjadi kebocoran.

Rotasi kunci melibatkan pembaruan beberapa pengaturan:

  • Kunci host aplikasi fungsi itu sendiri
  • Rahasia di Key Vault yang menyimpan kunci host
  • Referensi Key Vault dalam pengaturan aplikasi dari aplikasi fungsi, untuk merujuk ke versi rahasia terbaru
  • Referensi Key Vault dalam kebijakan penembolokan APIM untuk API Patient

Solusi saat ini menggunakan Terraform untuk sebagian besar tugas rotasi kunci. Untuk informasi selengkapnya, lihat Pola rotasi kunci dengan Terraform.

Identitas Terkelola

Dalam solusi ini, APIM dan aplikasi fungsi menggunakan identitas layanan terkelola (MSI) yang ditetapkan sistem Azure untuk mengakses rahasia Key Vault. Key Vault memiliki kebijakan akses individual berikut untuk identitas terkelola layanan masing-masing:

  • APIM bisa mendapatkan kunci host aplikasi fungsi API Patient.
  • Aplikasi fungsi Api Pasien bisa mendapatkan kunci host API Audit dan string koneksi Azure Cosmos DB untuk penyimpanan datanya.
  • Aplikasi fungsi Api Audit bisa mendapatkan string koneksi Azure Cosmos DB untuk penyimpanan datanya.

Pengoptimalan biaya

Optimalisasi biaya adalah tentang mencari cara untuk mengurangi pengeluaran yang tidak perlu dan meningkatkan efisiensi operasional. Untuk informasi selengkapnya, lihat Gambaran umum pilar pengoptimalan biaya.

Salah satu manfaat utama dari aplikasi tanpa server seperti Azure Functions adalah penghematan biaya untuk hanya membayar konsumsi, daripada membayar di muka untuk server khusus. Dukungan jaringan virtual memerlukan paket Premium Azure Functions, dengan biaya tambahan. Azure Functions Premium memiliki dukungan untuk integrasi jaringan virtual regional, sambil tetap mendukung penskalaan dinamis. SKU Azure Functions Premium menyertakan integrasi jaringan virtual di APIM.

Untuk detail dan kalkulator harga, lihat Harga Azure Functions.

Fungsi juga dapat di-host di mesin virtual App Service. Hanya Lingkungan App Service (ASE) yang menawarkan isolasi jaringan virtual tingkat jaringan lengkap. ASE bisa jauh lebih mahal daripada paket Azure Functions yang mendukung integrasi jaringan virtual regional, dan penskalaan ASE kurang elastis.

Menyebarkan skenario ini

Kode sumber untuk solusi ini ada di Layanan Mikro Tanpa Server Terintegrasi Azure VNet.

Kode sumber TypeScript untuk PATIENTTest API dan API Audit ada di /src folder . Setiap sumber API menyertakan kontainer dev yang menginstal semua prasyarat, untuk membantu Anda memulai dengan cepat.

Kedua API memiliki rangkaian lengkap integrasi otomatis dan pengujian unit untuk membantu mencegah regresi saat Anda membuat perubahan. Proyek ini juga dikonfigurasi untuk linting dengan ESLint, untuk mempertahankan gaya kode dan membantu menjaga terhadap kesalahan yang tidak disengaja. Masing-masing file README layanan berisi informasi tentang cara menjalankan pengujian dan linting.

Penyebaran Terraform

Folder /env proyek kode mencakup skrip dan templat untuk penyebaran Terraform. Terraform menyebarkan APIM dan aplikasi fungsi, serta mengonfigurasinya untuk menggunakan instans Application Insights yang disebarkan. Terraform juga menyediakan semua sumber daya dan konfigurasi, termasuk penguncian jaringan dan pola keamanan kunci akses.

README penyebaran menjelaskan cara menyebarkan lingkungan Terraform di langganan Azure Anda sendiri. Folder /env juga menyertakan kontainer dev yang menginstal semua prasyarat untuk penyebaran Terraform.

Pengujian beban locust

Untuk mengukur performa API, Anda dapat menjalankan pengujian beban terhadap API dengan Pengujian beban locust yang disertakan. Locust adalah alat pengujian beban sumber terbuka, dan pengujian ditulis dalam Python. Anda dapat menjalankan pengujian beban secara lokal, atau dari jarak jauh di kluster Azure Kubernetes Service (AKS). Pengujian melakukan berbagai operasi terhadap titik akhir APIM, dan memverifikasi perilaku terhadap kriteria keberhasilan dan kegagalan.

Kontributor

Artikel ini dikelola oleh Microsoft. Ini awalnya ditulis oleh kontributor berikut.

Penulis utama:

  • Hannes Nel | Pemimpin Rekayasa Perangkat Lunak Utama

Untuk melihat profil LinkedIn non-publik, masuk ke LinkedIn.

Langkah berikutnya

Arsitektur berikut mencakup skenario API Management utama:

Artikel berikut mencakup skenario fungsi utama: