Psaní a testování kódu v Lambda

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Proč záleží na testování a logování

  • Reálné události jsou nepředvídatelné a různorodé.
  • Testování odhalí chyby dřív než uživatelé.
  • Logy jsou tvoje „černá skříňka" pro ladění.

Testování jako cvičný požární poplach

Serverless Applications with AWS Lambda

Jeden tok, který si zapamatuješ

Základní sada nástrojů pro tok

  • Událost přijde → handler se spustí → odpověď odejde.
  • K ladění používej logy a testovací události.

Průběh volání Lambda

Serverless Applications with AWS Lambda

Kam míří logy: CloudWatch Logs

  • Lambda tam standardně zapisuje výstup print() i chyby.
  • CloudWatch Logs je úložiště logů AWS pro služby.
  • Skupiny logů vypadají jako /aws/lambda/<function-name>.

Handler loguje do CloudWatch Logs

Serverless Applications with AWS Lambda

Kontrakt handleru

  • event je vstupní payload.
  • context poskytuje metadata běhového prostředí.
  • Návratová hodnota se stane odpovědí funkce.

Kontrakt handleru: event + context -> odpověď

Serverless Applications with AWS Lambda

Ukázka: event a context

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

Popis event a context

Serverless Applications with AWS Lambda

Bezpečné parsování vstupu

  • Pro volitelná pole preferuj event.get().
  • Povinné vstupy ověřuj hned na začátku.
  • Pro chybějící pole vrať srozumitelnou chybu.

Bezpečné parsování a včasná validace

Serverless Applications with AWS Lambda

Ukázka: validace povinného vstupu

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

Větev validace: 400 vs 200

Serverless Applications with AWS Lambda

Hraniční případy k otestování

  • Chybějící pole (prázdné JSON).
  • Špatné typy (name je číslo).
  • Nadbytečná pole nebo velké payloady.

Příklady hraničních payloadů

Serverless Applications with AWS Lambda

Předvídatelná odpověď funkce

  • Udržuj konzistentní tvar odpovědi.
  • Používej statusCode pro úspěch i chyby.
  • Tělo odpovědi zakóduj jako JSON.

Obálka odpovědi: statusCode + tělo JSON

Serverless Applications with AWS Lambda

Ukázka: vracení JSON

import json

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

json.dumps: slovník na text JSON

Serverless Applications with AWS Lambda

Logování a trasování

  • Loguj klíčová pole (v případě potřeby jako JSON).
  • Pro trasování zahrni context.aws_request_id.
  • Neloguj tajné ani osobní údaje.
  • Lambda ve výchozím nastavení zapisuje logy do CloudWatch Logs.

Osvědčené postupy logování

Serverless Applications with AWS Lambda

Ukázka: strukturované logování

import json

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

Strukturovaný log jako řádek JSON

Serverless Applications with AWS Lambda

Testování pomocí událostí v konzoli

  • Vytvoř pojmenované testovací události.
  • Testuj standardní průběh i hraniční případy.
  • Po každém spuštění zkontroluj odpověď a logy.

Testovací události v konzoli

Serverless Applications with AWS Lambda

Jednoduchý cyklus ladění

  • Udělej malou změnu v kódu.
  • Nasaď ji a spusť testovací událost.
  • Přečti odpověď a logy v CloudWatch Logs.

Cyklus ladění

Serverless Applications with AWS Lambda

Pojďme cvičit!

Serverless Applications with AWS Lambda

Preparing Video For Download...