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.
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.
“Create function” butonuna tıkladıktan sonra artık bir Lambda functionımız oluşmuş oldu.
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.
- 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
- 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ı.
Test sekmesine basıp kodumuzu test ettiğimizde aşağıdaki gibi hatalar verecektir.
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.
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.
Sonra da dosyamızı yükleyelim.
Süper kodumuz geldi.
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.
İ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.
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 * ? *
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.
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 :)