Event source mappings en streamverwerking

Serverless-toepassingen met AWS Lambda

Claudio Canales

Senior DevOps Engineer

Waar event source mappings passen

  • Queues en streams worden vaak in batches gepolld.
  • Event source mappings beheren polling en batching.

Positie van event source mapping

Serverless-toepassingen met AWS Lambda

Wat is een event source mapping?

  • Een resource die een bron aan je functie koppelt.
  • Lambda polt de bron op records.
  • Lambda roept je handler aan met een batch.

Flow van event source mapping

Serverless-toepassingen met AWS Lambda

Push vs poll (waarom het telt)

Push-model

  • Push-bronnen sturen events direct.
  • Voorbeeld: een upload naar Amazon S3.

Poll-model

  • Poll-bronnen worden door Lambda gecheckt.
  • Lambda bouwt een batch en roept je handler aan.
  • Dit beïnvloedt latentie en retry-gedrag.

Push vs poll modellen

Serverless-toepassingen met AWS Lambda

Queue vs stream

Queue (Amazon SQS)

  • Een beheerde berichtenqueue, zoals een inbox.

Stream (DynamoDB Streams)

  • Een changelog voor een DynamoDB-tabel.
  • Beide komen als Records, maar de betekenis verschilt.

Queue vs stream vergelijking

Serverless-toepassingen met AWS Lambda

Batch-eventvorm (vereenvoudigd)

{
  "Records": [{
    "messageId": "abc-123",
    "body": "{\"order_id\": \"A-42\"}"
  }]
}
  • De meeste mapping-events beginnen met Records.
  • Elk record heeft een messageId en een body-string.
  • Parse body naar je eigen payload.
Serverless-toepassingen met AWS Lambda

Walkthrough: elk record verwerken

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 standaardlijst.
  • Loop door elk record en lees body veilig.
  • Log wat je nodig hebt en return.
Serverless-toepassingen met AWS Lambda

Walkthrough: JSON-body parsen

import json

def lambda_handler(event, context):
    record = event.get("Records", [])[0]
    payload = json.loads(record.get("body", "{}"))
    order_id = payload.get("order_id")
    print("ORDER_ID:", order_id)
    return {"statusCode": 200}
  • Importeer json en lees body met een veilige default.
  • Parse met json.loads naar een dict.
  • Haal velden op die je nodig hebt; valideer altijd eerst.
Serverless-toepassingen met AWS Lambda

Batching: batchgrootte en batchvenster

  • Batchgrootte: aantal records per aanroep.
  • Batchvenster: hoelang Lambda wacht om te vullen.
  • Grotere batches verhogen throughput maar kosten meer per run.
  • Voor SQS: monitor ApproximateAgeOfOldestMessage voor achterstand.

Afweging batchgrootte diagram

Serverless-toepassingen met AWS Lambda

Afwegingen bij batchgrootte

  • Grote batches zijn efficiënt maar verhogen latentie.
  • Kleine batches verlagen time-to-first-processing maar verhogen aanroepen.
  • Kies op basis van je workload.

Batchgrootte vs latentie grafiek

Serverless-toepassingen met AWS Lambda

Schalen met gelijktijdigheid

  • Meerdere batches worden tegelijk verwerkt.
  • Hogere gelijktijdigheid verhoogt throughput.
  • Maar verhoogt ook downstream-belasting.

Gelijktijdige batchverwerking

Serverless-toepassingen met AWS Lambda

Bescherm downstream-systemen

  • Te veel gelijktijdigheid kan een database of API overbelasten.
  • Gebruik limieten om de load te beheersen.
  • Kies kleine, veilige werkpakketten.

Bescherming tegen downstream-belasting

Serverless-toepassingen met AWS Lambda

Gedeeltelijke batchfouten

  • Een batch kan goede en foute records bevatten.
  • Zonder gedeeltelijke fouten retried één fout het hele batch.
  • Met gedeeltelijke fouten retry je alleen mislukte items.

Flow voor gedeeltelijke batchfouten

Serverless-toepassingen met AWS Lambda

Walkthrough: gedeeltelijke fouten rapporteren (SQS)

def lambda_handler(event, context):
    failures = []
    for record in event.get("Records", []):
        try:
            process(record)
        except Exception:
            failures.append({"itemIdentifier": record["messageId"]})
    return {"batchItemFailures": failures}
  • Verzamel messageIds van mislukte records in batchItemFailures.
  • Lambda retryt alleen die items.
  • Succesvol verwerkte records worden niet opnieuw gestuurd.
Serverless-toepassingen met AWS Lambda

Belangrijkste punten

  • Event source mappings pollen queues en streams.
  • Ze leveren Records in batches aan je handler.
  • Batchgrootte en -venster ruilen latentie voor throughput.
  • Gedeeltelijke fouten voorkomen herverwerking van successen.

Samenvattingsdiagram mapping

Serverless-toepassingen met AWS Lambda

Laten we oefenen!

Serverless-toepassingen met AWS Lambda

Preparing Video For Download...