AWS Lambda hız ve maliyet optimizasyonu

Yusuf Baş
5 min readDec 10, 2020

--

AWS Lambda Power Tuning

Lambda işlevlerinizi veriye dayalı bir şekilde maliyet ve performans için optimize etmenize yardımcı olan AWS Step Functions tarafından desteklenen bir durum makinesidir. Durum makinesi, dağıtımı kolay ve çalıştırması hızlı olacak şekilde tasarlanmıştır. Ayrıca, hesabınızdaki tüm Lambda işlevlerini optimize edebilmeniz için dilden bağımsızdır. Böylelikle istediğiniz runtime ile çalıştırma imkanı sağlar.

AWS Lambda Power Tuning kütüphanesine girdi olarak bir Lambda ARN sağlarsınız ve durum makinesi bu Lambdayı birden çok güç yapılandırmasıyla çalıştırır. Bu güç yapılandırmasının aralığını 128MB ile 10GB arasında, hangi değer olacağına siz belirlersiniz. Ardından, tüm execution log’u analiz edecektir. Maliyeti en aza indirmek ve performansı en üst düzeye çıkarmak için size en iyi yapılandırmayı önerecektir. Eğer isterseniz stratejinizi en iyi performans ve ya en düşük maliyet olarak yapabilirsiniz.

Örneğin Puppeteer ile belirtilen sayfanın ekran görüntüsü alma fonksiyonunu yazmıştım. Eğer okumak isterseniz buradan ulaşabilirsiniz. Bu fonksiyonda hafıza alanını 128 MB olarak ayarladıktan sonra geri dönüş hızı 10–15 saniye kadar sürmektedir. Fakat hafıza alanını 2048 MB olarak değiştirdiğimizde dönüş hızımız 3 saniye gibi bir süre almaktadır. Hangisi daha performanslı ve daha uygun oluyor? Bunun cevabını yazının devamında kurulumları yaptıktan sonra birlikte görelim.

AWS yönetim konsolundaki her adım yukarıdaki görselde belirtilmiştir.

Yukarıda ki resimi biraz inceleyelim. Step function ilk kısmında Initializer bölümü yer alıyor. Initializer, ARN’sini verdiğimiz fonksiyonumuzun yanında verdiğimiz ayarların her birini fonksiyonumuza uyguluyor ve çalıştırılmaya hazır hale getiriyor. Executor kısmında ayarları tamamlanan her bir fonksiyon için istek atma işlemi gerçekleşiyor. Cleaner kısmında yapılan konfigürasyon temizleniyor. Analyzer ve optimizer bize çıktı olarak gelecek hesaplamalar yapılıyor. Aynı grafiği Amazon Web Konsolunda görmek için haydi başlayalım!

Durum makinesini nasıl yükleriz?

Durum makinemizi yüklemek için bir çok seçeneğimiz var. Bu seçeneklerin hepsini görüntülemek isterseniz buradan ulaşabilirsiniz. Gayet basit kurulumu olduğu düşündüğüm AWS Serverless Application Repository aracılığıyla kurulumunu yapacağız.
Öncelikle buradan uygulamanın bulunduğu AWS Serverless reposuna gidiyoruz.

AWS Serverless Repositery

Sağ üstte bulunan Deploy butonuna bastıktan sonra devam ediyoruz. Önümüze gelen Create function bölümünde aşağıya doğru inip “I acknowledge that this app creates custom IAM roles.” kısmını onayladıktan sonra default ayarlarıyla deploy ediyoruz. Ta-ta-ta-taaaam! Kurulumu bu kadar basit. Artık her fonksiyonumuz için optimizasyon testi yapabiliriz.

Durum makinesini nasıl çalıştırırız?

Yüklemede olduğu gibi çalıştırırken birçok seçeneğimiz mevcut. Çalıştırma yollarının hepsini buradan erişebilirsiniz. Yazının başındaki grafiği görebilmek için AWS Web konsol yoluyla çalıştırmak istiyorum. Öncelikle AWS Web konsoluna giriş yapalım daha sonra servisler kısmından Step functions servisine gidelim. Açılan sayfada listelenen durum makinelerinden powerTuningStateMachine adıyla başlayanı bulalım ve açalım.

Resimde işaret edilen Start Execution butonuna basalım.

Açılan pencerede bizim bir input girmemiz bekleniyor. Aşağıda paylaştığım şekilde input girişini yapabilirsiniz ve ya açıklamalarını yaptığım parametreleri ekleyerek başlatabilirsiniz. Sizinle paylaştığım inputu giriyorum ve Start Execution diyerek devam ediyoruz.

Step functionumuz başladı. Yazının başında belirttiğim grafiği görüntülemiş olduk. Her adımın üstüne tıklayarak sağ tarafta step input ve step outputu görüntüleyebiliriz. Her adımı interaktif bir şekilde takip edebiliriz. Ayrıca işlemlerimiz devam ederken gerçekleşen eventleri sayfanın aşağısından takip edebilirsiniz.

Ve artık fonksiyonumuzun optimizasyon testi tamamlandı konfigürasyonda strategy olarak cost belirtmiştik ve belirttiğimiz stratejide en az maliyetli olanın 512 MB olduğunun çıktısını aldık. Visualization alanındaki url ile grafiğimizin oluşturulduğu sayfaya gidiyoruz.

Belirttiğimiz konfigürasyona göre yapılan testlerde bize en iyi sürede ve en az maliyette görebilmemiz için grafik çıkarmış oldu. Eğer strategy olarak cost değilde speed seçmiş olsaydık daha farklı bir grafik ve step function inputu elde ederdik.

Fonksiyonumu test ederken kullandığım konfigürasyonumu hemen aşağıda bulabilirsiniz.

{
"lambdaARN": "Lambda ARN Yazılmalı buraya",
"powerValues": [512, 1024, 1536, 2048, 3008],
"num": 5,
"payload": {
"body":{
"page_url":"http://www.google.com",
"image_name":"google-image"
}
},
"parallelInvocation": true,
"strategy": "cost"
}

Ayarların açıklamaları

  • lambdaARN: Optimizasyon yapılacak Lambda fonksiyonumuzun sahip olduğu ARN
  • powerValues: Fonksiyonumuzda kullanılacak hafıza boyutları. 128MB, 256MB, 512MB, 1024MB, 1536MB, ve 3008MB Değerleri girilebilir. Bütün hepsini kapsamak için “ALL” yazmanız yeterlidir.
  • num: Test edilecek her bir fonksiyon için çağrılma sayısı. Minimum 5 olmalıdır fakat önerilen 10 ile 100 arasında bir değer verilmesidir.
  • payload: Fonksiyona istek yapıldığına yollanacak veri. Eğer fonksiyonunuz body’i parse edip işlem yapıyorsa dikkat ediniz çünkü stringfy şeklinde yollanmıyor.
  • parallelInvocation:Fonksiyonların paralel olarak çağırılmasının durumudur. true yada false değeri alır. Default olarak false değeri almaktadır.
  • balancedWeight: Hız ve maliyet arasında dengeyi belirtmek için kullanırız. Minimum 0.0 Maksimum 1.0 değeri alabilir. 0.0 Hıza, 1.0 ise maliyete eşittir.Böylelikle hız ve maliyet arasında bir orantı kurabilirsiniz. Not:strategy balanced olması gerekmektedir
  • strategy: cost,speed ve balanced değerleri alır. Fonksiyonlarımızın analizinde beklenen sonucu ayarlamamızı sağlayan parametredir. cost seçilirse en ucuz seçenek, eğer speed seçilirse en performanslı sonuç elde edilir. balanced değeri kullandığımızda balancedWeight paremetresindeki değerler baz alınır.

Daha fazla ayara buradan ulaşabilirsiniz.

Özet

Fonksiyonlarımızın maliyet ve performans hesaplamalarını yaparken bize yardımcı olacak bir açık kaynak projesidir. Büyük hafıza boyutu gerektiren ve zaman problemi yaşatabilecek fonksiyonların çözümü için uygulanabilir. Herkese minimum maliyetli roket hızında fonksiyonlar diliyorum :)

--

--

Yusuf Baş
Yusuf Baş

No responses yet

Write a response