AWS Lambda λ - 101
Published:
Giriş
Geçtiğimiz hafta 14 Kasım’da1 Lambda 10. yılını devirdi. Amazon CTO’su Werner Vogels kendi blog‘unda Lambda yayınlanmadan önce hazırlanan iç (internal) dokümanı paylaştı.
Kendi işlerimde benim de sıklıkla kullanmaya çalıştığım Lambda, her ay 1.5 milyondan fazla müşteri tarafından kullanılan ve trilyonlarca isteği işleyen, sunucu yönetmenize gerek olmadan kod çalıştırmanıza olanak tanıyan bir servistir. Bu yazıda Lambda’ya genel bir bakış ile yaygın kullanım alanlarını ve serverless mimarinin avantajlarını ele alacağız. Ayrıca Lambda’nın makine öğrenmesi (ML) senaryolarında nasıl kullanılabileceğine değineceğiz.
AWS Lambda ve Serverless Genel Bakışı
AWS Lambda, sunucu sağlama veya yönetme ihtiyacı olmadan kod çalıştırmanıza olanak tanıyan bir sunucusuz (serverless) hesaplama (computing) servisidir. Lambda servisinin bazı temel özellikleri ve avantajları aşağıdaki gibidir 👇🏻
- Olay tabanlı çalıştırma: Lambda fonksiyonları Amazon S3’e dosya yüklemeleri, DynamoDB tablolarındaki güncellemeler veya API Gateway aracılığıyla yapılan HTTP istekleri gibi belirli olaylara yanıt olarak çalıştırılır (event-driven).
- Geniş dil desteği: Lambda, Python, Ruby, Java, Go ve .NET gibi popüler programlama dillerini destekler.
- Otomatik ölçeklenme: Lambda, kodunuzu tetikleyen olaylara yanıt olarak uygulamanızı otomatik olarak ölçeklendirir ve iş yükü (workload) taleplerine uygun şekilde yönetir (auto scaling).
- Kullandıkça öde: Kodunuzun çalıştığı hesaplama süresi kadar ücretlendirilirsiniz. Fonksiyon çalışmadığında herhangi bir ücret ödemezsiniz.
- Tamamen yönetilen bir ortam: AWS sunucu sağlama, işletim sistemi bakımı ve kapasite ölçeklendirme gibi altyapı görevlerini sizin yerinize yönetir (fully managed).
- AWS servisleriyle entegrasyon: Lambda diğer AWS servisleriyle kolayca entegre olur ve karmaşık uygulamalar oluşturmanıza olanak tanır.
Yaygın Kullanım Alanları
- Gerçek zamanlı dosya ve akan veri işleme
- Serverless web uygulamaları geliştirme
- IoT ve mobil backend oluşturma
- Veri dönüştürme ve doğrulama
- Zamanlanmış görevler ve otomasyon
Serverless Mimarinin Avantajları
Serverless mimariler operasyonel karmaşıklığı azaltır, geliştirici verimliliğini artırır ve maliyetleri düşürebilir. Ancak mimariyi etkileyebilecek cold-start delay (ilk çalıştırma gecikmeleri) ve vendor lock-in (sağlayıcı bağımlılığı) gibi hususları göz önünde bulundurmanız gerekebilir.
AWS’in serverless servisleri ile verimli, ölçeklenebilir ve maliyet açısından uygun uygulamalar oluşturabilir ve operasyonel yükü en aza indirebilirsiniz.
AWS Lambda’yı Ne Zaman Kullanmalısınız?
AWS Lambda, geniş bir yelpazeye yayılan senaryolar için uygun, esnek, ölçeklenebilir ve maliyet verimli bir servistir. Lambda’nın öne çıktığı örnek kullanım senaryoları şunlardır 👇🏻
- Olay tabanlı işlem: Amazon S3’e dosya yüklemeleri, veritabanı değişiklikleri veya bir kuyruktan (queue) gelen mesajlar gibi olaylarla tetiklenen görevler için idealdir.
- Gerçek zamanlı veri/dosya işleme: S3’e yüklenen dosyalar üzerinde anında veri dönüştürme veya analiz yapmanızı sağlar.
- Akan veri işleme: Amazon Kinesis gibi servislerle gerçek zamanlı veri işleme; örneğin log analizi veya IoT verisi işleme için idealdir.
- Serverless web uygulamaları: API Gateway ile birleştirildiğinde Lambda sunucu yönetimi olmadan ölçeklenebilir web uygulamaları için bir backend sağlar.
- Mikro servis mimarisi: Her Lambda fonksiyonu bir framework içerisinde bağımsız bir mikro servis gibi çalışabilir.
- Zamanlanmış görevler: Lambda’yı Amazon EventBridge (eski adıyla CloudWatch Events) ile kullanarak periyodik işleri veya cron tarzı zamanlamaları otomatikleştirebilirsiniz.
- Mobil ve IoT backend: Lambda mobil uygulamalardan veya IoT cihazlarından gelen talepleri otomatik olarak ölçeklendirebilir.
Görsel Kaynağı: Best practices for a real-time data processing pipeline with Kinesis and Lambda
Lambda Kullanırken Dikkat Edilmesi Gerekenler
Lambda güçlü ve esnek bir servis olmasına karşın belirli kullanım durumları için optimize edilmiştir:
- Kısa süreli ve stateless fonksiyonlar için uygundur ve maksimum çalıştırma süresi 15 dakikadır.
- Cold Start gecikmeleri (cold-start delay): zaman zaman Lambda fonskiyonlarının ilk çağrılmasında bir gecikme olabilir.
- Uzun süreli, durumsal veya sürekli aktif süreçler için AWS EC2 veya konteyner tabanlı çözümler daha uygun olabilir.
AWS Lambda’nın serverless yaklaşımı, canlıya çıkmayı basitleştirerek dinamik, ölçeklenebilir uygulamalar oluşturmayı kolaylaştırır ve operasyonel yükü azaltır.
Stateless Fonksiyonlar
AWS Lambda’daki stateless function (durumsuz işlev ⁉), bir isteğin yürütülmesi sırasında herhangi bir kalıcı durum bilgisi taşımayan ve her istekte tamamen bağımsız olarak çalışan bir işlevdir. Lambda’nın tasarım gereği stateless olması nedeniyle;
Her İstek Bağımsızdır: Lambda her isteği birbirinden bağımsız şekilde çalıştırır. Bir istek sırasında işlenen veri veya depolanan durum, başka bir isteğe aktarılmaz.
Yerel Depolama Kullanımı Sınırlıdır: Lambda fonksiyonları yalnızca istek süresi boyunca geçerli olan geçici bir depolama alanına (ör:
/tmp
dizini) erişebilir. İşlev tamamlandığında bu veri silinir.Otomatik Ölçeklendirme: Lambda aynı anda birçok fonksiyonu başlatabilir. Her bir örnek bağımsız olduğu için stateless tasarım bu paralel çalışmayı kolaylaştırır.
AWS’de Makine Öğrenmesi için Serverless
Serverless çözümler makine öğrenmesi (ML) iş akışlarının ölçeklenebilirliğini, maliyet etkinliğini ve canlıya alım kolaylığını büyük ölçüde artırabilir. Örnek ML senaryoları 👇🏻
1. AWS Lambda ile Modelin Canlıya Alınması
- Eğitilmiş ML modellerini AWS Lambda ve Amazon API Gateway kullanarak serverless API’ler olarak barındırırabilirsiniz.
- Düşük gecikme süresi (latency) ve yönetilebilir bellek gerektiren modeller için idealdir.
- Bu nedenle modellerin Lambda çalışma ortamına ve bellek kısıtlamalarına uygun şekilde optimize edilmesi gerekebilir.
2. Lambda ile Veri İşleme
- Lambda’yı veri ön işleme (data preprocessing), değişken mühendisliği (feature engineering) veya dönüştürme (data transformation) görevleri için kullanabilirsiniz.
- Ör: Amazon S3’e yüklenen yeni verilerin yüklenir yüklenmez işlenmesi.
3. AWS Step Functions ile Serverless Akışlar
- Birden çok Lambda fonksiyonunu ve AWS servislerini entegre ederek karmaşık ML iş akışlarını Step Functions ile koordine edebilirsiniz.
- Ör: Veri hazırlama, model eğitimi ve tahmin gibi çok adımlı (ve sıralı) süreçler için mükemmeldir.
4. Amazon SageMaker ile Serverless Tahmin
- SageMaker’ın serverless tahmin (serverless prediction) seçeneğiyle modelleri altyapı yönetmeden canlıya alabilirsiniz.
5. Amazon EMR Serverless ile Büyük Veri İşleme
- Büyük ölçekli veri işleme görevleri için EMR Serverless kullanabilirsiniz.
- Ör: Büyük veri içeren akışlar (pipeline) için idealdir.
6. Serverless Veri Depolama
- Model meta verilerini, sonuçlarını veya değişkenlere ait verileri Amazon DynamoDB veya Amazon Aurora Serverless gibi serverless veritabanlarında saklayabilirsiniz.
7. Olay Tabanlı ML İş Akışları
- Amazon EventBridge kullanarak belirli olaylara veya zamanlamalara dayalı serverless ML akışları tasarlayabilirsiniz.
Görsel Kaynağı: Automating Machine Learning Models on AWS
Görsel Kaynağı: Building an AWS Serverless ML Pipeline with Step Functions
Serverless Çözümler için En İyi Uygulamalar (Best Practices)
- Hata işleme ve günlük kaydı (log’lama): Lambda fonksiyonlarında hata işleme (error handling) mekanizmaları uygulayın ve Amazon CloudWatch ile log’ları izleyin.
- Hassas verileri güvenceye alın: AWS Secrets Manager ile kimlik bilgilerini ve hassas bilgileri güvenli bir şekilde saklayın (veya Environment variables).
- IAM pratikleri: IAM rolleri ve politikalarını yapılandırırken en az yetki/ayrıcalık ilkesine (the principle of least privilege) uyun.
- Cold Start: Özellikle düşük gecikme gerektiren ML tahmin işleri için cold start gecikmeleri olabileceğini unutmayın.
- Ör: Provisioned Concurrency kullanmak, kodu optimize etmek, AWS Lambda SnapStart kullanmak 2, fonksiyonu sürekli ayakta tutacak bir başka lambda fonksiyonu yazmak (😅) gibi çözümler düşünülebilir.
- Performans izleme: Amazon CloudWatch ölçümleri ile uygulama performansını ve maliyetlerini sürekli izleyin ve optimize edin.
Daha önce Lambda kullanarak yaptığım yazılara aşağıdaki link’lerden erişebilirsiniz 👇🏻
- Serverless ile Canlıya Çıkmak
- R ile Scraping - İkinci El Araç Verisi (Lambda ile DB’nin zamanlanmış bir şekilde açılıp kapatılması).
- Sagemaker-101: Modelleme ve Canlıya Alma (λ ile Serverless)
Serverless mimari örnekleri için serverless.com/examples adresine göz atabilirsiniz.
Yazıda Lambda’nın nasıl çalıştığına değinmedim. Lambda’nın çalışması basit bir mantık üzerine kurulu olsa da teknik olarak bir hayli karmaşık. Bu konuda okuma yapmak isterseniz aşağıdaki kaynaklar size yardımcı olabilir 👇🏻
- How does AWS lambda work behind the scenes?
- Lambda executions - Whitepaper
- Behind the Scenes Lambda
- How Amazon Lambda Works 🔥
- AWS Lambda The Ultimate Guide
AWS SnapStart Python ile Serverless Cold Start’ın özellikle LLM modelleri için önüne geçilmesi bekleniyor. Speeding Up Large Language Model (LLM) Inference with AWS Lambda SnapStart ↩