Lambda-code schrijven en testen

Serverless-toepassingen met AWS Lambda

Claudio Canales

Senior DevOps Engineer

Waarom testen en loggen tellen

  • Echte events zijn rommelig en hebben vele vormen.
  • Testen vangt fouten vóór je gebruikers.
  • Logs zijn je "black box" voor debuggen.

Testen is een brandoefening

Serverless-toepassingen met AWS Lambda

Eén flow om te onthouden

Toolkit voor kernflow

  • Event in -> handler draait -> response uit.
  • Gebruik logs + testevents om te debuggen.

Lambda-aanroepflow

Serverless-toepassingen met AWS Lambda

Waar logs heen gaan: CloudWatch Logs

  • Lambda schrijft print()-output en errors daar standaard naartoe.
  • CloudWatch Logs is AWS' logopslag voor services.
  • Loggroepen zien eruit als /aws/lambda/<function-name>.

Handler logt naar CloudWatch Logs

Serverless-toepassingen met AWS Lambda

Het handlercontract

  • event is de inputpayload.
  • context geeft runtime-metadata.
  • De returnwaarde wordt de functierespons.

Handlercontract: event + context -> response

Serverless-toepassingen met AWS Lambda

Walkthrough: event en context

def lambda_handler(event, context):
    request_id = context.aws_request_id
    time_left = context.get_remaining_time_in_millis()
    return {"statusCode": 200}

Aanduidingen voor event en context

Serverless-toepassingen met AWS Lambda

Input veilig parsen

  • Gebruik liever event.get() voor optionele velden.
  • Valideer verplichte input vroeg.
  • Geef duidelijke errors bij missende velden.

Veilig parsen en vroeg valideren

Serverless-toepassingen met AWS Lambda

Walkthrough: verplichte input valideren

def lambda_handler(event, context):
    if not event.get("name"):
        return {"statusCode": 400, "body": "Missing: name"}
    return {"statusCode": 200, "body": f"Hello, {event.get('name')}!"}

Validatiepad: 400 vs 200

Serverless-toepassingen met AWS Lambda

Edge cases om te testen

  • Missende velden (lege JSON).
  • Verkeerde types (name is een nummer).
  • Extra velden of grote payloads.

Voorbeelden van edge-case payloads

Serverless-toepassingen met AWS Lambda

Een voorspelbare respons retourneren

  • Houd een consistente responsvorm.
  • Gebruik statusCode voor succes of fouten.
  • JSON-encodeer je response body.

Response-envelope: statusCode + JSON-body

Serverless-toepassingen met AWS Lambda

Walkthrough: JSON retourneren

import json

def lambda_handler(event, context):
    body = {"message": "ok"}
    return {"statusCode": 200, "body": json.dumps(body)}

json.dumps: dict naar JSON-tekst

Serverless-toepassingen met AWS Lambda

Loggen en tracen

  • Log sleutelvelden (gebruik JSON indien nodig).
  • Voeg context.aws_request_id toe voor tracing.
  • Log geen secrets of persoonsgegevens.
  • Standaard gaan Lambda-logs naar CloudWatch Logs.

Best practices voor loggen

Serverless-toepassingen met AWS Lambda

Walkthrough: gestructureerd loggen

import json

def lambda_handler(event, context):
    print(json.dumps({"request_id": context.aws_request_id, "event": event}))
    return {"statusCode": 200}

Gestructureerde logging: JSON-regel

Serverless-toepassingen met AWS Lambda

Testen met console-events

  • Maak benoemde testevents.
  • Test de happy path en edge cases.
  • Check response + logs na elke run.

Console-testevents

Serverless-toepassingen met AWS Lambda

Een simpele debugloop

  • Maak een kleine codewijziging.
  • Deploy, voer dan een testevent uit.
  • Lees response + CloudWatch Logs.

Debugloop-cyclus

Serverless-toepassingen met AWS Lambda

Laten we oefenen!

Serverless-toepassingen met AWS Lambda

Preparing Video For Download...