DEV Community

Cover image for AWS Lambda ile Zamanlanmış İşlemler
Ali İlteriş Keskin
Ali İlteriş Keskin

Posted on

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ı -> AWS Lambda ile Python


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.

lambda1

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.

lambda2

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

lambda3

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

    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ı

    import requests

    def get_func():
        users = requests.get('https://jsonplaceholder.typicode.com/users')
        print(users)

    def run(event, context):
        return get_func()
Enter fullscreen mode Exit fullscreen mode

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ı.

lambda4

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

lambda4

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.

lambda5

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.

lambda6

Sonra da dosyamızı yükleyelim.

lambda7

Süper kodumuz geldi.

lambda8

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.

lambda9

lambda10

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

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
Enter fullscreen mode Exit fullscreen mode

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.

eventbridge1

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 * ? *

eventbridge2

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.

eventbridge3

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

Discussion (4)

Collapse
merveealpay profile image
Merve Alpay

Super bir yazi olmus elinize saglik. Bir python gelistiricisi olarak AWS’de kullandiginiz servislerle ilgili yazilariniz cook ilgimi cekti umarim devami gelir :)

Collapse
ilteriskeskin profile image
Ali İlteriş Keskin Author

Evet devamı gelecek diye umuyorum ben de. Yazı sonlarında da belirttiğim gibi konu önerisi alıyorum :) İyi okumalar dilerim.

Collapse
selamet profile image
Selamet

İlteriş hocam harika bir içerik olmuş elinize sağlık.

Collapse
ilteriskeskin profile image
Ali İlteriş Keskin Author

Selamet hocam desteğiniz için teşekkür ederim :)