Olay güdümlü mimari temelleri

AWS Lambda ile Sunucusuz Uygulamalar

Claudio Canales

Senior DevOps Engineer

Tek bir Lambda için zihin modeli: özet

  • Olay kaynağı: Lambda'yı tetikleyen şey.
  • Olay yükü: ne olduğunu anlatan JSON.
  • İşleyici: bunu işleyen kod.
  • Sonuç: yanıt veya yan etki.
  • Günlükler: sorunları burada ayıklarsınız.

Lambda yürütme akışı

AWS Lambda ile Sunucusuz Uygulamalar

Olaylar iletilerdir

  • Bir olay, gerçekleşen bir şeyi açıklar.
  • Genellikle üst verili bir JSON iletisidir.
  • İşleyiciniz alanları çıkarır ve işlem yapar.

Olaylar için kapı zili benzetmesi

AWS Lambda ile Sunucusuz Uygulamalar

AWS'de yaygın olay kaynakları

  • Amazon S3, yüklemelerde olay tetikler.
  • Amazon SQS, iletileri teslim eden yönetilen bir kuyruktur.
  • DynamoDB Streams bir değişiklik günlüğü üretir.
  • Her biri farklı bir JSON yükü üretir.

Olay kaynakları: S3 vs SQS vs Streams

AWS Lambda ile Sunucusuz Uygulamalar

Eşzamanlı vs eşzamanlı olmayan çağrı

  • Eşzamanlı: çağıran sonuç bekler.
  • Eşzamanlı olmayan: çağıran onay alır; olay sonra işlenir.

Senkron vs asenkron benzetmesi

AWS Lambda ile Sunucusuz Uygulamalar

Olay güdümlü mimari temelleri

  • Olaylar AWS hizmetlerinden JSON olarak gelir.
  • Çağrı modu hataların nerede görüneceğini değiştirir.
  • Yükler farklıdır; savunmacı ayrıştırın ve doğrulayın.
  • Yeniden denemeler ve yinelenenleri varsayın.

Önemli çıkarımlar hattı

AWS Lambda ile Sunucusuz Uygulamalar

Yükler birer sözleşmedir

  • Yükler sözleşmedir: biçimi gönderen belirler.
  • İşleyiciniz alanların nerede olduğunu bilmelidir.
  • Gerekeni çıkarın, doğrulayın, işleyin ve kaydedin.

Yük sözleşmesi ve ayrıştırma iş akışı

AWS Lambda ile Sunucusuz Uygulamalar

Örnek yük: SQS ileti olayı

Açıklamalı SQS olay yükü

  • Records paket (batch) bilgisidir.
  • body bir dizgedir.
  • messageId izleme ve yinelenenleri ayıklamada yardımcı olur.
AWS Lambda ile Sunucusuz Uygulamalar

Adım adım: Records üzerinde yineleme

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Records'u güvenli varsayılanla okuyun.
  • Her kayıtta döngü yapıp body'yi çıkarın.
  • Önemli olanı günlüğe yazın, sonra dönün.

Records üzerinde döngü

AWS Lambda ile Sunucusuz Uygulamalar

Adım adım: JSON gövdesini güvenle ayrıştırma

import json
def lambda_handler(event, context):
    records = event.get("Records") or [{}]
    body = records[0].get("body", "{}")
    payload = json.loads(body)
    oid = payload.get("order_id")
    return json.dumps({"order_id": oid})
  • body bir dizgedir; json.loads ile ayrıştırın.
  • "{}" gibi güvenli varsayılanla okuyun.
  • order_id'yi çıkarın ve json.dumps ile JSON döndürün.

Gövde ayrıştırma akışı

AWS Lambda ile Sunucusuz Uygulamalar

Savunmacı ayrıştırma kontrol listesi

Savunmacı ayrıştırma kontrol listesi

  • Yeni bir kaynak öğrenirken olay biçimini bir kez günlüğe yazın.
  • İsteğe bağlı alanlar için .get() ve varsayılanları kullanın.
  • Zorunlu alanları doğrulayın ve net hatalar döndürün.
  • Boş paketleri ve eksik anahtarları yönetin.
AWS Lambda ile Sunucusuz Uygulamalar

Yeniden deneme ve yinelenmelere göre tasarım

  • Birçok olay kaynağı en az bir kez teslimat kullanır.
  • Yinelenenler olabilir.
  • İdempotent işleyiciler tasarlayın; iki kez işlense de doğru kalsın.

Yeniden denemeler ve yinelenenler

AWS Lambda ile Sunucusuz Uygulamalar

Uygulamada idempotensi

  • messageId veya order_id gibi benzersiz bir anahtar seçin.
  • Her işlenen anahtarı DynamoDB'de saklayın.
  • Anahtar varsa kontrol edin; varsa işi atlayın.

İdempotensi karar akışı

AWS Lambda ile Sunucusuz Uygulamalar

Önemli çıkarımlar

  • Olaylar AWS hizmetlerinden JSON olarak gelir.
  • Çağrı modu hataların nerede görüneceğini değiştirir.
  • Yükler farklıdır; savunmacı ayrıştırın ve doğrulayın.
  • Yeniden denemeler ve yinelenenleri varsayın.

Önemli çıkarımlar hattı

AWS Lambda ile Sunucusuz Uygulamalar

Hadi pratik yapalım!

AWS Lambda ile Sunucusuz Uygulamalar

Preparing Video For Download...