AWS ile Edge Computing: CloudFront Functions vs Lambda@Edge
Global uygulamalar için AWS edge computing çözümlerini seçme ve uygulama üzerine pratik örnekler ve maliyet optimizasyonu stratejileri içeren kapsamlı teknik rehber.
Edge computing, kod yürütmeyi merkezi data center'lardan kullanıcılara yakın konumlara taşıyor. AWS CloudFront dünya çapında 1600+ edge location ile çalışıyor ve iki farklı edge computing çözümü sunuyor: CloudFront Functions ve Lambda@Edge. Her iki servis ile çalışmak bana doğru seçimin maliyet, performans ve implementasyon karmaşıklığı üzerinde önemli etkisi olduğunu öğretti.
AWS ile edge computing çözümleri geliştirirken öğrendiklerim.
CloudFront Edge Computing'i Anlamak
CloudFront ile edge computing, kodu kullanıcılara yakın edge location'larda çalıştırarak yürütmeyi mümkün kılıyor. Her iki servis de request'leri edge'de işleyerek latency sorunlarını çözüyor, ancak farklı kullanım senaryolarına hitap ediyorlar.
CloudFront Functions, cache key normalizasyonu ve header manipülasyonu gibi yüksek hacimli, basit dönüşümlerde Lambda@Edge'e göre 1/6 maliyetle mükemmel çalışıyor. Lambda@Edge ise network erişimi, harici API'ler veya karmaşık business logic gerektiren operasyonları ele alıyor.
Execution Point'leri
CloudFront, edge function'ların çalışabileceği dört execution point sağlıyor:
- Viewer Request: CloudFront request'i aldıktan sonra, cache'i kontrol etmeden önce
- Viewer Response: Viewer'a response dönmeden önce
- Origin Request: Origin'e forward etmeden önce (sadece cache miss) - Sadece Lambda@Edge
- Origin Response: Origin'den response alındıktan sonra - Sadece Lambda@Edge
Servis Karşılaştırması: Doğru Seçimi Yapmak
CloudFront Functions ve Lambda@Edge arasındaki farkları anlamak, maliyet-etkin mimari kararlar almak için önemli.
Özellik Karşılaştırması
Maliyet Etkisi
Aylık 10 milyar request için maliyet farkı önemli:
- CloudFront Functions: 10,000M × 1,000
- Lambda@Edge: 10,000M × 6,000-$8,000
CloudFront Functions basit kullanım senaryolarında 5-8x daha ucuz.
Karar Çerçevesi
CloudFront Functions: Hız İçin Optimize
CloudFront Functions tüm 1600+ edge location'da sub-milisaniye latency ile çalışıyor. Network erişimi gerektirmeyen yüksek hacimli, basit operasyonlar için ideal.
Kullanım Senaryosu 1: Cache Key Normalizasyonu
Query parameter'ları normalize ederek cache hit ratio'yu optimize etmek, origin load'u önemli ölçüde azaltabilir.
Bu normalizasyon production sistemde cache hit ratio'yu %45'ten %78'e çıkardı ve origin request'leri %60 azalttı.
Kullanım Senaryosu 2: Security Header'ları
Security header'ları eklemek için CloudFront Functions kullanmak Lambda@Edge'den daha maliyet-etkin.
Aylık 5 milyar request için bu CloudFront Functions ile 3,000+ tutabiliyor.
Kullanım Senaryosu 3: KeyValueStore ile A/B Testing
CloudFront Functions, yeniden deploy olmadan dinamik konfigürasyon için KeyValueStore'u destekliyor.
Tip: KeyValueStore güncellemeleri birkaç dakika içinde yayılıyor. Development sırasında versioning kullan ve production değişiklikleri için gradual rollout uygula.
Lambda@Edge: Güç ve Esneklik
Lambda@Edge, network erişimi, harici API'ler veya karmaşık business logic gerektiren kompleks operasyonları ele alıyor. Trade-off olarak daha yüksek maliyet ve potansiyel cold start latency var.
Kullanım Senaryosu 1: Geo-Targeting ve Lokalizasyon
CloudFront, Lambda@Edge'in intelligent routing için kullanabileceği coğrafi header'lar sağlıyor.
Kullanım Senaryosu 2: JWT Authentication
JWT token'ları edge'de doğrulamak, unauthorized request'lerin origin'e ulaşmasını önlüyor.
Tip: Lambda@Edge function'larında asla secret'ları hardcode etme. API call'larını ve cold start etkisini minimize etmek için caching ile AWS Secrets Manager kullan.
Kullanım Senaryosu 3: Origin Selection ve Failover
Health check'lerle dinamik origin routing, dayanıklı mimariler sağlıyor.
Performans Optimizasyonu
Lambda@Edge Cold Start'ları Azaltmak
Cold start'lar, function'lar viewer request fazında çalıştığında kullanıcı deneyimini doğrudan etkiliyor. İşe yarayan yöntemler:
1. Package Size'ı Minimize Et
2. Memory Allocation'ı Doğru Boyutlandır
Daha fazla memory, daha fazla CPU demek ve bu da cold start süresini azaltıyor. Test'ler orta düzeyde dependency'leri olan Lambda@Edge function'lar için 512 MB'nin genellikle ideal nokta olduğunu gösterdi.
3. External Dependency'leri Azalt
Ağır kütüphaneleri daha hafif alternatiflerle değiştir:
moment.js→date-fnsveya nativeDate- Tam AWS SDK → bireysel service client'ları
- Büyük image processing kütüphaneleri → minimal implementasyon'lar
Production sistemlerden cold start metrikleri:
- Boş function: 100-300ms
- AWS SDK ile: 500-1000ms
- Sharp ile (image processing): 1000-3000ms
CloudFront Functions Optimizasyonu
Kodu Minimal Tut: 10 KB limiti tüm kodu içeriyor. Hardcode değerler yerine konfigürasyon verisi için KeyValueStore kullan.
KeyValueStore'dan Yararlan: Function yeniden deploy'u önlemek için konfigürasyon verisini offload et. KeyValueStore sub-milisaniye okuma ile 5 MB storage sağlıyor.
Maliyet Analizi ve Optimizasyon
Maliyet yapısını anlamak bilinçli kararlar almaya yardımcı oluyor.
Detaylı Maliyet Hesaplama
Senaryo: Aylık 5 milyar request, 50ms ortalama süre, 128 MB memory
CloudFront Functions:
Lambda@Edge:
Tasarruf: CloudFront Functions kullanarak $4,063/ay (%89 azalma)
Maliyet Optimizasyon Stratejileri
1. Mümkün Olduğunda CloudFront Functions Kullan: Header manipülasyonu ve cache key normalizasyonu gibi operasyonlar için CloudFront Functions 5-8x maliyet tasarrufu sağlıyor.
2. Lambda@Edge Memory'yi Optimize Et: CloudWatch metrikleri kullanarak memory allocation'ı doğru boyutlandır. Daha fazla memory, execution süresini azaltarak daha yüksek memory maliyetlerini dengeleyebilir.
3. Invocation Frekansını Azalt: Edge function invocation'larını minimize etmek için CloudFront cache policy'lerini etkili kullan. Her cache'lenen response bir function invocation'dan kaçınır.
4. Gerçek Kullanımı İzle: Maliyet threshold'ları için CloudWatch alarm'ları kur:
Debugging ve Logging Zorlukları
Lambda@Edge logları function'ın çalıştığı AWS bölgesinde oluşuyor, bu da debugging'i karmaşık hale getiriyor.
Bölgeler Arasında Log'ları Bulmak
CloudFront Response Header'larını Kontrol Et:
Havaalanı Kodu-Region Eşlemesi:
- IAD (Dulles) → us-east-1
- SFO (San Francisco) → us-west-1
- DUB (Dublin) → eu-west-1
- NRT (Tokyo) → ap-northeast-1
- SYD (Sydney) → ap-southeast-2
Structured Logging Best Practice
Structured log'ları sorgulamak için CloudWatch Logs Insights kullan:
Yaygın Tuzaklar ve Çözümler
1. Lambda@Edge Response Size Aşıldı (502 Error)
Problem: Function >1 MB response dönüyor, CloudFront 502 veriyor.
Çözüm: Dönmeden önce response size'ını kontrol et:
2. Viewer Request Timeout (5 Saniye)
Problem: Viewer request Lambda@Edge function timeout veriyor.
Çözüm: Timeout koruması için Promise.race kullan:
3. Cache Key Verimsizliği Duplicate Object'ler Yaratıyor
Problem: Cache hit ratio düşük, yüksek origin request'leri.
Çözüm: Query parameter'ları normalize et:
AWS CDK Deployment Pattern
CloudFront'u edge function'larla deploy etmek için eksiksiz CDK stack:
Warning: Lambda@Edge function'ları CloudFront distribution'ınızın nerede deploy edildiğine bakılmaksızın her zaman us-east-1 bölgesinde oluşturulmalı.
Önemli Çıkarımlar
-
İş için doğru servisi seç: CloudFront Functions kullanım senaryolarının %90'ı için (header'lar, cache key'ler, basit logic), Lambda@Edge karmaşık gereksinimler için (API'ler, authentication, image processing). Maliyet farkı 5-8x.
-
Cold start'lar kullanıcı deneyimini etkiliyor: Lambda@Edge cold start'ları kullanıcıları doğrudan etkiliyor. Package size'ı minimize et, initialization'ı optimize et, latency-sensitive operasyonlar için CloudFront Functions kullan.
-
1 MB response limit kesin: Lambda@Edge >1 MB response dönemez. Mimariyi buna göre tasarla: büyük payload'ları S3 üzerinden stream et.
-
Log'lar global olarak dağıtılmış: Lambda@Edge logları birden fazla AWS bölgesinde görünüyor. Correlation ID'lerle structured logging kullan, doğru bölgeyi bulmak için x-amz-cf-pop header'ını kontrol et.
-
Cache optimizasyonu kritik: Cache hit ratio'yu iyileştirmek için CloudFront Functions ile cache key'leri normalize et. Kötü cache key tasarımı duplicate object'ler yaratır ve origin load'u artırır.
-
CloudFront Functions ile security header'ları: HSTS, CSP, X-Frame-Options eklemek CloudFront Functions ile 1M request başına 6+.
-
KeyValueStore dinamik konfigürasyon sağlıyor: Function'ları yeniden deploy etmeden A/B test yüzdelerini, feature flag'leri ve routing kurallarını güncelle. 5 MB storage, sub-milisaniye okuma.
-
Maliyetleri sürekli izle: Edge function'lar milyarlarca invocation'a scale olabiliyor. CloudWatch alarm'ları kur, aylık maliyetleri gözden geçir, agresif optimize et.
-
Failover senaryolarını test et: Edge function'lar critical path'in parçası. Graceful error handling uygula, hata durumunda orijinal request'i dön, error rate'leri izle.
-
Basit başla, progressif scale et: CloudFront managed policy'lerle başla, optimizasyon için CloudFront Functions ekle, Lambda@Edge'i sadece gerektiğinde devreye sok. Her adımda etkiyi ölç.
Edge computing ile çalışmak bana CloudFront Functions ve Lambda@Edge arasındaki doğru seçimin spesifik gereksinimlere bağlı olduğunu öğretti. Basit başlamak ve sadece gerektiğinde karmaşıklık eklemek, en maliyet-etkin ve sürdürülebilir çözümleri üretiyor.