Lambdas Ausführungsmodell verstehen

Serverlose Anwendungen mit AWS Lambda

Claudio Canales

Senior DevOps Engineer

Automatische Ausführung

Ereignisgesteuertes AWS

  • Lambda führt Code bei Ereignissen aus.
  • Beispiel: S3-Upload -> Bild skalieren.
  • Verschiedene Trigger, gleiches Muster.
Serverlose Anwendungen mit AWS Lambda

Leerlauf bis zum Trigger

Leerlauf -> Event -> Ausführen -> Stoppen

  • Leerlauf: nichts läuft.
  • Event: Handler läuft, dann stoppt es.

Bewegungsmelder-Analogie für Lambda

  • Wie ein Bewegungsmelder: Leerlauf bis Trigger.
  • Trigger schaltet „aus" auf „ein".
Serverlose Anwendungen mit AWS Lambda

Was ist AWS Lambda?

AWS Lambda auf einen Blick

  • Ereignisgesteuerter Compute-Service.
  • Skaliert automatisch mit der Nachfrage.
  • Du zahlst nur für Laufzeit.
Serverlose Anwendungen mit AWS Lambda

So führt Lambda deinen Code aus

Ablauf der Lambda-Ausführung

  • Eine Ereignisquelle triggert Lambda.
  • Lambda übergibt das Ereignis-Payload an deinen Handler.
  • Dein Handler liefert ein Ergebnis.
Serverlose Anwendungen mit AWS Lambda

Skalierung nach Bedarf

Skalierung erzeugt mehr Umgebungen

  • Mehr Events: mehr parallele Aufrufe.
  • Lambda startet zusätzliche Umgebungen.
  • Cold Starts können pro neuer Umgebung auftreten.
Serverlose Anwendungen mit AWS Lambda

Die Handler-Funktion

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: Eingabe-Payload (JSON).
  • context: Laufzeit-Metadaten.
  • return: Ausgabe (oder Erfolg/Fehler).

Handler erhält event und context

Serverlose Anwendungen mit AWS Lambda

Das Event-Objekt

Objektspeicher-Ereignis-Payload

S3-Event: Bucket + Object Key.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Gleiche Aufgabe: Relevantes extrahieren.

HTTP-Request-Ereignis-Payload

API-Event: Methode, Pfad, Body.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Unterschiedliche Trigger, unterschiedliches JSON.
Serverlose Anwendungen mit AWS Lambda

Das Context-Objekt

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Verbleibende Zeit bis Timeout.
  • aws_request_id Request-ID fürs Log-Tracking.
Serverlose Anwendungen mit AWS Lambda

Zustandslose Ausführung

Warmstart: Wiederverwendung vs. Reset

  • Jeder Aufruf ist unabhängig.
  • Wiederverwendung möglich, nicht garantiert.
  • Zustand außerhalb von Lambda speichern.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Serverlose Anwendungen mit AWS Lambda

Cold Starts

Zeitablauf bei Cold Start

  • Neue Ausführungsumgebung.
  • Code und Abhängigkeiten laden.
  • Init ausführen, dann Handler.
Serverlose Anwendungen mit AWS Lambda

Warm Starts

Zeitablauf bei Warm Start

  • Vorhandene Umgebung wiederverwenden.
  • Meiste Initialisierung überspringen.
  • Handler startet früher.
Serverlose Anwendungen mit AWS Lambda

Init, Invoke, Freeze

Lebenszyklus der Ausführungsumgebung

  • Init läuft einmal pro Umgebung.
  • Handler läuft pro Aufruf.
  • Zwischen Aufrufen kann die Umgebung einfrieren.
Serverlose Anwendungen mit AWS Lambda

Für Cold Starts optimieren

# init (einmal pro Umgebung)
import boto3
s3 = boto3.client('s3')
# handler (jeder Aufruf)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init einmal vs. Handler pro Aufruf

  • Importe und SDK-Clients außerhalb des Handlers platzieren.
Serverlose Anwendungen mit AWS Lambda

Lass uns üben!

Serverlose Anwendungen mit AWS Lambda

Preparing Video For Download...