Grunderna i händelsestyrd arkitektur

Serverlösa applikationer med AWS Lambda

Claudio Canales

Senior DevOps Engineer

Repetition: en mental modell för Lambda

  • Händelsekälla: vad som utlöser Lambda.
  • Händelsepayload: JSON som beskriver vad som hände.
  • Handler: koden som bearbetar det.
  • Utfall: svar eller sidoeffekt.
  • Loggar: där du felsöker problem.

Lambdas exekveringsflöde

Serverlösa applikationer med AWS Lambda

Händelser är meddelanden

  • En händelse beskriver något som har inträffat.
  • Det är vanligtvis ett JSON-meddelande med metadata.
  • Din handler extraherar fält och vidtar åtgärder.

Dörrklocksanalogi för händelser

Serverlösa applikationer med AWS Lambda

Vanliga händelsekällor i AWS

  • Amazon S3 utlöser händelser vid uppladdningar.
  • Amazon SQS är en hanterad kö som levererar meddelanden.
  • DynamoDB Streams producerar en ändringslogg.
  • Var och en producerar en olika JSON-payload.

Händelsekällor: S3 vs SQS vs Streams

Serverlösa applikationer med AWS Lambda

Synkron vs asynkron anrop

  • Synkron: anroparen väntar på ett svar.
  • Asynkron: anroparen får en bekräftelse; händelsen bearbetas senare.

Analogi för synkron vs asynkron

Serverlösa applikationer med AWS Lambda

Grunderna i händelsestyrd arkitektur

  • Händelser anländer som JSON från AWS-tjänster.
  • Anropsläget avgör var fel visas.
  • Payloads varierar – tolka och validera defensivt.
  • Räkna med omförsök och dubbletter.

Pipeline med viktiga lärdomar

Serverlösa applikationer med AWS Lambda

Payloads är kontrakt

  • Payloads är kontrakt: avsändaren bestämmer strukturen.
  • Din handler måste veta var fälten finns.
  • Extrahera det du behöver, validera det, bearbeta det och logga.

Payloadkontrakt och tolkningsflöde

Serverlösa applikationer med AWS Lambda

Exempelpayload: SQS-meddelandehändelse

Annoterad SQS-händelsepayload

  • Records är batchen.
  • body är en sträng.
  • messageId hjälper dig att spåra och deduplicera.
Serverlösa applikationer med AWS Lambda

Genomgång: iterera genom Records

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Läs Records med ett säkert standardvärde.
  • Iterera genom varje post och extrahera body.
  • Logga det som är viktigt och returnera sedan.

Iterera genom Records

Serverlösa applikationer med AWS Lambda

Genomgång: tolka JSON-body på ett säkert sätt

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 är en sträng; tolka den med json.loads.
  • Läs med ett säkert standardvärde som "{}".
  • Extrahera order_id och returnera JSON med json.dumps.

Flöde för body-tolkning

Serverlösa applikationer med AWS Lambda

Checklista för defensiv tolkning

Checklista för defensiv tolkning

  • Logga händelsestrukturen en gång när du lär dig en ny källa.
  • Använd .get() och standardvärden för valfria fält.
  • Validera obligatoriska fält och returnera tydliga felmeddelanden.
  • Hantera tomma batchar och saknade nycklar.
Serverlösa applikationer med AWS Lambda

Designa för omförsök och dubbletter

  • Många händelsekällor levererar minst en gång.
  • Dubbletter kan förekomma.
  • Designa idempotenta handlers så att dubbel bearbetning ger korrekt resultat.

Försök igen och dubbletter

Serverlösa applikationer med AWS Lambda

Idempotens i praktiken

  • Välj en unik nyckel, som messageId eller order_id.
  • Lagra varje bearbetad nyckel i DynamoDB.
  • Kontrollera om nyckeln finns; om den gör det, hoppa över jobbet.

Beslutsflöde för idempotens

Serverlösa applikationer med AWS Lambda

Viktiga lärdomar

  • Händelser anländer som JSON från AWS-tjänster.
  • Anropsläget avgör var fel visas.
  • Payloads varierar – tolka och validera defensivt.
  • Räkna med omförsök och dubbletter.

Pipeline med viktiga lärdomar

Serverlösa applikationer med AWS Lambda

Nu kör vi en övning!

Serverlösa applikationer med AWS Lambda

Preparing Video For Download...