Essentials van event‑gedreven architectuur

Serverless-toepassingen met AWS Lambda

Claudio Canales

Senior DevOps Engineer

Recap: één mentaal model voor Lambda

  • Eventbron: wat Lambda triggert.
  • Eventpayload: JSON dat beschrijft wat er gebeurde.
  • Handler: code die dit verwerkt.
  • Resultaat: response of neveneffect.
  • Logs: waar je issues debugt.

Lambda‑uitvoeringsflow

Serverless-toepassingen met AWS Lambda

Events zijn berichten

  • Een event beschrijft iets dat gebeurde.
  • Meestal een JSON‑bericht met metadata.
  • Je handler haalt velden op en onderneemt actie.

Deurbel‑analogie voor events

Serverless-toepassingen met AWS Lambda

Veelvoorkomende eventbronnen in AWS

  • Amazon S3 triggert events bij uploads.
  • Amazon SQS is een beheerde queue die berichten levert.
  • DynamoDB Streams produceert een changelog.
  • Elk levert een andere JSON‑payload.

Eventbronnen: S3 vs SQS vs Streams

Serverless-toepassingen met AWS Lambda

Synchrone vs asynchrone aanroep

  • Synchroon: aanroeper wacht op resultaat.
  • Asynchroon: aanroeper krijgt bevestiging; event wordt later verwerkt.

Analogie sync vs async

Serverless-toepassingen met AWS Lambda

Essentials van event‑gedreven architectuur

  • Events komen als JSON van AWS‑services.
  • Aanroepmodus bepaalt waar fouten verschijnen.
  • Payloads verschillen, dus parse en valideer defensief.
  • Ga uit van retries en duplicaten.

Belangrijkste punten‑pipeline

Serverless-toepassingen met AWS Lambda

Payloads zijn contracten

  • Payloads zijn contracten: de zender bepaalt de vorm.
  • Je handler moet weten waar de velden staan.
  • Extraheer wat je nodig hebt, valideer, verwerk en log.

Payload‑contract en parse‑workflow

Serverless-toepassingen met AWS Lambda

Voorbeeldpayload: SQS‑bericht‑event

Aantekeningen bij SQS‑eventpayload

  • Records is de batch.
  • body is een string.
  • messageId helpt bij traceren en dedupliceren.
Serverless-toepassingen met AWS Lambda

Walkthrough: itereren over Records

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Lees Records met een veilige default.
  • Loop per record en haal de body op.
  • Log wat telt en retourneer.

Door Records itereren

Serverless-toepassingen met AWS Lambda

Walkthrough: JSON‑body veilig 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})
  • De body is een string; parse met json.loads.
  • Lees met een veilige default zoals "{}".
  • Haal order_id op en retourneer JSON met json.dumps.

Body‑parseflow

Serverless-toepassingen met AWS Lambda

Checklist defensief parsen

Checklist defensief parsen

  • Log de events‑structuur één keer bij een nieuwe bron.
  • Gebruik .get() en defaults voor optionele velden.
  • Valideer verplichte velden en geef duidelijke fouten.
  • Handel lege batches en ontbrekende keys af.
Serverless-toepassingen met AWS Lambda

Ontwerp voor retries en duplicaten

  • Veel eventbronnen leveren minimaal‑één‑keer.
  • Duplicaten kunnen voorkomen.
  • Ontwerp idempotente handlers zodat dubbel verwerken correct blijft.

Retries en duplicaten

Serverless-toepassingen met AWS Lambda

Idempotentie in de praktijk

  • Kies een unieke key, zoals messageId of order_id.
  • Sla elke verwerkte key op in DynamoDB.
  • Check of de key bestaat; zo ja, sla het werk over.

Idempotentie‑beslissingsflow

Serverless-toepassingen met AWS Lambda

Belangrijkste punten

  • Events komen als JSON van AWS‑services.
  • Aanroepmodus bepaalt waar fouten verschijnen.
  • Payloads verschillen, dus parse en valideer defensief.
  • Ga uit van retries en duplicaten.

Belangrijkste punten‑pipeline

Serverless-toepassingen met AWS Lambda

Laten we oefenen!

Serverless-toepassingen met AWS Lambda

Preparing Video For Download...