Düzenle

Aracılığıyla paylaş


Sanal ağ tümleşik sunucusuz mikro hizmetler

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

Bu Azure çözümünde Azure API Management (APIM), api'ye erişimi tek bir yönetilen uç nokta üzerinden denetler. Uygulama arka ucu, hasta kayıtlarını ve denetim kayıtlarını oluşturup yöneten iki birbirine bağımlı Azure İşlevleri mikro hizmet uygulamasından oluşur. APIM ve iki işlev uygulaması kilitli bir sanal ağ üzerinden birbirine erişiyor.

Bu makale ve ilişkili kod projesi , örnek senaryoyu belirli uygulamalar için yapı iskelesi işlevi görecek şekilde ana teknik bileşenlere kadar damıtır. Çözüm Terraform ile tüm kod ve altyapı dağıtımlarını otomatikleştirir ve otomatik tümleştirme, birim ve yük testi içerir.

Mimari

Aşağıdaki diyagramda hasta kaydı oluşturma isteği akışı gösterilmektedir:

Sanal ağ tümleşik mikro hizmetlerini gösteren diyagram.

Bu mimarinin bir Visio dosyasını indirin.

İş Akışı

  1. Dış hizmetler ve istemciler, hasta bilgilerini içeren bir veri gövdesiyle APIM'ye post isteğinde bulunur.
  2. APIM, verilen hasta bilgileriyle Hasta API'sindeki işlevi çağırırCreatePatient.
  3. CreatePatient Patient API'deki işlev, denetim kaydı oluşturmak için Denetim API'sinin işlev uygulamasındaki işlevi çağırırCreateAuditRecord.
  4. Denetim API'si CreateAuditRecord işlevi, Azure Cosmos DB'de denetim kaydını oluşturur ve Patient API CreatePatient işlevine başarılı bir yanıt döndürür.
  5. İşlev, CreatePatient Azure Cosmos DB'de hasta belgesini oluşturur ve APIM'ye başarılı bir yanıt döndürür.
  6. Dış hizmetler ve istemciler APIM'den başarı yanıtı alır.

Bileşenler

Çözüm aşağıdaki bileşenleri kullanır:

  • Azure API Management (APIM), tüm ortamlarda API'leri yönetmeye yönelik karma, çok bulutlu bir platformdur. Bu çözümde APIM, Hasta API'sine veri okuma ve/veya yazma izni veren iç ve üçüncü taraf erişimini denetler. APIM, farklı kimlik doğrulama mekanizmalarıyla kolay tümleştirme sağlar.

  • Azure İşlevleri, olay odaklı küçük kod parçalarını işleyen sunucusuz bir işlem platformudur. Bulut altyapısı, işlevleri büyük ölçekte çalıştırmak için gerekli güncelleştirilmiş sunucuları sağlar. Geçerli çözüm, hasta test sonuçları ve denetim kayıtları için işlemler oluşturup yöneten iki Azure İşlevleri API mikro hizmeti kümesi kullanır.

  • Azure Sanal Ağ, ağ erişimini belirli IP adreslerine veya alt ağlara kısıtlayarak yalıtılmış ve yüksek oranda güvenli bir uygulama ortamı sağlar. Hem APIM hem de Azure İşlevleri, sanal ağlarda erişim kısıtlaması ve dağıtımı destekler. Bu çözüm, her iki işlev uygulamasını da aynı bölgedeki aynı sanal ağa dağıtmak için bölgesel sanal ağ tümleştirmesini kullanır.

  • Azure Key Vault anahtarlara, sertifikalara ve bağlantı dizesi erişimi merkezi olarak depolar, şifreler ve yönetir. Bu çözüm, yalnızca belirtilen kimliklerin erişebileceği bir Key Vault'ta Azure İşlevleri konak anahtarlarını ve Azure Cosmos DB bağlantı dizesi tutar.

  • Azure Cosmos DB , anında ve otomatik ölçeklendirmeye sahip tam olarak yönetilen sunucusuz bir veritabanıdır. Geçerli çözümde her iki mikro hizmet de MongoDB Node.js sürücüsünü kullanarak verileri Azure Cosmos DB'de depolar. Hizmetler veri paylaşmaz ve her hizmeti kendi bağımsız veritabanına dağıtabilirsiniz.

  • Azure İzleyici'nin bir özelliği olan Application Insights, anomalileri algılamaya ve tanılamaya yardımcı olmak için uygulama performansı, kullanım, kullanılabilirlik ve davranış hakkında raporlar sunar.

    Mikro hizmet tabanlı mimarideki hatalar genellikle çeşitli bileşenlere dağıtılır ve hizmetlere yalıtılmış olarak bakılarak tanılanamaz. Telemetriyi bileşenler arasında ilişkilendirme olanağı, bu sorunları tanılamak için çok önemlidir. Application Insights telemetrisi, performans anomalilerini algılamak için tüm istek işlem hattı boyunca günlüğe kaydetmeyi merkezileştirir. Telemetri ortak bir işlem kimliğini paylaşarak bileşenler arasında bağıntıya olanak tanır.

    APIM ve Azure İşlevleri çalışma zamanı, standart uygulama çıktısı da dahil olmak üzere çok çeşitli telemetri verileri oluşturmak ve ilişkilendirmek için Application Insights için yerleşik desteğe sahiptir. İşlev uygulamaları bağımlılıkları ve diğer özel telemetri verilerini el ile izlemek için Application Insights Node.js SDK'sını kullanır.

    Bu çözümdeki dağıtılmış telemetri izleme hakkında daha fazla bilgi için bkz . Dağıtılmış telemetri.

Alternatifler

  • Geçerli çözüm, APIM uç noktasına erişmek için bir abonelik anahtarı gerektirir, ancak Microsoft Entra kimlik doğrulamasını da kullanabilirsiniz.
  • API erişim anahtarları gerektirmeye ek olarak, API'lerin yönetilen kimlikleri için Microsoft Entra yetkilendirmesini etkinleştirmek üzere Azure İşlevleri yerleşik App Service kimlik doğrulamasını kullanabilirsiniz.
  • Kodu değiştirmeden bu çözümdeki Azure Cosmos DB uç noktasını başka bir MongoDB hizmetiyle değiştirebilirsiniz.
  • Ek Azure Cosmos DB güvenliği için Azure Cosmos DB veritabanlarından işlev uygulamalarına trafiği kilitleyebilirsiniz.
  • Azure Cosmos DB gibi bileşenler Azure İzleyici'ye telemetri gönderebilir ve burada Application Insights telemetrisiyle ilişkilendirilebilir.
  • Terraform yerine Azure portalını veya Key Vault için Azure CLI anahtar döndürme görevlerini kullanabilirsiniz.
  • Çözüm dağıtımını otomatikleştirmek için Terraform yerine Azure DevOps veya GitHub Actions gibi bir sistem kullanabilirsiniz.
  • Daha yüksek kullanılabilirlik için bu çözüm birden çok bölgeye dağıtılabilir. Azure Cosmos DB'yi çoklu ana şablon olarak ayarlayın, APIM'nin yerleşik çok bölgeli desteğini kullanın ve Azure İşlevi uygulamalarını eşleştirilmiş bölgelere dağıtın.

Senaryo ayrıntıları

Bu makalede hasta kayıtları yönetimi için tümleşik bir çözüm açıklanmaktadır. Bir sağlık kuruluşunun büyük miktarlarda yüksek oranda hassas hasta tıbbi test verilerini bulutta dijital olarak depolaması gerekir. İç ve üçüncü taraf sistemlerin, bir uygulama programlama arabirimi (API) aracılığıyla verileri güvenli bir şekilde okuyabilmesi ve yazabilmesi gerekir. Verilerle yapılan tüm etkileşimler bir denetim kayıt defterine kaydedilmelidir.

Olası kullanım örnekleri

  • Belirlenen dış uç noktalardan yüksek oranda hassas verilere erişin.
  • Veri erişim işlemleri için güvenli denetim uygulayın.
  • Birbirine bağlı mikro hizmetler uygulamalarını ortak erişim ve güvenlikle tümleştirin.
  • Sunucusuz maliyet tasarrufu ve esnekliğinden yararlanırken sanal ağ güvenlik özelliklerini kullanın.

Sosyal haklar

Azure İşlevleri gibi sunucusuz uygulamaların bazı avantajları, ayrılmış sunucular için ön ödeme yerine yalnızca gerekli işlem kaynaklarını kullanmanın maliyet tasarrufu ve esnekliğidir. Bu çözüm, Azure İşlevleri tam Azure Uygulaması Hizmet Ortamlarının (ASE) maliyetine ve işletimsel yüküne neden olmadan güvenlik için sanal ağ erişim kısıtlamalarını kullanmasına olanak tanır.

APIM, Azure İşlevleri üzerinde oluşturulan bir DIZI API mikro hizmeti için iç ve üçüncü taraf erişimini denetler. Hasta API'sinde hastalar ve test sonuçları için oluşturma, okuma, güncelleştirme ve silme (CRUD) işlemleri sağlanır. Denetim API'si işlev uygulaması, denetim girdileri oluşturmaya yönelik işlemler sağlar.

Her işlev uygulaması, verilerini bağımsız bir Azure Cosmos DB veritabanında depolar. Azure Key Vault, uygulamalar ve veritabanlarıyla ilişkili tüm anahtarları, gizli dizileri ve bağlantı dizesi güvenli bir şekilde tutar. Application Insights telemetrisi ve Azure İzleyici, günlüğe kaydetmeyi sistem genelinde merkezileştirir.

Dikkat edilmesi gereken noktalar

Bu önemli noktalar, bir iş yükünün kalitesini artırmak için kullanılabilecek bir dizi yol gösteren ilke olan Azure İyi Tasarlanmış Çerçeve'nin yapı taşlarını uygular. Daha fazla bilgi için bkz . Microsoft Azure İyi Tasarlanmış Çerçeve.

Bu çözümü uygularken aşağıdaki yönleri göz önünde bulundurun.

Güvenlik

Güvenlik, kasıtlı saldırılara ve değerli verilerinizin ve sistemlerinizin kötüye kullanılmasına karşı güvence sağlar. Daha fazla bilgi için bkz . Güvenlik sütununa genel bakış.

Verilerin duyarlılığı nedeniyle bu çözümde güvenlik çok önemlidir. Çözüm, verileri korumak için çeşitli mekanizmalar kullanır:

  • APIM ağ geçidi yönetimi
  • Sanal ağ erişim kısıtlamaları
  • Hizmet erişim anahtarları ve bağlantı dizeleri
  • Key Vault'ta anahtar ve bağlantı dizesi yönetimi
  • Key Vault anahtar döndürme
  • Yönetilen hizmet kimlikleri

Azure API Management örneğinizi, Azure DDoS korumasını kullanarak dağıtılmış hizmet reddi (DDoS) saldırılarına karşı koruyabilirsiniz. Azure DDoS Koruması, birim ve protokol DDoS saldırılarına karşı savunmak için gelişmiş DDoS azaltma özellikleri sağlar.

Bu çözümün güvenlik düzeni hakkında daha fazla ayrıntı için bkz . API Management, İşlevler uygulamaları ve Azure Cosmos DB arasındaki iletişim için güvenlik düzeni.

API ağ geçidi yönetimi

Sisteme yalnızca tek yönetilen APIM uç noktası üzerinden genel erişim sağlanır. APIM alt ağı, gelen trafiği belirtilen ağ geçidi düğümü IP adresleriyle kısıtlar.

APIM, farklı kimlik doğrulama mekanizmalarıyla kolay tümleştirme sağlar. Geçerli çözüm bir abonelik anahtarı gerektirir, ancak APIM'de abonelik anahtarlarını yönetmeye gerek kalmadan APIM uç noktasının güvenliğini sağlamak için Microsoft Entra Id'yi de kullanabilirsiniz.

Sanal ağ

Azure Sanal Ağ, API'leri ve işlevleri genel kullanıma açmaktan kaçınmak için API'ler ve işlevler için ağ erişimini belirli IP adreslerine veya alt ağlara kısıtlar. Hem API Management hem de Azure İşlevleri sanal ağlarda erişim kısıtlama ve dağıtım desteği sağlar.

İşlev uygulamaları IPv4, IPv6 ve sanal ağ alt ağı erişimini kısıtlayabilir. Varsayılan olarak, bir işlev uygulaması tüm erişime izin verir, ancak bir veya daha fazla adres veya alt ağ kısıtlaması eklediğinizde, uygulama diğer tüm ağ trafiğini reddeder.

Bu çözümde işlev uygulamaları yalnızca kendi sanal ağlarında etkileşimlere izin verir. Patient API, APIM alt ağından gelen çağrılara izin vermek için APIM alt ağından erişim kısıtlaması izin verilenler listesine eklemeye olanak tanır. Denetim API'si, Hasta API'sini erişim kısıtlama izin verilenler listesine ekleyerek Hasta API'siyle iletişime izin verir. API'ler diğer kaynaklardan gelen trafiği reddeder.

Çözüm, APIM ve işlev uygulamalarını aynı sanal ağ ve Azure bölgesi ile tümleştirmek için bölgesel sanal ağ tümleştirmesini kullanır. Bölgesel sanal ağ tümleştirmesini kullanmak için dikkat edilmesi gereken birkaç önemli nokta vardır:

  • Hem bölgesel sanal ağ tümleştirmesine hem de ölçeklenebilirliğe sahip olmak için Azure İşlevleri Premium SKU'yu kullanmanız gerekir.
  • Sanal ağ bağlantısını etkinleştirmek için APIM Geliştiricisi'ni veya Premium SKU'yu kullanmanız gerekir
  • İşlev uygulamalarını sanal ağın bir alt ağına dağıttığınızdan, işlev uygulamalarının erişim kısıtlamalarını sanal ağdaki diğer alt ağlardan gelen trafiğe izin verecek şekilde yapılandırabilirsiniz.
  • Bölgesel sanal ağ tümleştirmesi yalnızca Azure İşlevi'nden sanal ağa giden trafiği sınırlar. Gelen trafik, uygulamanın erişim listesiyle sınırlı olsa da sanal ağın dışına yönlendirilir.

Yalnızca App Service Ortamı tam ağ düzeyinde sanal ağ yalıtımı sunar. ASE'ler, bölgesel sanal ağ tümleştirmesini destekleyen Azure İşlevleri çok daha fazla harcama ve çaba gerektirebilir. ASE ölçeklendirmesi de daha az esnektir.

Access keys

Erişim anahtarlarını kullanmadan APIM ve işlev uygulamalarını çağırabilirsiniz. Ancak, erişim anahtarlarını devre dışı bırakmak iyi bir güvenlik uygulaması olmadığından, bu çözümdeki tüm bileşenler erişim için anahtarlar gerektirir.

  • APIM'ye erişmek için bir abonelik anahtarı gerekir, bu nedenle kullanıcıların HTTP üst bilgilerine eklenmesi Ocp-Apim-Subscription-Key gerekir.
  • Patient API işlev uygulamasındaki tüm işlevler bir API erişim anahtarı gerektirir, bu nedenle HASTA API'sini çağırırken APIM'nin HTTP üst bilgisine eklenmesi x-functions-key gerekir.
  • Denetim API'sini işlev uygulamasında çağırmak CreateAuditRecord için bir API erişim anahtarı gerekir, bu nedenle patient API'sinin işlevi çağırırken HTTP üst bilgisine CreateAuditRecord eklenmesi x-functions-key gerekir.
  • her iki İşlev uygulaması da veri deposu olarak Azure Cosmos DB'yi kullandığından Azure Cosmos DB veritabanlarına erişmek için bağlantı dizesi'leri kullanmaları gerekir.

Key Vault depolama

Uygulama ayarlarında erişim anahtarlarını ve bağlantı dizesi tutmak mümkün olsa da, uygulamaya erişebilen herkes anahtarları ve dizeleri görebildiğinden iyi bir uygulama değildir. Özellikle üretim ortamları için en iyi yöntem, anahtarları ve dizeleri Azure Key Vault'ta tutmak ve uygulamaları çağırmak için Key Vault başvurularını kullanmaktır. Key Vault yalnızca belirtilen yönetilen kimliklere erişim sağlar.

APIM, gelişmiş performans için Patient API konak anahtarını önbelleğe almak için bir gelen ilkesi kullanır. Sonraki girişimler için APIM önce önbelleğindeki anahtarı arar.

  • APIM, Patient API konak anahtarını Key Vault'tan alır, önbelleğe alır ve Patient API işlev uygulamasını çağırırken bir HTTP üst bilgisine yerleştirir.
  • Patient API işlev uygulaması, Denetim API'sinin konak anahtarını Key Vault'tan alır ve Denetim API'si işlev uygulamasını çağırırken bir HTTP üst bilgisine yerleştirir.
  • Azure İşlevi çalışma zamanı, gelen isteklerde HTTP üst bilgilerindeki anahtarları doğrular.

Anahtar döndürme

Key Vault anahtarlarını döndürmek sistemin daha güvenli olmasını sağlar. Anahtarları belirli aralıklarla otomatik olarak döndürebilir veya sızıntı durumunda anahtarları el ile veya isteğe bağlı olarak döndürebilirsiniz.

Tuş döndürme, çeşitli ayarların güncelleştirilmesini içerir:

  • İşlev uygulaması ana bilgisayar anahtarının kendisi
  • Key Vault'ta konak anahtarını depolayan gizli dizi
  • en son gizli dizi sürümüne başvurmak için işlev uygulaması ayarlarındaki Key Vault başvurusu
  • Hasta API'sinin APIM önbelleğe alma ilkesindeki Key Vault başvurusu

Geçerli çözüm, anahtar döndürme görevlerinin çoğu için Terraform kullanır. Daha fazla bilgi için bkz . Terraform ile anahtar döndürme düzeni.

Yönetilen kimlikler

Bu çözümde APIM ve işlev uygulamaları, Key Vault gizli dizilerine erişmek için Azure sistem tarafından atanan yönetilen hizmet kimliklerini (MSI) kullanır. Key Vault, her hizmetin yönetilen kimliği için aşağıdaki bireysel erişim ilkelerine sahiptir:

  • APIM, Patient API işlev uygulamasının konak anahtarını alabilir.
  • Patient API işlev uygulaması Denetim API'sinin konak anahtarını ve veri deposu için Azure Cosmos DB bağlantı dizesi alabilir.
  • Denetim API'si işlev uygulaması, veri deposu için Azure Cosmos DB bağlantı dizesi alabilir.

Maliyet iyileştirme

Maliyet iyileştirmesi, gereksiz giderleri azaltmanın ve operasyonel verimlilikleri iyileştirmenin yollarını aramaktır. Daha fazla bilgi için bkz . Maliyet iyileştirme sütununa genel bakış.

Azure İşlevleri gibi sunucusuz uygulamaların birincil avantajlarından biri, ayrılmış sunucular için ön ödeme yerine yalnızca tüketim için ödeme yapmanın maliyet tasarrufudur. Sanal ağ desteği için ek ücret karşılığında Azure İşlevleri Premium planı gerekir. Azure İşlevleri Premium, bölgesel sanal ağ tümleştirme desteğine sahipken dinamik ölçeklendirmeyi desteklemeye devam ediyor. Azure İşlevleri Premium SKU'su APIM'de sanal ağ tümleştirmesi içerir.

Ayrıntılar ve fiyatlandırma hesaplayıcısı için bkz. Azure İşlevleri fiyatlandırma.

İşlevler App Service sanal makinelerinde de barındırılabilir. Yalnızca App Service Ortamı (ASE) tam ağ düzeyinde sanal ağ yalıtımı sunar. ASE'ler bölgesel sanal ağ tümleştirmesini destekleyen bir Azure İşlevleri planından çok daha pahalı olabilir ve ASE ölçeklendirmesi daha az esnektir.

Bu senaryoyu dağıtın

Bu çözümün kaynak kodu Azure Sanal Ağ Tümleşik Sunucusuz Mikro Hizmetler'dedir.

PatientTest API'sinin ve Denetim API'sinin TypeScript kaynak kodu klasördedir/src. Her API'nin kaynağı, hızlı bir şekilde çalışmaya başlamanıza yardımcı olmak için tüm önkoşulların yüklü olduğu bir geliştirme kapsayıcısı içerir.

Her iki API'de de değişiklik yaptığınızda regresyonları önlemeye yardımcı olmak için tam kapsamlı otomatik tümleştirme ve birim testleri bulunur. Proje ayrıca kod stillerini korumak ve istenmeyen hatalara karşı korunmaya yardımcı olmak için ESLint ile lint için yapılandırılmıştır. Hizmetlerin ilgili BENIOKU dosyaları, testleri ve linti çalıştırma hakkında bilgi içerir.

Terraform dağıtımı

Kod projesinin /env klasörü Terraform dağıtımı için betikler ve şablonlar içerir. Terraform, APIM ve işlev uygulamalarını dağıtır ve dağıtılan Application Insights örneğini kullanacak şekilde yapılandırılır. Terraform ayrıca ağ kilitleme ve erişim anahtarı güvenlik düzeni de dahil olmak üzere tüm kaynakları ve yapılandırmaları sağlar.

README dağıtımında Terraform ortamının kendi Azure aboneliğinizde nasıl dağıtılacağı açıklanır. Klasör /env ayrıca Terraform dağıtımı için tüm önkoşulların yüklü olduğu bir geliştirme kapsayıcısı içerir.

Çekirge yük testi

API performansını ölçmek için, dahil edilen Locust yük testleriyle API'lerde yük testi çalıştırabilirsiniz. Locust bir açık kaynak yük testi aracıdır ve testler Python'da yazılır. Yük testlerini yerel olarak veya bir Azure Kubernetes Service (AKS) kümesinde uzaktan çalıştırabilirsiniz. Testler APIM uç noktasına karşı çeşitli işlemler gerçekleştirir ve başarı ve başarısızlık ölçütlerine göre davranışları doğrular.

Katkıda Bulunanlar

Bu makale Microsoft tarafından yönetilir. Başlangıçta aşağıdaki katkıda bulunanlar tarafından yazılmıştır.

Asıl yazar:

  • Hannes Nel | Baş Yazılım Mühendisliği Lideri

Genel olmayan LinkedIn profillerini görmek için LinkedIn'de oturum açın.

Sonraki adımlar

Aşağıdaki mimariler temel API Management senaryolarını kapsar:

Aşağıdaki makaleler temel işlev senaryolarını kapsar: