Lambda mit AWS-Services integrieren

Serverlose Anwendungen mit AWS Lambda

Claudio Canales

Senior DevOps Engineer

Die Integrationsschleife

  • Event rein.
  • Handler-Logik.
  • SDK-Call.

Event -> Handler -> SDK-Schleife

Serverlose Anwendungen mit AWS Lambda

Trigger vs. SDK-Calls

Trigger

  • Entscheidet, wann Lambda läuft.

SDK-Call (im Handler)

  • Liest und schreibt Services wie DynamoDB und S3.

Trigger vs. SDK-Call

Serverlose Anwendungen mit AWS Lambda

Ein konkretes Beispiel

  • Eine Datei landet in S3.
  • Lambda läuft.
  • Kleinen Datensatz in DynamoDB speichern.

S3-Upload -> Lambda -> DynamoDB

Serverlose Anwendungen mit AWS Lambda

Event-Payload: Finde, was du brauchst

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

S3-Ereignispayload, markierte Felder

Serverlose Anwendungen mit AWS Lambda

Wo das AWS SDK passt

  • Dein Code ruft das SDK (boto3) auf.
  • Das SDK ruft AWS-APIs auf.
  • IAM ist der Gatekeeper.

Handler -> SDK -> AWS-API

Serverlose Anwendungen mit AWS Lambda

Ausführungsrolle = Anmeldedaten

  • Temporäre Anmeldedaten aus der Ausführungsrolle.
  • Keine Access Keys im Code.
  • Kann die Rolle eine API nicht aufrufen, scheitert der SDK-Call.

Ausführungsrolle liefert Anmeldedaten

Serverlose Anwendungen mit AWS Lambda

Least Privilege: Aktionen + Ressourcen eingrenzen

  • Verringert den Schadensumfang.
  • Gewähre nur nötige Aktionen und Ressourcen.
  • Vermeide Wildcards, außer wirklich nötig.

Least Privilege: Aktionen und Ressourcen

Serverlose Anwendungen mit AWS Lambda

DynamoDB: die richtige Operation wählen

  • PutItem schreibt.
  • GetItem liest per Schlüssel.
  • Query findet zugehörige Items.
  • Bevorzuge gezielte Operationen statt breiter Scans.

DynamoDB-Operationen

Serverlose Anwendungen mit AWS Lambda

S3: mit Bucket + Key arbeiten

  • Objekte liegen bei Bucket + Key.
  • GetObject holt den Inhalt.
  • PutObject schreibt eine neue abgeleitete Datei.

S3-Bucket und Key

Serverlose Anwendungen mit AWS Lambda

Konfiguration in Umgebungsvariablen legen

  • Harte Ressourcennamen sind fragil.
  • Nutze Umgebungsvariablen.
  • Gleiches Codepaket für Dev und Prod.

Konfiguration per Umgebungsvariablen

Serverlose Anwendungen mit AWS Lambda

SDK-Code: klein halten und testbar machen

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Eingaben validieren, SDK aufrufen, zurückgeben.
  • Teste die reine Logik per Unit-Tests.

Kleiner Handler mit SDK-Call

Serverlose Anwendungen mit AWS Lambda

SDK-Fehler gezielt behandeln

  • Zu Beginn sind Berechtigungsfehler häufig.
  • Wenn ein Aufruf scheitert, mach die Ursache sichtbar.
  • Gute Logs erleichtern sicheres Debuggen.

Erfolgs- und Fehlerpfade

Serverlose Anwendungen mit AWS Lambda

Wenn IAM falsch ist, wirkt der Code korrekt

AccessDeniedException
required action denied
  • Erst IAM fixen, dann Handler-Logik.

Zugriff verweigert

Serverlose Anwendungen mit AWS Lambda

Idempotenz: sichere Retries und Duplikate

  • Dasselbe Event kann doppelt kommen.
  • Idempotenzschlüssel verhindern Doppelverarbeitung.
  • Bedingte Writes machen Wiederholungen sicher.

Idempotenz-Key-Muster

Serverlose Anwendungen mit AWS Lambda

Alles zusammenfügen (End-to-End)

  • S3-Event liefert Bucket und Key.
  • Handler parst beides.
  • PutItem schreibt Metadaten nach DynamoDB.
  • CloudWatch Logs zeigen, was passiert ist.

End-to-End-Integrationsübersicht

Serverlose Anwendungen mit AWS Lambda

Wichtigste Erkenntnisse

  • Trenne Trigger von SDK-Calls.
  • Enge Berechtigungen mit der Ausführungsrolle.
  • Portable Konfiguration per Env Vars.

Integration: wichtigste Punkte

Serverlose Anwendungen mit AWS Lambda

Lass uns üben!

Serverlose Anwendungen mit AWS Lambda

Preparing Video For Download...