Geçen yıl bir bankanın çekirdek bankacılık sistemleri ekibiyle masada oturduk. 22 Spring Boot mikroservis, on-prem’de WebLogic üzerinde koşuyor, monolit veritabanına bağlı. Hedef: 6 ay içinde buluta. İlk akla gelen AKS oldu çünkü herkes Kubernetes diyor. Üç haftalık POC sonunda farklı bir karar çıktı: Azure Spring Apps. Sebep: ekibin Kubernetes bilgisi yoktu, öğrenme süresi proje takvimini patlatıyordu.
Bu yazıda Spring Apps’in ne olduğunu, ne zaman doğru tercih olduğunu, ne zaman AKS’in daha mantıklı olduğunu ve sahada gözlemlediğim üç tipik senaryoyu anlatıyorum. Pazarlama dilini bir kenara bırakıp gerçek tradeoff’lara odaklanıyorum.
Spring Apps tam olarak nedir?
Tek cümleyle: Spring Boot uygulamaları için tasarlanmış, fully-managed bir PaaS. Pivotal/VMware ile Microsoft’un birlikte geliştirdiği Pivotal Cloud Foundry temelinde başladı, sonra Microsoft’un kendi platformuna evrildi.
Pratikte ne yapıyor:
- JAR dosyanızı atıyorsunuz, çalışıyor — image build veya Dockerfile yok
- Spring Cloud bileşenleri (Eureka, Config Server, Spring Cloud Gateway) hazır geliyor
- Otomatik scaling, blue-green deployment, log aggregation built-in
- Application Insights ile distributed tracing kutudan çıkar gibi
- Java agent injection (APM) servis tarafında, kod değişikliği yok
Saha kuralı: Spring Apps, AKS değil. AKS “size container platformu veriyorum, sen yönet” der. Spring Apps “siz Spring Boot kodu yazın, geri kalanı bana bırakın” der. İkisi farklı abstraction seviyesinde, farklı ekipler için.
Üç tier, üç farklı kullanım
| Tier | Aylık başlangıç (TL) | Tipik senaryo | Sınırlamalar |
|---|---|---|---|
| Basic | ~3.000 | Dev/test, prototip | Production için önerilmez, sınırlı SLA |
| Standard | ~12.000 | Orta-büyük production, çoklu mikroservis | VNet entegrasyon ekstra yapı gerektirir |
| Enterprise | ~45.000+ | Büyük kurumsal, VMware Tanzu komponentleri | Pahalı, sadece kritik kurumsal senaryolarda |
Türkiye’de gördüğüm kullanım: Standard tier en yaygın. Enterprise sadece banka, sigorta, telekom gibi büyük kurumlarda. Basic prototip dışında nadiren.
Hızlı başlangıç: Bir Spring Boot uygulaması nasıl deploy edilir?
# 1. Azure CLI eklentisi
az extension add --name spring
# 2. Servis oluştur (Standard tier)
az spring create
--name asa-banking-prod
--resource-group rg-banking
--location 'westeurope'
--sku Standard
# 3. App tanımla
az spring app create
--service asa-banking-prod
--name account-service
--instance-count 2
--memory 2Gi
--assign-endpoint true
# 4. JAR'ı deploy et
az spring app deploy
--service asa-banking-prod
--name account-service
--artifact-path ./target/account-service-1.0.jar
# Servis endpoint URL'si döner: https://asa-banking-prod-account-service.azuremicroservices.io
Toplam süre: 12-15 dakika. AKS ile aynı işi yapsanız: cluster, ingress controller, cert-manager, hpa, deployment yaml, service yaml, configmap, secret — en az yarım gün.
Spring Cloud bileşenleri nasıl çalışıyor?
Spring Apps platform tarafında üç servisi otomatik veriyor:
Service Registry (Eureka)
Mikroservisler birbirini isimle bulur. “order-service” çağrısı yaptığınızda discovery otomatik. Eureka’yı kendiniz kurmaya, korumaya, scale etmeye gerek yok.
Config Server
Tüm uygulamaların konfigürasyonu Git repo’sunda. Her servis startup’ta config’i çeker. Çevre bazlı (dev/staging/prod) ayrım otomatik.
az spring config-server git set
--name asa-banking-prod
--uri https://github.com/cloudspark/banking-config
--label main
Spring Cloud Gateway (Enterprise tier)
Routing, rate limit, JWT validation tek bir yerde. Enterprise tier’da gelir; Standard tier’da harici (Azure API Management) ile çözülür.
Spring Apps vs AKS: Karar matrisi
| Kriter | Spring Apps | AKS |
|---|---|---|
| Setup süresi | 15 dakika | 2-3 gün (üretim için) |
| Ekip K8s bilgisi gerekir mi? | Hayır | Evet, derin |
| Stack çeşitliliği | Sadece Spring Boot/Java | Her dil/framework |
| Spring Cloud bileşenleri | Built-in | Manuel kurulum |
| Aylık baz maliyet | ~12.000 TL (Standard) | ~6.000 TL (basic cluster) |
| Özelleştirme esnekliği | Sınırlı (PaaS) | Yüksek |
| Vendor lock-in riski | Yüksek | Düşük (K8s standart) |
| Sidecar pattern, service mesh | Yok | Var (Istio, Linkerd) |
Karar yardımcısı:
- Sadece Spring Boot stack’iniz var, ekip K8s yorgun değil ve odak iş kodunda → Spring Apps
- Çoklu dil (Node.js + Python + Java), service mesh ihtiyacı, custom networking → AKS
- Hibrit (kısa vadede Spring Apps, uzun vadede AKS migration) → Spring Apps başla ve mimaride container-first yazın
Sahada üç vaka
Vaka 1: Banka çekirdek sistemleri (22 mikroservis)
Önceki: WebLogic + Oracle, on-prem. Hedef: 6 ay içinde Azure. Ekip 90 kişi ama K8s deneyimi 3 kişide. Çözüm: Standard tier Spring Apps + Azure Database for PostgreSQL Flexible Server. JAR build pipeline değişti, kod değişmedi. 5 ayda tamamlandı, hedef tarihi tutuldu. Aylık maliyet on-prem’in %35’i.
Vaka 2: E-ticaret startup (8 mikroservis)
İlk düşünce: AKS. POC sonrası: Spring Apps Basic. Sebep: ekip 5 kişi, K8s ile uğraşacak vakit yok, ürün hızı önemli. 18 ay sonra trafik 3 katına çıkınca Standard’a geçtiler. Şimdi büyümeye göre yıl içinde AKS’e migration düşünüyorlar. Spring Apps’te erken aşama, AKS’e geçiş ileride — sağlıklı bir evrim.
Vaka 3: Sigorta firması (12 mikroservis, başarısız hikaye)
Spring Apps Enterprise seçildi (üst yönetim kararı). Aylık maliyet 70.000 TL. Ekip aslında AKS biliyordu, custom networking ihtiyacı vardı, service mesh planlıyordu. Spring Apps’in sınırlamaları nedeniyle ek workaround’lar yazıldı. 18 ay sonra AKS’e migration başladı. Ders: ekibin yetkinliği ve teknik gereksinim PaaS yerine doğrudan K8s’i işaret ediyorsa zorlamayın.
Application Insights entegrasyonu
Spring Apps’te APM kurulumu tek tıkla:
az spring app-insights update
--name asa-banking-prod
--app-insights ai-banking-prod
--sampling-rate 100
Sonrasında: distributed tracing, dependency map, exception tracking, custom metrics — hepsi otomatik. Java agent kod değişmeden inject ediliyor. Bu, AKS’te aynı seviyeyi yakalamak için ekstra yaml + sidecar konfigürasyonu gerektirir.
VNet entegrasyonu (Standard tier)
Production için Spring Apps’i kendi VNet’inize bağlamak şart. “Vnet injection” özelliği ile Spring Apps subnet’inize iner; özel endpoint’lere erişebilir, public IP’siz çalışabilir.
Adımlar:
- Boş 2 subnet oluştur (service runtime + apps)
- Spring Apps’i “–vnet” parametresiyle oluştur
- NSG kuralları: outbound 443 Azure’a, inbound App Gateway’den
- App Gateway veya Azure Front Door ile public erişim
Sahada en sık üç hata
1. Spring Apps’i Kubernetes sanmak
kubectl exec yok, pod yaml yok, daemon set yok. Spring Apps daha yüksek bir abstraction seviyesinde. Eğer K8s araçlarına alışkın ekibinizse “benden kubectl alındı” rahatsızlığını ilk haftalarda yaşarsınız. Bu PaaS’ın doğası.
2. Spring Boot dışı uygulama deploy etmeye çalışmak
“Quarkus deploy edebiliyor muyum?” Hayır. Spring Apps Spring Boot için optimize. Generic Java uygulaması (war/jar) için Standard tier sınırlı destek var ama tüm Spring Cloud entegrasyonları çalışmaz. Quarkus, Helidon, Micronaut için Container Apps veya AKS uygun.
3. Enterprise tier’ı gereğinden önce seçmek
Enterprise tier VMware Tanzu Build Service, Spring Cloud Gateway, API Portal gibi premium bileşenler içerir. Aylık maliyet farkı 33.000+ TL. Bunlara gerçekten ihtiyacınız varsa anlamlı, yoksa Standard tier ile API Management kombinasyonu çok daha hesaplı.
Maliyet kontrolü için pratik öneriler
- Dev/test instance count’u 1’e düşür: production’da 2+ ama dev’de 1 yeter
- Off-hours scale-down: Logic App ile gece 19:00-08:00 arası replicaCount=0 yap (geliştirme servisleri için)
- Memory’i abartma: 2Gi yeterli olabilirken 8Gi seçince fatura katlanır
- Standard tier’da gerçekten Enterprise özellikleri kullanılıyor mu: ayda bir gözden geçir
Sık Sorulan Sorular
Spring Apps’te zero-downtime deployment yapabilir miyim?
Evet. Built-in blue-green: “deployment” kavramı her uygulama altında iki paralel slot olarak gelir. Yeni versiyonu staging slot’a deploy edip test eder, sonra traffic swap yaparsınız. Geri dönüş anında yapılır.
Spring Apps Java sürümü desteği nasıl?
Java 8, 11, 17, 21 destekleniyor. Yeni sürümler Microsoft tarafından eklendikçe runtime upgrade yapılabiliyor.
SLA değerleri nedir?
Standard tier %99.9, Enterprise %99.95. Multi-zone deployment yapılırsa SLA artar. Basic tier production için resmi SLA garanti etmiyor.
Spring Apps’ten çıkış (migration) ne kadar zor?
Uygulama kodu standart Spring Boot olduğu için migration mümkündür ama Spring Cloud Gateway, Config Server gibi platform bileşenlerini elle ayağa kaldırmanız gerekir. Tipik migration süresi 3-6 hafta arası.
On-prem’den Spring Apps’e geçişte tipik süre?
Mikroservis sayısına bağlı. 5-10 servis için 4-8 hafta; 20+ servis için 4-6 ay. Esas süre genellikle ağ entegrasyonu ve veritabanı migration’ında geçer, kod tarafı en kısa kısımdır.
Sonuç
Azure Spring Apps Java/Spring Boot ekipleri için bulutta en hızlı yola çıkma yoludur. Maliyet AKS’ten yüksek görünür ama gerçek hesap operasyonel yük dahil edildiğinde değişir — küçük-orta ekiplerde Spring Apps net kazanç sağlar. Büyük ekiplerde, çoklu stack’te, custom networking’de AKS yine doğru tercih.
Spring Boot uygulamalarınızı Azure’a taşıma kararı veya mimari değerlendirmesi için CloudSpark olarak ücretsiz 1 saatlik discovery oturumu sunuyoruz. İletişim sayfasından ulaşabilirsiniz.



