Python ile e-ticaret sitesinden başlık ve fiyatları çektiğim ve bunları gogle sheets üzerine yazan bir script hazırladım. Script python pandas, gspread ve requests-html kütüphanelerini kullanıyor. Bu kütüphanelerin çalıştığı bir lambda fonksiyonu yaratmak için serverless.com işime çok yaradı.
Ubuntu kurulu linux bilgisayar üzerinden denedim. serverless.com üzerinden kayt olup aws hesabınzı bağlamanız gerekiyor. İhtiyacınız olan aws key bilgilerinin nasıl alınacağı hakkında örnek videolar mevcut.
Serverles kurulumu ile başladım.
npm install -g serverless
Python 3 kullanan service template kodu aşağıdaki şekilde
$ serverless create \
--template aws-python3 \
--name ebartan-test \
--path ebartan-test
cd ebartan-test çalışma klasörüne giriş yaptıktan sonra ile yaptığım işlem virtual enviroment olarak çalışmak.
virtualenv venv --python=python3
source venv/bin/activate
serverless.com handler.py dosyasını hello fonksiyonu ile otomatik yaratıyor. serverless.yml dosyası aşağıdaki şekilde olması gerekiyor.
service: ebartan-test
provider:
name: aws
runtime: python3.6
functions:
ebartan-test: (AWS Lambda fonksiyon adı)
handler: handler.main
benim yapacağım ilk şe pip ile ihtiyacım olan paketleri yüklemek. handler.py dosyamda kullandığım paketler içi pip install komutu ile yüklemeleri yaptım.
from requests_html import HTMLSession
import gspread
import pandas as pd
paketinizin gereksinimleri requirements.txt dosyasında bulunyor. pip freeze ile uyumlu hale gitrmeniz gerekiyor.
(venv) $ pip freeze > requirements.txt
Depolamaya geçmeden önce ihyiacımız olan serverless-python-requirements plugin yüklemek için npm init komutu ile package.json dosyası yaratıyoruz.
(venv) $ npm init
(venv) $ npm install --save serverless-python-requirements
serverless.yml dosyamızda birkaç konfigürasyona daha ihtiyacımız var. aşağıdaki satırları serverless.yml dosyamızın üst bölümüne ekliyoruz.
package:
patterns:
- '!node_modules/**'
- '!venv/**'
- '!.serverless/**'
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
package patterns ile fonksiyon deploy için zip haline getirildiğinde boyut olarak gereksiz doayalardan arınmış oluyor.
serverless.yml dosyamızda fonksiyonun maksimum çalışma zamanını timeout: 900 saniye yani 15 dakika olarak ayarladım.
functions:
ebartan-test:
timeout: 900
handler: handler.main
Lokal bilgisayarda sorunsuz çalıştığından emin olun. Daha sonra serverles deploy komutu ile zip dosyanızı aws lambda bölümüne upload yapabilirsiniz.
(venv) $ serverless deploy
Haftanın her günü geceyarısından sonra çalışmasını istiyordum. 350 satırdan oluşan bir sorgum vardı. 0-175 ve 151-350 şeklinde ikiye ayırdım.