AWS Chalice — Acısız Serverless Serüveni (1)

Kemalcan Bora
3 min readJul 10, 2022

Öncelikle tanım ile başlamakta fayda var “serverless” aslında basitçe; “Geliştiricilerin sunucuları yönetmek zorunda kalmadan uygulamalar oluşturmasına ve çalıştırmasına olanak tanıyan, bulutta yerel bir geliştirme modelidir.”[1]

Bu seride sağlayıcılardan yalnızca AWS üzerine konuşacağım ve bildiğim kadarını elimden geldiğince anlatmaya çalışacağım, eksikler vs illa ki olur eğer aa bak burası çok önemli nasıl atladın derseniz mutlaka iletişime geçelim. Öncelikle dillerden başlayalım hangi dilde/dillerde yazılır? Aslında neredeyse çoğu dil destekleniyor NodeJS, Go, Python, Rust, Java, vs.

Hangi dille yazılması gereken sorusu ise bana kalırsa neyi iyi biliyorsanız onunla yazın fakat konu performans ve hız olursa yapılmış bir sürü benchmark var benim gördüğüm okuduğum kadarıyla Rust ve Go suan kafa kafaya önde gidiyorlar peşinden ise Node vs Python geliyor sanırım sonuncular Java ve C# [2]. Biz bu yazı serisinde Chalice üzerinden gideceğiz basitçe Chalice, Flask framework’ünden türetilen bir Serverless framework. Peki bunu ben neden seviyorum aslında sebebi basitlik. Gerek AWS SAM gerek Zappa gerekse Serverless Framework kullanmış biri olarak diyeceğim şudur ki eğer python üzerinden serverless bir şeyler yapmak istiyorsanız adamınız Chalice!

pip install chalice

Eğer proje oluşturmak istersek `chalice new-project` dememiz ve seçeneklerden işimize yarayanları seçmemiz yeterli.

podtube app

Görmüş olduğunuz ekran aslında oluşturmuş olduğum podtube isimli bir projenin girişi amacım ise bu yazı serisinde elimden geldiğince etinden sütünden faydalanıp chalice hakkında bir şeyler karalamak.

AWS Credentials larımızın hazır olduğunu fark ederek deploy ile başlıyorum tek yapmamız gereken şey;

chalice deploy

evet gerçekten bu kadar basit bir şekilde deploy ediyoruz

chalice delete

diyerek de bunu silebiliyoruz. Burada söyle bir soru gelebilir “abi biz test için ayrı prod için ayrı deploy etmek istiyoruz ne yapacağız?” veya “biz bunu farklı bir Aws account da push etmemiz gerekli fakat bu sürekli default hesabımıza gidiyor ne yapmalıyız?” Hızlıca bu soruları yanıtlamaya çalışalım öncelikle test/prod kısmının ayrımını yapabilmemiz için config.json dosyasına ihtiyacımız var.

.chalice içerisine gittiğimiz zaman burada config dosyasını göreceksiniz burada aslında test ve prod olarak ikiye ayırabilir hangi lambdanın kaç ram ile calısacagını belirtebiliyoruz veya burada env tanımlayabiliyoruz şimdilik karmaşık bir şekilde random örnek olması açısından hepsinin dahil olduğu bir config yazacağım.

Yukarıda görmüş olduğunuz şey uygulamayı 2 stage e ayırmış oldum dev tarafına belirli reserved concurrecy ve memory size ayarladım burada api_gateway_policy file ise yine basitce hangi AWS servislerine izin verdiğiniz ile alakalı örneği lambda S3 e erişsin SNS de sadece şunu dinlesin gibi.

Artık yapmamız gereken tek nokta

chalice deploy --stage test

diyerek test isimli stage’e deploy çıkmak.

Burada en önemli nokta şu:

  • Eğer Automatic Layer True derseniz uygulamada kullandığını tüm kütüphaneleri chalice zipler ve lambda altında bir layer oluşturarak oraya pushlar.

Bir diğer soru ise kullanıcılar arasında geçiş yapma işi aslında orada yapmamız gereken nokta daha da basit diyelim ki terminal üzerinden gittiniz

tail -100 ~/.aws/credentials

kayıt olan hesaplarınızı gördünüz eğer firmanız/danışmanlık verdiğiniz kişi veya kurum AWS kullanmıyorsa ve yalnızca siz hobi/kendi işiniz olarak kullanıyorsanız büyük ihtimal sadece default hesabını görecekseniz aksi durumda eklediğiniz hesapları da görmüş olacaksınız. Burada ise tek yapmamız gereken

chalice deploy --profile profile-name

Bu yazı biraz kısa oldu fakat giriş için ideal uzunlukta denebilir bir sonraki yazıda endpoint, pure lambda, chalice schedule cron kavramlarına göz atacağız. Keyifli günler.

Serinin devamı için;

Acısız Serverless Serüveni — 2

Referanslar

--

--