AWS ile sunucusuz (serverless) backend geliştirme

Lambda, SQS, S3 ve Secrets Manager ile sunucu yönetmeden çalışan arka uçlar; altyapı AWS SAM şablonunda kod olarak tanımlı.

AWS Lambda, API Gateway, SQS ve S3 ile sunucusuz arka uçlar kuruyor, altyapıyı AWS SAM ile kod olarak tanımlıyoruz. Rigel ve LydiaVault böyle çalışıyor.

Son güncelleme:

Bu teknolojiyle geliştirdiklerimiz

Hepsi yayında; mağaza sayfalarına ve ayrıntılara Ürünler sayfasından ulaşabilirsiniz.

Rigel

Yapay zekâ video uygulaması

API Gateway arkasında Lambda fonksiyonları; bildirim ve e-posta gönderimi hata kuyruklu SQS’te, dosyalar S3’te, OpenAI anahtarı Secrets Manager’da, alarmlar CloudWatch’ta. Hepsi tek bir SAM şablonunda.

Ürünü incele

LydiaVault

Yapay zekâ bütçe koçu

API Gateway ve Lambda; harcama fişleri S3’te tutulup süreli imzalı bağlantılarla açılıyor, şifre sıfırlama e-postaları SES ile gidiyor, banka bağlantısı webhook’ları ayrı bir fonksiyona geliyor.

Ürünü incele

Sunucusuz arka uç ne zaman doğru seçim

Sunucusuz (serverless) bir arka uçta sürekli açık duran bir sunucu yok. Kod, AWS Lambda üzerinde fonksiyonlar olarak duruyor ve yalnızca bir istek, bir kuyruk mesajı ya da zamanı gelmiş bir görev olduğunda çalışıyor. İstekler artınca AWS aynı fonksiyonun yeni kopyalarını açıyor; işletim sistemi, kapasite ve yük dağıtımı AWS’nin sorumluluğunda. Bize düşen iş, fonksiyonları, aralarındaki kuyrukları, yetkileri ve izlemeyi doğru kurmak.

AWS serverless’ın iyi oturduğu durumlar

  • Bir mobil uygulamanın arka ucunu kuruyorsunuz ve trafik kampanyalara, saatlere ya da dönemlere göre inip çıkıyor
  • İşlerin bir kısmı kullanıcıyı bekletmeden yürüyebilir: bildirim, e-posta, dışa aktarma, dış servislerden gelen webhook’lar
  • Sunucu güncellemek ve izlemek için ayrı bir ekip ayırmak istemiyorsunuz
  • Şirketiniz zaten AWS kullanıyor ya da yeni sistemin AWS hesabınızda çalışmasını istiyorsunuz

Başka bir yol önereceğimiz durumlar

  • Uygulama sürekli açık bağlantılara dayanıyor: Hippotenus’un Socket.IO ile çalışan mesajlaşması sürekli çalışan bir sunucuda duruyor
  • Yük gün boyu yüksek ve düzenli: sabit bedelli bir sunucu, Docker ve Coolify ile daha öngörülebilir olabilir
  • Verinin sizin seçtiğiniz belirli bir sunucuda durması gerekiyor: Hippotenus ve Logaritim kendi sunucumuzda Docker ve Coolify ile çalışıyor
  • Tek bir isteğin içinde uzun süren bir hesap yapılması gerekiyor: bir Lambda çağrısının çalışma süresi sınırlı
AWS Lambda (SAM ile)Kendi sunucunuz (Docker ve Coolify ile)
Trafik yokkenFonksiyon çalışmıyor; Lambda istek sayısına ve çalışma süresine göre ücretlendiriliyorSunucu her an açık ve bedeli değişmiyor
Ani yoğunlukAWS yeni kopyalar açıyor; sınırı hesabın eşzamanlılık kotası ve veritabanı belirliyorSunucunun gücüyle sınırlı; büyütmek önceden planlama istiyor
Uzun iş ve kalıcı bağlantıİş kuyruğa ya da ayrı bir fonksiyona bölünüyorSürekli çalışan bir süreç doğrudan taşıyor
Bakımİşletim sistemi AWS’de; Node.js sürümünü şablonda biz yükseltiyoruzİşletim sistemi yamaları, disk ve yedek sizin ya da bakım ekibinin işi
Bizim örneğimizRigel, LydiaVaultHippotenus, Logaritim, pepechura.com

Rigel ve LydiaVault’ta hangi AWS servisi ne iş yapıyor

Kata Technology için geliştirdiğimiz iki mobil uygulamanın arka ucu AWS üzerinde sunucusuz çalışıyor. Veritabanı her ikisinde de MongoDB; diğer parçalar AWS servisleri:

Lambda

API uç noktaları, webhook’lar, kuyruk işçileri ve zamanlanmış görevler. Rigel’de video birleştirme gibi ağır işler, ffmpeg katmanı eklenmiş ve daha fazla bellek verilmiş ayrı fonksiyonlarda.

API Gateway

REST API’nin kapısı. İstek fonksiyona ulaşmadan önce bir Lambda yetkilendiricisi kullanıcının JWT’sini doğruluyor. Rigel ve LydiaVault’ta; Rigel’in API’si kendi alan adından yayında.

SQS

Rigel’de bildirim ve e-posta gönderim kuyrukları; her kuyruğun arkasında, işlenemeyen mesajları toplayan bir hata kuyruğu (DLQ) var.

S3

Rigel’de yüklenen fotoğraflar ve üretilen videolar, LydiaVault’ta harcama fişleri. Fotoğraflar ve fişler süreli imzalı bağlantılarla açılıyor; Rigel’in videoları CloudFront üzerinden sunuluyor.

Secrets Manager

Rigel OpenAI anahtarını, JWT imzalama anahtarını ve Firebase servis hesabını buradan okuyor; okunan değer fonksiyon kopyası açık kaldıkça bellekte tutuluyor.

SES

Rigel’de kayıt doğrulama kodları ve kampanya e-postaları, LydiaVault’ta şifre sıfırlama e-postaları.

CloudWatch ve X-Ray

Günlükler, günlüklerden üretilen ölçümler, alarmlar ve paneller. X-Ray her iki uygulamada fonksiyon çağrılarını izliyor.

DynamoDB

Rigel’in keşfet akışı için önbellek; kayıtlar süresi dolunca DynamoDB tarafından kendiliğinden siliniyor.

Lambda’da her fonksiyon kopyası kendi veritabanı bağlantısını açar. Bu yüzden MongoDB bağlantısını isteğin dışında, modül düzeyinde tutuyoruz: aynı kopyaya gelen sonraki istekler mevcut bağlantıyı kullanıyor ve bağlantı havuzu bilerek küçük tutuluyor. Rigel’de bağlantı kullanılmadan önce yoklanıyor; kopmuşsa kapatılıp yenisi açılıyor.

Kullanıcıyı bekletmeyen işler: kuyruk, yeniden deneme, hata kuyruğu

Rigel’in yönetim panelinden hazırlanan bildirim ve e-posta kampanyaları, panelin isteği içinde gönderilmiyor. Gönderim, aralarında SQS kuyrukları olan fonksiyonlara bölünmüş durumda:

01
Kampanya panelden planlanıyor
02
Zamanlanmış bir fonksiyon sırası gelen gönderimleri SQS’e yazıyor
03
İşçi fonksiyon mesajları tek tek işliyor
04
Hata alan mesaj kuyruğa dönüp yeniden deneniyor
05
Denemeleri tükenen mesaj hata kuyruğunda inceleme bekliyor
Rigel’de bildirim ve e-posta gönderiminin yolu
  • Her alıcının gönderim durumu veritabanında tutuluyor ve işçi yalnızca hâlâ sırada bekleyen alıcıları alıyor; yeniden denenen bir mesaj, gönderilmiş olarak işaretlenen alıcıyı atlıyor.
  • Aboneliğini iptal eden kullanıcı kampanya e-postalarında atlanıyor; abonelikten çıkma bağlantısı herkese açık bir uç noktaya gidiyor.
  • Yapay zekâ video üretimini hiçbir fonksiyon beklemiyor: Rigel işi sağlayıcıya gönderiyor, sağlayıcı iş bitince Rigel’in webhook’unu çağırıyor. RevenueCat’ten gelen abonelik olayları da kendi webhook fonksiyonuna düşüyor.
  • Yönetim panelindeki veri dışa aktarma gibi uzun işleri, isteği karşılayan fonksiyon başka bir fonksiyona asenkron çağrıyla devrediyor; panel hemen bir iş numarası alıyor ve sonucu sonra soruyor.

Altyapı kod olarak: AWS SAM ve izleme

Rigel’in fonksiyonları, API’si, kuyrukları ve hata kuyrukları, zamanlanmış görevleri, DynamoDB tablosu, alarmları, panelleri ve özel alan adı tek bir AWS SAM şablonunda tanımlı. LydiaVault’ta da fonksiyonlar, API ve yetkilendirici aynı biçimde şablonda. Şablon kodla aynı depoda duruyor; bir kuyruğun ya da alarmın ne zaman, neden eklendiği commit geçmişinde görülüyor.

KonuRigel’de nasılNe kazandırıyor
OrtamlarAynı şablondan staging ve production için ayrı stack’ler; ortam ayarları samconfig dosyasındaİki ortam aynı tanımdan kuruluyor; alarm ve paneller koşulla yalnızca production’da açılıyor
Paketlemesam build her fonksiyonu esbuild ile ayrı ve küçültülmüş olarak paketliyorHer fonksiyon yalnızca kendi kodunu taşıyor
Yayınsam deploy, değişiklikleri uygulamadan önce CloudFormation değişiklik setini gösterip onay istiyorNeyin ekleneceği, değişeceği ya da silineceği önceden görülüyor
Yerel geliştirmesam local ile API geliştiricinin bilgisayarında çalıştırılabiliyorBir değişiklik AWS’ye gitmeden denenebiliyor
Kontrolmain ve develop dallarına gelen her push ve pull request’te GitHub Actions lint, tip denetimi ve birim testlerini çalıştırıyorDerlenmeyen ya da testi kıran kod erkenden görülüyor

İzleme de şablonun parçası. Rigel’in günlükleri yapılandırılmış JSON olarak yazılıyor; CloudWatch ölçüm filtreleri belirli günlük satırlarından, örneğin başarısız video üretimlerinden ve RevenueCat ödeme hatalarından ölçüm üretiyor. Eşiği aşan bir ölçüm alarmı tetikliyor, alarm SNS üzerinden bir Lambda fonksiyonuna, oradan da Slack’e iletiliyor. Kritik fonksiyonların hata seviyesindeki günlük satırları da ayrıca Slack’e düşüyor. X-Ray, Rigel’de dış servislere giden HTTP çağrılarını da izlemeye katıyor.

Bir AWS serverless projesi nasıl ilerliyor

  1. 01

    Ücretsiz keşif görüşmesi

    30 dk

    Hangi işlerin anında, hangilerinin arka planda yapılması gerektiğini ve AWS hesabınızın bugünkü durumunu konuşuyoruz.

  2. 02

    Yazılı kapsam ve teklif

    Fonksiyonları, kuyrukları, zamanlanmış görevleri, veri ve dosya depolamayı ve izlemeyi, kabul kriterleriyle birlikte yazıya döküyoruz.

  3. 03

    Haftalık sürümler

    Her hafta staging ortamına çalışan bir sürüm çıkıyor; uç noktaları uygulamanın kendisinden ya da bir API istemcisinden deneyebiliyorsunuz.

  4. 04

    Test ve yayın

    Senior QA, staging’deki sürümü production’a geçmeden önce test ediyor; production’a çıkarken değişiklik seti gözden geçirilip onaylanıyor.

  5. 05

    Yayından sonraki 30 gün

    30 gün

    Bu dönemde bulunan hataları ücretsiz düzeltiyoruz; ardından aylık bakımla devam edebilirsiniz.

Süre ve bütçe aralıkları hizmet sayfalarımızda ve fiyatlar sayfasında; bu sayfa onlardan farklı bir rakam içermiyor.

AWS serverless hakkında sık sorulanlar

AWS’ye bağımlı kalır mıyım?

Kısmen, ve bunu baştan açıkça konuşuyoruz. İş kuralları sıradan TypeScript kodunda, veritabanı MongoDB; bunlar AWS’ye bağlı değil. SQS, SES, Secrets Manager ve SAM şablonu ise AWS’ye özgü; başka bir ortama geçerken bunların karşılıkları kurulur. S3’ün arayüzü ise yaygın bir standart: Hippotenus dosyalarını aynı AWS SDK ile S3 uyumlu başka bir depolama hizmetinde tutuyor.

Soğuk başlangıç (cold start) sorun olur mu?

Bir fonksiyon kopyası ilk kez açılırken kısa bir gecikme olur. Bunu küçültmek için her fonksiyonu esbuild ile ayrı ve küçültülmüş paketliyoruz; veritabanı bağlantısını, Rigel’de Secrets Manager’dan okunan değerleri de, kopya açık kaldıkça bellekte tutuyoruz. Böylece bu bedeli kopyaya gelen ilk istek ödüyor. Her isteğin gecikmeye çok duyarlı olduğu bir işte bunu keşif görüşmesinde ayrıca ele alıyoruz.

Kubernetes, ECS ya da RDS kullanıyor musunuz?

Rigel ve LydiaVault’ta hayır: ikisi de sunucu ya da konteyner yönetmeden Lambda ile çalışıyor, veritabanları MongoDB. Sürekli çalışan bir konteyner gereken projelerde, Hippotenus ve Logaritim’de olduğu gibi, Docker ve Coolify ile kendi sunucumuzu kullanıyoruz.

Kendi AWS hesabımızda çalışabilir misiniz?

Evet. Altyapı şablonda tanımlı olduğu için aynı şablon sizin hesabınıza kurulabilir; staging ve production’ı ayrı stack’ler olarak açıyoruz. S3 bucket’ı ve alan adı sertifikası gibi şablonun dışında kurulan kaynaklar da şablona parametre olarak verildiği için hangi kaynağın nereden geldiği görülebiliyor.

Proje bitince elimde ne kalır?

Yazılımı süresiz kullanma lisansı ve dokümantasyon. Kaynak kodun SAM şablonuyla birlikte size devredilmesini isterseniz bu ek ücretlidir ve teklifte ayrıca yazılır.

İlgili hizmetler

Mobil uygulamaÖzel yazılımYapay zekâ otomasyonuMVP
İletişim

AWS’de sunucusuz bir arka uç mu düşünüyorsunuz?

30 dakikalık ücretsiz keşif görüşmesinde uygulamanızın hangi parçalarının Lambda’ya, hangilerinin kuyruğa ya da kendi sunucunuza uygun olduğunu birlikte çıkaralım.