AWS Lambda

Onur Dayıbaşı
Cloud And Servers
Published in
3 min readDec 5, 2015

AWS Lambda S3, DynomoDB, Kinesis, Cognito her hangi bir işlem gerçekleştiğinde bu işlemi yakalayıp sonrasında bir fonksiyon çalıştırma imkanı sunar. Ve bunun için herhangi bir sunucu kurmanız gerekmez veya EC2 makinesi kiralamanız gerekmez.

Örneğin S3 bucket’ına herhangi bir dosya koydunuz. Bu dosya resim, txt, xml, video, html, pdf, mail vb.. formatlarda dosyalar olabilir. Bu dosyalar üzerinde belli işlemler yapmak istiyorsunuz.

  • Resmin boyutunu belli büyüklükte sabitlemek istiyorsunuz.
  • Resmin üzerinde efekt uygulamak istiyorsunuz.
  • Video, HTML, PDF, Mail üzerinde analizlerinizi çalıştırmak istiyorsunuz.
  • Dosyaları sıkıştırıp daha küçük hale getirmek istiyorsunuz.
  • vb..

Bunu normal koşullarda yapmanın 4 yolu var.

  1. S3 bucket’ını belli aralıklar ile poll edersiniz. Yeni eklenen dosyaları bulursunuz uygulamanız bu dosyaları çeker , ilgili f(x) fonksiyonunu gerçekleştirir.
  2. S3 dosyayı sizin uygulamalarınızdan birisi atıyor ise, aynı zamanda bunun ile ilgili eklendi bilgisini RabbitMQ, ActiveMQ, SQS bir iş olarak atar. Bunu dinleyen uygulamanız S3'den ilgili işi alarak f(x) fonksiyonunu gerçekleştirir. Poll etme işinden kurtulduk bu sayede.
  3. S3 eklediğiniz dosyanın altından Event’i direk SQS’ yönlendirsiniz. Bu konuyu S3 Event Handling altında anlatmıştım. 2nci adımda olduğu gibi kuyruğu dinleyen uygulamanız S3'den ilgili işi alarak f(x) fonksiyonunu gerçekleştirir. Poll etme işinden ve S3 attığımız dosya için Queue Sunucusunu trigger etmekten kurtulduk bu sayede.
  4. Bu yöntemde Lambda yöntemi. S3 Event Handling ucuna direk fonksiyonumuzu koyuyoruz bu sayede Poll etme işinden, Queue tetikleme işinden, Queue’dan, Queue dinleyen uygulamadan ve uygulamanın çalışacağı sunucudan kurtulduk bu sayede.

Lambda ile Thumbnail Oluşturma

Aşağıda S3 atılan resimlerin Lambda ile nasıl 100x100 boyutlarını dönüştürüldüğünü göstermeye çalışacağım. AWS Lambda sekmesi altından yapmak istediğiniz fonksiyonları ekliyorsunuz.

myImageResizer fonksiyonunu ekliyoruz.

Eklediğiniz bu fonksiyon 5 sekme altından yönetebiliyorsunuz. İlk sekme olan Code altından yazmış olduğunuz fonksiyonu JaR./ Node.js ise direk kod olarak bu kısma ekliyorsunuz.

Configuration sekmesi altından hangi RunTime üzerinde çalışacağını yani (Java, Node.js, Phyton) ortamında mı fonksiyonu yazacağınızı belirtiyorsunuz. Handler hangi sınıftaki, hangi metodun çalıştırılacağı bilgisi verilir. Role kısmından önceden oluşturduğumuz S3 bucketlarına sınırsız erişim yetkisini buradan seçiyoruz.

Gelişmiş Ayarlar altından fonksiyonun ne kadar bellek kullanarak çalıştırılacağı, çalışma süresinin hangi değerler içerisinde olduğunu bu kısımdan ayarlayabiliyoruz.

Event Sources sekmesinde hangi event kaynaklarından Lambda’nın çalıştırılacağına karar verebilirsiniz

API EndPoint sekmesinde herhangi bir servis Endpoint’den gelen Requestleri Lambda fonksiyonuna bağlayabiliyoruz. Bu kısmı kullanmıyoruz.

En son monitoring sekmesine baktığımızda çalışan Lambda fonksiyonunuzu CloudWatch ile monitor etmenizi sağlar. Bu kısmı S3 dosya uplaod ettiğimizde kullanacağız.

Lambda Projesi

Linkte yer alan yer alan lambda projesini mvn package ile jar haline getirip yukarıdaki Upload ve Settings işlemini gerçekleştirmeniz gerekiyor.

S3 kısmında İlgili Bucket’ın içerisine gidip Event Sekmesinde Lambda Ayarlamasını Yapın

S3 Bucket’ınızın ismi logos ise logosresized ismi ile yeni bir Bucket oluşturuyoruz ve logos bucket içerisine jpeg ve png resimler upload edin.

Bunun sonucunda logosresized bucket’ında aynı isimli tumbnaillerin oluşturulduğunu görebilirsiniz.

Uzun süredir farklı sektörlerde (Askeri, Telekomünikasyon, Devlet, Bankacılık, Sigortacılık, Tübitak, SaaS) yazılımlar geliştiriyorum. Bu süreçte Havelsan, Milsoft, T2, Cybersoft ve Thundra firmalarında yönetici ve yazılım mühendisi olarak çalıştım. Deneyimlerimi ve teknolojik bilgi birikimi mi olabildiğince OnurDayibasi.com adresinde toplamaya çalışıyorum. Tüm yazılarıma ve daha fazlasını bu site üzerinden erişebilirsiniz.

--

--