Yazılım ile ilgili notlar

Çözdüğüm problemleri ve bu yolda öğrendiklerimi yazıyorum. - “Söz uçar, yazı kalır”

AWS Lambda - Giriş

17/12/2019 tarihinde eklendi

Serverless oldukça revaçta olan bir konsept. AWS ve Google gibi bulut servis sağlayıcıları, sizi herhangi bir fiziksel veya sanal makina ile uğraştırmadan, yazdığınız kodu çalıştırabiliyor. Bu yazıda; AWS Lambda nedir, lambdayı kullanarak neler yapılabilir ve lambda ile uygulama geliştirmenin incelikleri nelerdir öğreneceğiz.

Serverless

Serverless’ı basitçe gözünüzde canlandırmak için, yazdığınız bir fonksiyonu bulut’a yüklediğinizi ve çeşitli event’lere bağladığınızı düşünün. Event’ler geldikçe, fonkisyonunuz girdi olarak event’leri alıp üzerinde işlemler yapıp, farklı servisleri çağırıp bir sonuç üretecek. Buna “Function As A Service” FAAS da deniyor. AWS’nin FAAS çözümü ise 2014 yılında duyurulan Lambda. Elbette Lambda’ya yüklediğiniz kodlar sanal makinalar üzerinde çalışıyor, fakat bu makinaları siz yönetmiyorsunuz. İşte serverless‘tan kasıt bu, bir makina yönetmek zorunda olmamanız. Mesela linux için yeni bir güvenlik yaması çıktı diyelim, makinayı siz yönetiyor olsanız bu yamayı kendiniz kurmalısınız. Fakat serverless teknolojilerinde, fiziksel veya sanal makinalar sizden soyutlanmış durumda, bakımı ve yönetimi tümüyle AWS tarafından yapılmakta.

Temel bilgiler

Lambda neler yapabilir?

Hemen hemen her şeyi yapabilirsiniz, elbette bazı işler için çok uygun olmamakla beraber (mesela uzun süren batch job türü işler), genel olarak aklınıza gelen tüm problemler için çözümün bir parçası olabilir.

Lambda ile

Lambda hangi dilleri destekler?

Lambda popüler dillerin pek çoğunu destekliyor. Lambda’da runtime adı verilen konsept ile farklı programlama dillerini kullanımınıza sunuyor, bunlar:

Runtime’lar sadece belirli versiyonları destekliyor ve günü geldiğinde eski bir versiyon için verilen destek kaldırılabiliyor.

Kodu yüklemek için

Lambda üzerinde fonksiyon oluşturmak için birkaç farklı yöntem var:

Lambda’nın limitleri

AWS Lambda servisini kullanırken, servis üzerinde AWS’nin koymuş olduğu limitlerden haberdar olmak önemli. Mesela, lambda fonksiyonunuzun çalışması çok uzun sürmemeli: AWS 15 dakika sonra fonksiyonunuzu bölüp timeout verir. Bazı kritik limitler şunlar:

Lambda fonksiyon çalıştırma modelleri

Lambda’nın iki çeşit fonksiyon çalıştırma modeli var:

Basit iki örnekle açıklamak gerekirse, eğer API Gateway ile bir REST API yapıyorsanız, arkaya bağladığınız lambda fonksiyonu API Gateway tarafından senkron olarak çağırılır, gelecek olan cevabı beklemek zorunda ki client’a cevap dönebilsin. Asenkron modelde ise, fonksiyon çağırıldığında bir event oluşturulup sizden soyutlanmış olan bir “queue” yani sıraya sokulur ve zamanı geldiğinde event lambda tarafından işlenir. Asenkron modelde, lambda fonksiyonunuz hata alırsa otomatik olarak iki kere daha dener. Asenkron modelde, lambda’nın cevabını almak için SQS, SNS, başka bir Lambda veya EventBridge kullanabilirsiniz. Mesela fonksiyonunuz hata aldığında, hatayı yönetmek için yazdığınız başka bir lambda metodunuzun otomatik olarak tetiklenmesini sağlayabilirsiniz. Veya hata aldığında bu hatayı daha sonrasında incelemeniz için SQS’e gönderebilirsiniz.

Ücretlendirme

Mühendislikte zamanla birlikte en önemli kaynaklardan biri de elbette para. AWS’nin ücretsiz kullanım kotası kapsamında, bir sene boyunca ayda 1M adet fonksiyon çalıştırma hakkı ve 400.000 GB-saniye işlem gücünü bedavaya getiriyorsunuz. Ücretlendirme, fonksiyonların tetiklenme sayısı ve fonksiyonlara tanımladığınız memory ile fonksiyonlarınızın kaç saniye çalıştığıyla ilgili olarak değişiyor. Detaylar için lambda fiyatlandırma sayfasına bir göz atın.

Kapanış

AWS Lambda sayesinde sadece yazdığınız koda odaklanıp, kodun nasıl çalıştırılacağını, hangi makinada koşacağını, nasıl güncelleneceğini unutabilirsiniz. Serverless ve lambda, klasik uygulama geliştirmeden oldukça farklı. İçselleştirmeniz ve benimsemeniz gereken en büyük fark, her şeyin event kaynaklı olması. Geleneksel uygulamalarda, uygulamayı ayağa kaldırırsınız ve çalışmaya başlar. Oysa lambda buluttaki event’lere cevap vermek üzere tasarlanmış bir servis. Bir diğer önemli husus da, ssh yapıp loglarına bakacağınız bir makina olmaması. Uygulamanızda bir hata olduğunda bunu kolayca bulabilmek için AWS’nin sunmuş olduğu CloudWatch ve X-Ray gibi servislerinden faydalanmanız gerekiyor. Lambda’yı bir karakutu olmaktan çıkarmak ve nasıl davrandığını anlayabilmek için Twitter haritası - 2 yazımda değinmiş olduğum observability mefhumuna önem vermeniz gerekiyor.

Lambda’nın ne olduğunu ve neler yapabildiğini öğrendiğik. Bir sonraki yazımda, gerçek bir örnek üzerinden lambda kodu nasıl yazılır ve nasıl deploy edilir göreceğiz.