Grundlagen ereignisgesteuerter Architektur

Serverlose Anwendungen mit AWS Lambda

Claudio Canales

Senior DevOps Engineer

Recap: ein Lambda-Denkmuster

  • Eventquelle: löst Lambda aus.
  • Event-Payload: JSON mit dem Geschehenen.
  • Handler: Code, der verarbeitet.
  • Ergebnis: Antwort oder Seiteneffekt.
  • Logs: zum Debuggen.

Lambda-Ausführungsfluss

Serverlose Anwendungen mit AWS Lambda

Events sind Nachrichten

  • Ein Event beschreibt ein Geschehen.
  • Meist eine JSON-Nachricht mit Metadaten.
  • Dein Handler liest Felder und handelt.

Türklingel-Analogie für Events

Serverlose Anwendungen mit AWS Lambda

Häufige Eventquellen in AWS

  • Amazon S3 triggert Events bei Uploads.
  • Amazon SQS ist eine verwaltete Queue für Nachrichten.
  • DynamoDB Streams erzeugt ein Change-Log.
  • Jede Quelle hat eine andere JSON-Payload.

Eventquellen: S3 vs. SQS vs. Streams

Serverlose Anwendungen mit AWS Lambda

Synchron vs. asynchron aufrufen

  • Synchron: Aufrufer wartet auf ein Ergebnis.
  • Asynchron: Aufrufer bekommt eine Bestätigung; Verarbeitung später.

Analogie: Synchron vs. asynchron

Serverlose Anwendungen mit AWS Lambda

Grundlagen ereignisgesteuerter Architektur

  • Events kommen als JSON von AWS-Services.
  • Aufrufmodus beeinflusst, wo Fehler erscheinen.
  • Payloads variieren: defensiv parsen und validieren.
  • Retries und Duplikate einkalkulieren.

Wichtigste Erkenntnisse

Serverlose Anwendungen mit AWS Lambda

Payloads sind Verträge

  • Payloads sind Verträge: der Sender bestimmt das Format.
  • Dein Handler muss die Felder finden.
  • Relevantes extrahieren, validieren, verarbeiten und loggen.

Payload-Vertrag und Parsing-Workflow

Serverlose Anwendungen mit AWS Lambda

Beispiel-Payload: SQS-Message-Event

Kommentierte SQS-Event-Payload

  • Records ist das Batch.
  • body ist ein String.
  • messageId hilft beim Tracen und Deduplizieren.
Serverlose Anwendungen mit AWS Lambda

Walkthrough: durch Records iterieren

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Records mit sicherem Default lesen.
  • Über jede Record iterieren und body extrahieren.
  • Wichtiges loggen, dann zurückgeben.

Durch Records iterieren

Serverlose Anwendungen mit AWS Lambda

Walkthrough: JSON-Body sicher parsen

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 ist ein String; mit json.loads parsen.
  • Mit sicherem Default wie "{}" lesen.
  • order_id extrahieren und mit json.dumps zurückgeben.

Body-Parsing-Flow

Serverlose Anwendungen mit AWS Lambda

Checkliste: defensives Parsing

Checkliste: defensives Parsing

  • Event-Form einmal loggen, wenn Quelle neu ist.
  • .get() und Defaults für optionale Felder.
  • Pflichtfelder validieren und klare Fehler liefern.
  • Leere Batches und fehlende Keys behandeln.
Serverlose Anwendungen mit AWS Lambda

Für Retries und Duplikate designen

  • Viele Quellen liefern mindestens einmal.
  • Duplikate sind möglich.
  • Idempotente Handler entwerfen: doppelte Verarbeitung bleibt korrekt.

Retries und Duplikate

Serverlose Anwendungen mit AWS Lambda

Idempotenz in der Praxis

  • Eindeutigen Schlüssel wählen, z. B. messageId oder order_id.
  • Jeden verarbeiteten Schlüssel in DynamoDB speichern.
  • Existenz prüfen; falls vorhanden, Arbeit überspringen.

Idempotenz-Entscheidungsfluss

Serverlose Anwendungen mit AWS Lambda

Wichtigste Erkenntnisse

  • Events kommen als JSON von AWS-Services.
  • Aufrufmodus beeinflusst, wo Fehler erscheinen.
  • Payloads variieren: defensiv parsen und validieren.
  • Retries und Duplikate einkalkulieren.

Wichtigste Erkenntnisse

Serverlose Anwendungen mit AWS Lambda

Lass uns üben!

Serverlose Anwendungen mit AWS Lambda

Preparing Video For Download...