Lambda-Code schreiben und testen

Serverlose Anwendungen mit AWS Lambda

Claudio Canales

Senior DevOps Engineer

Warum Tests und Logging wichtig sind

  • Reale Events sind unordentlich und sehr unterschiedlich.
  • Tests finden Fehler, bevor Nutzende sie sehen.
  • Logs sind deine „Blackbox" zum Debuggen.

Testen ist eine Feuerübung

Serverlose Anwendungen mit AWS Lambda

Ein Flow zum Merken

Kern-Flow-Toolkit

  • Event rein -> Handler läuft -> Response raus.
  • Mit Logs + Test-Events debuggen.

Lambda-Aufruf-Flow

Serverlose Anwendungen mit AWS Lambda

Wohin Logs gehen: CloudWatch Logs

  • Lambda schreibt print()-Ausgaben und Fehler dort standardmäßig hin.
  • CloudWatch Logs ist AWSs Log-Speicher für Services.
  • Log-Gruppen sehen aus wie /aws/lambda/<function-name>.

Handler loggt nach CloudWatch Logs

Serverlose Anwendungen mit AWS Lambda

Der Handler-Vertrag

  • event ist die Eingabe-Payload.
  • context liefert Laufzeit-Metadaten.
  • Der Rückgabewert ist die Funktionsantwort.

Handler-Vertrag: event + context -> response

Serverlose Anwendungen mit AWS Lambda

Walkthrough: event und context

def lambda_handler(event, context):
    request_id = context.aws_request_id
    time_left = context.get_remaining_time_in_millis()
    return {"statusCode": 200}

Event- und Context-Hervorhebungen

Serverlose Anwendungen mit AWS Lambda

Eingaben sicher parsen

  • Für optionale Felder event.get() nutzen.
  • Pflichtangaben früh prüfen.
  • Fehlende Felder klar melden.

Sicher parsen und früh validieren

Serverlose Anwendungen mit AWS Lambda

Walkthrough: Pflichtfelder prüfen

def lambda_handler(event, context):
    if not event.get("name"):
        return {"statusCode": 400, "body": "Missing: name"}
    return {"statusCode": 200, "body": f"Hello, {event.get('name')}!"}

Validierungszweig: 400 vs 200

Serverlose Anwendungen mit AWS Lambda

Edge Cases zum Testen

  • Fehlende Felder (leeres JSON).
  • Falsche Typen (name ist eine Zahl).
  • Zusätzliche Felder oder große Payloads.

Beispiele für Edge-Case-Payloads

Serverlose Anwendungen mit AWS Lambda

Vorhersagbare Responses zurückgeben

  • Einheitliches Response-Format beibehalten.
  • statusCode für Erfolg oder Fehler nutzen.
  • Response-Body als JSON kodieren.

Response-Umhüllung: statusCode + JSON-Body

Serverlose Anwendungen mit AWS Lambda

Walkthrough: JSON zurückgeben

import json

def lambda_handler(event, context):
    body = {"message": "ok"}
    return {"statusCode": 200, "body": json.dumps(body)}

json.dumps: dict zu JSON-Text

Serverlose Anwendungen mit AWS Lambda

Logging und Tracing

  • Wichtige Felder loggen (bei Bedarf als JSON).
  • context.aws_request_id fürs Tracing einfügen.
  • Keine Secrets oder Personendaten loggen.
  • Standardmäßig landen Lambda-Logs in CloudWatch Logs.

Logging Best Practices

Serverlose Anwendungen mit AWS Lambda

Walkthrough: strukturiertes Logging

import json

def lambda_handler(event, context):
    print(json.dumps({"request_id": context.aws_request_id, "event": event}))
    return {"statusCode": 200}

Strukturiertes Logging: JSON-Zeile

Serverlose Anwendungen mit AWS Lambda

Mit Konsolen-Events testen

  • Benannte Test-Events anlegen.
  • Happy Path und Edge Cases testen.
  • Nach jedem Lauf Response + Logs prüfen.

Konsolen-Test-Events

Serverlose Anwendungen mit AWS Lambda

Ein einfacher Debug-Loop

  • Kleine Codeänderung machen.
  • Deployen, dann Test-Event ausführen.
  • Response + CloudWatch Logs lesen.

Debug-Loop-Zyklus

Serverlose Anwendungen mit AWS Lambda

Lass uns üben!

Serverlose Anwendungen mit AWS Lambda

Preparing Video For Download...