AWS Lambda ve Rutin İşleri Otomatize Etmek

Bugra Kilic
4 min readJan 23, 2022

--

Eğer sunucularla içli dışlı bir işiniz varsa ya da ilgi alanınız olduğu için uğraşıyorsanız, büyük ihtimalle bir görevi otomatik bir şekilde arka planda çalıştırmak istemişsinizdir. Bu blog yazısına denk geldiğinize göre cron job adı verilen, Linux işletim sistemlerinde bir komutu belli aralıklarla tetikleyip çalıştırabilen planlayıcı mekanizmasına da aşinasınızdır diye düşünüyorum.

Peki bizzat erişim sağladığımız server (sunucu) yahut VM’lerde bu işi yapmakla, AWS Lambda ile yapmak arasında ne gibi bir fark var? İşte burada serverless dediğimiz cloud computing modeli karşımıza çıkıyor. Bu modelde kullanıcı olarak erişim sağlamak zorunda olmadığımız, bakımını, güncellemelerini ve konfigürasyonlarını yapmamız gerekmeyen sunucular bulunuyor. Bu sunucularla alakalı hiçbir operasyonel faaliyeti end-user olan kullanıcının yapmasına gerek yok. Yani ihtiyacınız olan görevi -ki burada basit bir ifadeyle komut/kod çalıştırmak ve sonuç almak diyebiliriz- çok daha kolay bir şekilde gerçekleştirmeniz cloud computing ile mümkün hale geliyor. Serverless kelimesindeki -less eki, ‘sunucu yok’ anlamında değil anlayacağınız üzere. Bu ek, ifadeye ‘daha az’ anlamı katıyor yani sunucu bazlı işlerle uğraşmamanız anlamına geliyor.

Photo by Kevin Ku on Unsplash

AWS Lambda

Amazon Web Services resmi tanımıyla, sunucuları veya kümeleri* düşünmek zorunda kalmadan kod çalıştırın.

(*) küme yani cluster, belirli mimarilerde bulunabilen birden çok sunucuya denir.

AWS’in gelenekselleşmiş uluslararası konferansı olan re:Invent 2014'te ilk defa duyurulan Lambda servisi ile beraber serverless cloud computing alanında büyük bir adım atıldı diyebiliriz. Zira Lambda sayesinde altyapıyı, donanımların tedariğini, işletim sistemi kurulumlarını ve bakımlarını düşünmeden kod çalıştırabileceğiniz bir hizmet veriliyor. Lambda ile yapacağınız görevi, 200'ün üzerinde AWS hizmeti ve SaaS (Software-as-a-Service) ile tetikleyebilir ve sadece kullandığınız kadar ödeme yapabilirsiniz. AWS Free Tier hesabıyla ayda 1 milyon isteği ücretsiz olarak gerçekleştirme imkanınız bulunuyor.

Peki Lambda ile neler yapılabilir? Örnek vermek gerekirse;

  • AWS EventBridge (CloudWatch) üzerinden bir cron job oluşturarak yazdığınız scriptin belirlediğiniz periyotlarda çalışmasını sağlayabilirsiniz.
  • AWS S3 hizmetine yüklenen fotoğrafları Lambda fonksiyonunuzla otomatik bir şekilde yeniden ölçeklendirebilir ve sosyal medyada paylaşabilirsiniz.
  • AWS API Gateway ile kendi REST API’nizi oluşturabilir ve bu API aracılığıyla Lambda scriptinizi tetikleyip çalıştırabilirsiniz. Coinmarketcap veya Binance gibi popüler kripto marketlerin resmi API’leri de Lambda’da oluşturduğunuz fonksiyona bağlanabilir. Bu şekilde takip ettiğiniz kripto varlıkla ilgili kendi tasarladığınız teknik koşullara göre bildirim almayı mümkün hale getirebilirsiniz.

Elbette sadece bu amaçlar doğrultusunda değil, hayal gücünüzle Lambda’nın tüm yetkinliklerinden faydalanabilirsiniz. Detaylı teknik bilgi için AWS resmi sayfasına göz atmanızda fayda var.

Türkiye’deki cloud & serverless topluluğunu incelemek ve dahil olmak isterseniz sizi buraya alalım: Cloud and Serverless Turkey

Bu kısa girişle birlikte, zihninizde biraz daha canlanması için Python ile sade bir proje yazarak devam edebiliriz. Bu projede Lambda fonksiyonumuzun hafta içi her sabah 10:30'da günlük piyasa raporunu çekerek belirlediğimiz mail adreslerine otomatik olarak göndermesini sağlayacağız.

Öncelikle AWS Management Console üzerinden Lambda servisine geçiş yapılır. Dashboard’da bizi karşılayan “Create function” butonuyla default Lambda editörünü açarak ilk fonksiyonumuzu yazabiliriz. Kod kompleks bir yapıda değilse, sade ve hızlı bir şekilde sonuca ulaşmak istiyorsanız bu editör rahatlıkla kullanılabilir. Aksi durumlar için VS Code gibi bir kod editöründen faydalanmak ve yükü Lambda’ya upload etmek daha sağlıklı sonuçlar almayı sağlayacaktır. Create function ekranında detaylar yer alıyor. Bu örnekte ‘Author from scratch’ seçeneğiyle ilerleyeceğiz. Öncelikle temel fonksiyon bilgilerimizi aşağıdaki ekran görüntüsündeki gibi tanımlıyoruz. Lambda’da Python haricinde; Java, .NET, Ruby, Go ve Node.js programlama dillerini kullanarak fonksiyonlar yazabilirsiniz.

Create function ekranında temel fonksiyon bilgileri girilir.

Create function dedikten sonra açılan ekranda ise kod editörümüz, trigger ve destination gibi ekstra seçeneklerle beraber bizi karşılıyor. Bu ekranda kodu yazabilir, düzenleyip test edebilir, monitor edebilir veya tetikleyecek mekanizmalar ekleyebilirsiniz.

Function ekranında Lambda fonksiyonu oluşturulur.

Şimdi sırada yazdığımız fonksiyon var. Ekran görüntülerinin yeterli olmaması durumunda buradaki GitHub repo’sundan ilgili koda ulaşabilirsiniz.

İlk olarak Python ile kullanacağımız kütüphaneleri ve lambda_handler fonksiyonumuzu tanımlıyoruz. Bu lambda fonksiyonu içerisine main() fonksiyonumuzu yerleştirerek asıl işi yapması için bir sub-task atamış oluyoruz.

Kullanılacak Python kütüphaneleri ve lambda_handler fonksiyonu tanımlanır.

Kodun kalan kısmı olan main fonksiyonu altında ise yapmak istediğimiz görevi algoritmik şekilde tanımlıyoruz. Buradaki işi kısaca özetlemek gerekirse; her gün statik bir URL’de güncellenen PDF formatındaki piyasa raporunu bu kısa kod aracılığıyla istediğimiz mail adresleriyle paylaşıyoruz. Bunu yaparken smtplib ile MIME kütüphanelerinden ve ilgili modüllerinden faydalanmak gerekiyor. Bu blog yazısının amacı kodun detayları olmadığı için buraları pas geçebiliriz.

Lambda fonksiyonunun çalıştırdığı otomatize edilen iş main fonksiyonuyla tanımlanır.

Her şeyi hazırladıktan sonra Lambda kod editöründen fonksiyonu test etmeyi ve en son deploy etmeyi unutmamalısınız. Aksi takdirde fonksiyon çalışmayacaktır.

Geriye sadece yazılan kodu tetiklemek kalıyor. Bunu da yine birçok AWS servisiyle yapmak mümkün elbette. Hangi yolla yapılacağını işin kapsamı ve amacını düşünerek belirlemek en sağlıklı yöntem olacaktır. Biz hafta içi her sabah 10:30'da tetiklensin istediğimiz için cron job oluşturacağız. İlgili event’i oluşturmak için ise AWS EventBridge servisini kullanmamız gerekiyor. Nasıl cron job yazılır sorusunu merak edenler için, detaylı açıklama buradaki AWS dokümantasyonunda yer alıyor.

Trigger konfigürasyonunda cron job saat farkından dolayı GMT+0 baz alınarak tanımlandı.

Trigger konfigürasyonunu da tanımlayınca projeyi tamamlamış oluyoruz. Şimdi hafta içi her sabah 10:30'da mail kutunuzu kontrol edebilirsiniz.

Son söz

AWS serverless cloud computing hizmetleri sayesinde eğer kodunuz hazır ise sadece 1–2 dakika içerisinde varlığını bile hissetmediğiniz bir sunucuda fonksiyon çalıştırabilir hale gelebilirsiniz.

Tüm yazılar aynı zamanda bugrakilic.github.io adresinde arşivlenmektedir.

Bana Twitter, Linkedin veya email yoluyla ulaşabilirsiniz.

--

--

Bugra Kilic
Bugra Kilic

Written by Bugra Kilic

Engineer. PM at Argela. Community Builder at AWS Cloud. bugrakilic.net.

No responses yet