Skriva och testa Lambda-kod

Serverlösa applikationer med AWS Lambda

Claudio Canales

Senior DevOps Engineer

Varför testning och loggning är viktigt

  • Riktiga händelser är röriga och ser olika ut.
  • Testning fångar fel innan användarna gör det.
  • Loggar är din "svarta låda" vid felsökning.

Testning är ett brandlarm

Serverlösa applikationer med AWS Lambda

Ett flöde att komma ihåg

Grundläggande flödesverktyg

  • Händelse in -> handler körs -> svar ut.
  • Använd loggar och testhändelser för felsökning.

Lambda-anropsflöde

Serverlösa applikationer med AWS Lambda

Var loggar hamnar: CloudWatch Logs

  • Lambda skriver print()-utdata och fel dit som standard.
  • CloudWatch Logs är AWS logglager för tjänster.
  • Logggrupper ser ut som /aws/lambda/<function-name>.

Handler loggar till CloudWatch Logs

Serverlösa applikationer med AWS Lambda

Handler-kontraktet

  • event är inmatningens nyttolast.
  • context innehåller metadata om körningen.
  • Returvärdet blir funktionens svar.

Handler-kontrakt: event + context -> svar

Serverlösa applikationer med AWS Lambda

Genomgång: event och context

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

Förklaringar till event och context

Serverlösa applikationer med AWS Lambda

Tolka indata på ett säkert sätt

  • Använd event.get() för valfria fält.
  • Validera obligatoriska indata tidigt.
  • Returnera tydliga fel för saknade fält.

Tolka säkert och validera tidigt

Serverlösa applikationer med AWS Lambda

Genomgång: validera obligatorisk indata

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')}!"}

Valideringsgren: 400 vs 200

Serverlösa applikationer med AWS Lambda

Kantfall att testa

  • Saknade fält (tom JSON).
  • Fel typer (name är ett tal).
  • Extra fält eller stora nyttolaster.

Exempel på kantfallsnyttolaster

Serverlösa applikationer med AWS Lambda

Returnera ett förutsägbart svar

  • Håll svarsstrukturen konsekvent.
  • Använd statusCode för lyckade anrop och fel.
  • JSON-koda svarets body.

Svarsformat: statusCode + JSON body

Serverlösa applikationer med AWS Lambda

Genomgång: returnera JSON

import json

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

json.dumps: dict till JSON-text

Serverlösa applikationer med AWS Lambda

Loggning och spårning

  • Logga viktiga fält (använd JSON vid behov).
  • Inkludera context.aws_request_id för spårning.
  • Logga aldrig hemligheter eller personuppgifter.
  • Som standard hamnar Lambda-loggar i CloudWatch Logs.

Bästa praxis för loggning

Serverlösa applikationer med AWS Lambda

Genomgång: strukturerad loggning

import json

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

Strukturerad loggning – JSON-rad

Serverlösa applikationer med AWS Lambda

Testa med konsolhändelser

  • Skapa namngivna testhändelser.
  • Testa normalflödet och kantfall.
  • Granska svar och loggar efter varje körning.

Testhändelser i konsolen

Serverlösa applikationer med AWS Lambda

En enkel felsökningsloop

  • Gör en liten kodändring.
  • Distribuera och kör sedan en testhändelse.
  • Läs svar och CloudWatch Logs.

Felsökningsloop

Serverlösa applikationer med AWS Lambda

Nu kör vi en övning!

Serverlösa applikationer med AWS Lambda

Preparing Video For Download...