.NET Aspire ile Cloud Native Uygulama Geliştirme – Bölüm 1
  1. Anasayfa
  2. Yazılım

.NET Aspire ile Cloud Native Uygulama Geliştirme – Bölüm 1

0

.NET 8 ile gelen yeniliklerden ve en çok ilgimi çeken özelliklerden birisi olan .NET Aspire; cloud native uygulama geliştirmede yazılım geliştiricilere büyük avantaj saylayacak bir özellik olarak karşımıza çıkıyor. Peki tam olarak .NET Aspire nedir ve ne işimize yarayacak?

Cloud native uygulama geliştirme denildiğinde aklımıza hemen Docker ve container teknolojisi geliyor, peşinden de haliyle Kubernetes ve diğer çokça bilinen open source projeler. Bu projeleri ve teknolojileri kullanırken daha uygulamaları geliştirme aşamasında da dikkat edilmesi gereken özellikler var. Bu konuyla ilgili daha önce gözünüzden kaçtıysa eğer cloud native uygulama geliştirme konusunda dikkat etmeniz gereken 12 faktörü incelemenizi tavsiye ediyorum. Bu 12 faktörün üzerine 3 tane daha eklendi ve 15 faktör olarak güncellendi. 12 faktörün hepsine tek tek girmek yerine sonradan eklenen 3 faktörden kısaca bahsetmek istiyorum:

  1. API First: Her şey bir servis olmalı.
  2. Telemetry: Sisteminizi tasarlarken on-prem’de olduğu gibi bütün sistem loglarına erişemeyeceğinizi ve sisteminizin gerekli olabilecek her türlü log verisini üretebilmesi ve bunların takip edilebilmesini sağlamanız gerekiyor.
  3. Authentication/Authorization: En baştan sisteme entegre edilmeli, bulut servis sağlayıcıların bize sunduğu identity hizmetlerini kullanmayı tercih etmelisiniz.

Cloud native uygulama geliştirme aşamasında özellikle de telemetry ve service discovery konuları zamanımızı alıyordu, .NET Aspire ile birlikte bu konuda da Microsoft bize büyük bir avantaj sağlamış oldu. .NET Aspire’ı kullanmaya başlamadan önce .NET 8 SDK kurmak dışında yapmanız gereken küçük bir işlem daha var. Eğer Visual Studio kullanıyorsanız, .NET Aspire desteği bu yazıyı yazdığım zaman henüz preview aşamasında olan 17.9 versiyonu ile birlikte geliyor. Ancak benim gibi CLI ve VS Code tercih ediyorsanız .NET CLI üzerinden dotnet workload install aspire komutu ile kurabilirsiniz. Öncesinde dotnet workload update komutunu çalıştırmanız gerekebilir. Yükleme sonrasında dotnet new list komutunu çalıştırdığınızda ilk 2 sırada .NET Aspire ve .NET Aspire Starter Application‘ı görebilirsiniz.

Resim-1

Genellikle sunum ve makalelerde starter application üzerinden örnekler tercih ediliyor, ama ben biraz daha farklı olarak mevcut bir uygulamaya .NET Aspire desteği nasıl eklenir onu göstermek istiyorum. Bu nedenle de ilk olarak Microsoft’un meşhur eShop örneğinin lite versiyonunu kullanacağım. Aşağıdaki komut ile eShopLite’ın kaynak kodlarını bilgisayarınıza indirebiliriniz.

git clone https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops.git eShopLite

VS Code üzerinde C# Dev Kit eklentisini yüklediyseniz Visual Studio’dan alışık olduğumuz Solution Explorer’ı kullanabiliyorsunuz. Resim-2‘de de göreceğiniz gibi eShopLite solution’ında 3 tane proje var: DataEntities, Products ve Store.

Resim-2

Products projesi aslında bir web api ve store projesi de bu web api’yi kullanarak ürünleri listeleyen basit bir blazor uygulaması. Burada Products projesini backend olarak, Store projesini de frontend olarak da tanımlayabiliriz.

Resim-3

Şimdi bu projeye .NET Aspire ekleyelim. Bunu henüz preview’da olan Visual Studio üzerinden değil, .NET CLI ve VS Code kullanarak yapmak istiyorum. İlk olarak proje klasöründe dotnet new aspire -o Aspire komutu ile .NET Aspire ile ilgili proje dosyalarını ekliyorum.

Resim-4

Aspire klasörü içerisinde Aspire.AppHost ve Aspire.ServiceDefaults adında 2 tane proje eklendiğini göreceksiniz. AppHost projesi orchestration işini üstlenecekken, ServiceDefaults ise cloud native uygulamalarda olması gereken özellikleri kolaylıkla projemize dahil etmemizi sağlayacak extension methodları içeren bir proje olarak özetlenebilir.

Resim-5

Sonrasında Aspire klasöründeki Aspire.sln dosyasını silip, bu 2 projeyi mevcut solution’a ekliyorum. Visual Studio’da alışık olduğunuz gibi solution’a sağ tıklayıp Add Existing Project… komutunu seçerek ekleyebilirsiniz.

Resim-6

Şimdi sırada proje referanslarını ayarlama işi var. Tahmin edeceğiniz gibi, extension methodları içeren ServiceDefaults’u Products ve Store projelerine, Products ve Store projelerini de orchestration işini yapacak AppHost projesine referans olarak ekliyorum. Son durumda referanslar aşağıda göreceğiniz gibi olacak:

Resim-7

Resim-8

Resim-9

Sırada küçük bir kodlama işimiz var. Öncelikle Store ve Products projelerinde Program.cs içerisinde Resim-10 ve Resim-11‘de göreceğiniz gibi tek satırlık bir kod ekliyorum: builder.AddServiceDefaults()

Resim-10

Resim-11

Peki nedir bu service defaults? Bu method ile open telemetry, health check, service discovery, resilience handler gibi cloud native uygulamalar için olması gereken özellikleri projemize tek bir satır kod ile ekleyebiliyoruz (Resim-12).

Resim-12

Sırada orchestrator var. Aspire.AppHost projesindeki Program.cs’e ise hangi projelerin orchestration işini yapacağını belirtmemiz gerekiyor. Burada ile olarak builder.AddProject methodu ile Products projesini backend adını vererek tanımlıyorum. Buradaki isim backend olmak zorunda değil. Sonra da yine aynı method ile Store projesini tanımlıyorum, ona da frontend adını verdim. Ek olarak, frontend projesinini backend projesine bağımlılığı olduğundan onu da WithReference methodu ile referans olarak tanımlıyorum. Burada service discovery için yol göstermiş oldum diyebilirim.

Resim-13

Artık .NET Aspire’ın bize neler sunduğunu görmeye başlayabiliriz. Products ve Store projelerini ayrı ayrı çalıştırmak yerine artık sadece AppHost projesini çalıştırmam yeterli. Bunun için tercihinize göre terminal üzerinden dotnet run ya da kullandığınız IDE üzerinden AppHost projesini çalıştırmanız yeterli olacaktır. Burada göreceğiniz tek fark, AppHost’un çalıştığı port numarası olacak. AppHost bize Aspire.Dashboard.DashboardWebApplication adında bir dashboard uygulaması sunuyor.

Resim-14

Dashboard’u açtığımızda ise ana sayfa olan Projects altında tanımladığımız projeleri, AppHost üzerinde tanımlarken verdiğimiz isimlerle bir liste halinde görebiliyoruz. Burada Status, Start Time, Process Id, Source Location bilgileri dışında Endpoints, Environment variables ve Logs için de linkler mevcut.

Resim-14

Endpoints kolonunda yer alan frontend linkine tıklayıp projeyi açıyorum ve Products linkine tıklıyorum. Burada bir hata alacaksınız. Bu hatadan sonra tekrar dashboard’a gittiğinizde ise frontend için State kolonunda kırmızı bir 1 göreceksiniz. Bu bize burada 1 adet sorun olduğunu belirtiyor.

Resim-15

Bu ikona tıkladığımda ise Structured Logs sayfası açılıyor. Burada hata ile ilgili bilgileri, Trace ve Details linklerini görebiliyorum.

Resim-16

Details’a tıkladığımda ise hata ile ilgili biraz daha detaylı bilgi alabiliyorum.

Resim-17

Benzer şekilde Trace linkine giderek de trace log’larını görebiliyorum.

Resim-18

Ben daha detay görmek istiyorum bunlar sorunu tespit etmem için yeterli olmadı diyerek, sol menüdeki Logs altında project seçeneğinden Project Logs sayfasına gidip, buradan frontend projesini seçiyorum. Detaylı olarak incelerken de 5200 portu için connection refused aldığım kısmı yakalıyorum.

Resim-19

Products endpoint’i için 5200 portu Store projesinde appsettings.json altında tanımlanmış, ancak çalışan portun 5228 olduğunu Aspire Dashboard’un anasayfasında görmüştüm. Bu tanımları buna göre düzenleyip projeyi tekrar çalıştırıyorum.

Resim-20

Artık projenin düzgün bir şekilde çalıştığını görebiliyorum.

Resim-21

Son olarak sol menüdeki Metrics seçeceği ile projelerdeki farklı metric değerlerini de inceleyebilirsiniz. Local ortam için çok bir şey ifade etmeyebilir diye düşünebilirsiniz ancak eğer bir sorun varsa ve local ortamda da görebiliyorsak, deployment sonrası bu sorunu farketmek için çok geç olabilir.

Resim-22

Aspire Dashboard’u sadece local development için kullanabilirsiniz, ancak .NET Aspire henüz preview aşamasında olduğu için ileride bir değişiklik olur mu bilemiyorum. Production ortamı için zaten bir çok tool olsa da eğer dashboard’u deploy edebilseydik oldukça kullanışlı olabilirdi.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar

www.mshowto.org 

https://learn.microsoft.com/en-gb/dotnet/aspire/

https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops

TAGs: .NET, .NET 8, .NET Aspire, Cloud Native, Cloud Native Development, Development, VS Code, Visual Studio

 

Bu İçeriğe Tepkin Ne Oldu?
  • 4
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir