AWS Lambda ile Zamanlanmış İşlemler
Tags: python, aws, serverless, eventbridge
Published: 2022-01-22 23:30:55

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](https://heybooster.ai) günlük, saatlik veya haftalık çalışmasını istediğimiz scriptleri [AWS EventBridge](https://aws.amazon.com/tr/eventbridge/) ile zamanlıyoruz. [Bir önceki yazımda](https://dev.to/ilteriskeskin/aws-lambda-ile-python-5bk0) lambda function oluşturmayı anlatmıştım. Bugün ise lambdaya farklı şekilde kodumuzu yüklemeyi ve bunu [AWS EventBridge](https://aws.amazon.com/tr/eventbridge/) ile zamanlı bir şekilde çalıştırmaktan bahsedeceğim. Hazırsak başlayalım &#129496;

---

**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](https://dev.to/ilteriskeskin/aws-lambda-ile-python-5bk0)

---

### 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](https://aws.amazon.com/tr/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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/is3nh4toh9ua47kb0yk9.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xjjq3uu9mkly65rjrjj.png)

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


![lambda3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dpr80ggwt40ty5ldcic7.png)

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
    ```bash
    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ı
   ```python
    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ı.


![lambda4](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0wcyx0lov1lry5gcnzlz.png)

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


![lambda4](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oxa83960cbnts1zhvul1.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3m7ljdeovww55kvqselm.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43t6iek42isxwwb0ddxw.png)

Sonra da dosyamızı yükleyelim.


![lambda7](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ac81xk9ori0szkwk55lm.png)

Süper kodumuz geldi.


![lambda8](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v1bs2th85cg4bf2inh6r.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8yspr3yt0eqg0y8fpu8y.png)


![lambda10](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvmyqnsdxoxxqs4mhka4.png)

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

```bash
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.


![eventbridge1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qmur6t7qzhojgx90qflx.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ndd51r2215mabq2ioew9.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bpi7xlqufxpr44ojwzq.png)

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

* [https://aws.amazon.com/tr/lambda/](https://aws.amazon.com/tr/lambda/)
* [https://aws.amazon.com/tr/eventbridge/](https://aws.amazon.com/tr/eventbridge/)
* [https://ilteriskeskin.github.io/posts/aws-eventbridge-with-lambda-function/](https://ilteriskeskin.github.io/posts/aws-eventbridge-with-lambda-function/)