Posts AWS Lambda ile Zamanlanmış İşlemler
Post
Cancel

AWS Lambda ile Zamanlanmış İşlemler

Herkese iyi sabahlar. Daha doğrusu bana iyi sabahlar yazı kaçta çıkar emin değilim :) Bu yazıyı yazmak için sabahları mesai saatimden erken kalkıyorum. Kendime böyle bir düzen kurmaya çalışıyorum.

Bir süredir heyboosterda günlük, saatlik veya haftalık çalışmasını istediğimiz scriptleri AWS EventBridge ile zamanlıyoruz. Bir önceki yazımda lambda function oluşturmayı anlatmıştım. Bugün ise lambdaya farklı şekilde kodumuzu yüklemeyi ve bunu AWS EventBridge ile zamanlı bir şekilde çalıştırmaktan bahsedeceğim. Hazırsak başlayalım 🧘


Not:

AWS’da açacağınız bir hesap ilk 1 yıl ücretsizdir.


AWS Lambda Nedir?

Bunun için okumanız gereken yazı -> https://ilteriskeskin.github.io/posts/aws-lambda-python/#aws-lambda-nedir


AWS EventBridge Nedir??

Amazon EventBridge sahip olduğunuz uygulamalar, entegre Hizmet Olarak Yazılım (SaaS) uygulamaları ve AWS hizmetleri tarafından oluşturulan olayları kullanarak uygun ölçekte olay odaklı uygulamalar geliştirmeyi kolaylaştıran sunucusuz bir olay veri yoludur.

Aslında detaylıca okumak için şu sayfaya bakmanızı öneririm AWS EventBridge


Not:

Aşağıdaki servisleri açmak için AWS’da arama ekranına servis ismini yazmanız yeterlidir.


AWS Lambda Function Oluşturalım

Bu kısımda biraz ekran görüntüleri ile devam etmemiz gerekecek. Bunu ben de istemezdim ama durum bunu gerektiriyor :(

İlk olarak Lambda servis ekranına giriyoruz ve Create function butouna basıyoruz.

ss1

Ardından Lambda functionımıza bir isim veriyoruz, bir dil seçimi yapıyoruz ve sistem mimarisini seçiyoruz. Sistem mimarisi olarak ben arm64 seçiyorum. Nedeni ise arm64 x86_64’e kıyasla daha az maliyetli. Benim yapılandırmam aşağıdaki gibi.

ss2

“Create function” butonuna tıkladıktan sonra artık bir Lambda functionımız oluşmuş oldu.

ss3

Yukarıdaki gibi bir ekran bizi karşılıyor.

Buraya kadar bir önceki yazı ile her şey aynı. Ama benim bu yazıda anlatmak istediğim şey bu değil. O yüzden devam edelim. Şimdi bilgisayarınızda şu adımları yapmanızı istiyorum.

  1. Sanal Ortamı ve Dosyaları Hazırlama
    1
    2
    3
    4
    5
    6
    7
    
     cd ~
     mkdir my_lambda_function
     cd my_lambda_function
     python3 -m venv env
     source env/bin/activate
     pip3 install requests
     touch main.py
    
  2. Kodun yazılması
    1
    2
    3
    4
    5
    6
    7
    8
    
     import requests
    
     def get_func():
         users = requests.get('https://jsonplaceholder.typicode.com/users')
         print(users)
    
     def run(event, context):
         return get_func()
    

Eğer bu kodu direkt lambdaya yazıp çalıştırmayı denerseniz çalışmayacaktır. Bunun sebebi kullandığımız requests modülünün yüklü olmaması.

ss4

Test sekmesine basıp kodumuzu test ettiğimizde aşağıdaki gibi hatalar verecektir.

ss5

Peki ne yapacağız? Çok basit bilgisayarımızda oluşturduğumuz sanal ortamın içinde gerekli kısmı zipleyip lambdaya upload edeceğiz. Burayı da ekran görüntüleri ile anlatmaya çalışacağım.

ss6

Gördüğünüz gibi dosya yolum şu şekilde: /env/lib/python3.8/site-packages Burda dikkat etmeniz gereken nokta ise içine kodu yazdığımız main.py dosyasını da buraya kopyaladım ki zipin içinde olsun.

Şimdi ziplediğimiz bu dosyayı lambdaya yükleyeceğiz. Upload from yazan butona tıklayıp .zip file seçeneğini seçelim.

ss7

Sonra da dosyamızı yükleyelim.

ss8

Süper kodumuz geldi.

ss9

Geriye tek bir ayarımız kaldı sonra lambda ile işimiz bitiyor. Runtime settings kısmında handlerı düzeltmemiz gerekiyor. İlgili görselleri takip edebilirsiniz burda da.

ss10

ss11

İsterseniz test edin beklediğimiz çıktı aşağıdaki gibi olmalı.

1
2
3
4
START RequestId: 7ce4c2cb-9b60-484b-83fe-46693aea173c Version: $LATEST
<Response [200]>
END RequestId: 7ce4c2cb-9b60-484b-83fe-46693aea173c
REPORT RequestId: 7ce4c2cb-9b60-484b-83fe-46693aea173c	Duration: 264.31 ms	Billed Duration: 265 ms	Memory Size: 128 MB	Max Memory Used: 49 MB	Init Duration: 285.05 ms

AWS EventBridge Kuralı Oluşturalım

Harika geldik buraya kadar. Şimdi gelin oluşturduğumuz lambdayı her gün düzenli olarak çalıştıralım. İlk olarak AWS EventBridge servisine ordan da Rules menüsüne gidelim.

ss1

Create rule diyerek yeni bir rule oluşturalım. Açılan sayfada bir isim belirleyin. Sonrasında Define pattern kısmında Schedule seçeneğini seçin. Şimdi her gün çalışacak bir Cron expression yazacağız. Aşağıdaki gibi yazabilirsiniz:

0 10 */1 * ? *

ss2

Son olarak kullanacağımız lambdayı da seçeceğiz ve artık hazırız. Select targets kısmında lambdanızın ismini seçmeniz yeterlidir. Create diyerek oluşturuyoruz ve tamamdır.

ss3

Artık lambdanız her gün düzenli olarak çalışacaktır.


Umarım yazı işinize yaramıştır. Anlamadığınız yerleri ya da isteklerinizi, önerilerinizi bana iletbilirsiniz. Keyifli haftalar dilerim :)


Yararlandığım Kaynaklar

This post is licensed under CC BY 4.0 by the author.
İçindekiler