Scrierea și testarea codului Lambda

Aplicații serverless cu AWS Lambda

Claudio Canales

Senior DevOps Engineer

De ce contează testarea și jurnalizarea

  • Evenimentele reale sunt variate și imprevizibile.
  • Testarea prinde erorile înainte ca utilizatorii să le întâmpine.
  • Jurnalele sunt "cutia neagră" pentru depanare.

Testarea este un exercițiu de pregătire

Aplicații serverless cu AWS Lambda

Un flux de reținut

Setul de instrumente pentru flux

  • Eveniment -> handler rulează -> răspuns.
  • Folosește jurnale și evenimente de test pentru depanare.

Fluxul de invocare Lambda

Aplicații serverless cu AWS Lambda

Unde ajung jurnalele: CloudWatch Logs

  • Lambda scrie acolo implicit rezultatele print() și erorile.
  • CloudWatch Logs este spațiul AWS de stocare a jurnalelor.
  • Grupurile de jurnale au forma /aws/lambda/<function-name>.

Handler-ul jurnalizează în CloudWatch Logs

Aplicații serverless cu AWS Lambda

Contractul handler-ului

  • event este payload-ul de intrare.
  • context furnizează metadate despre execuție.
  • Valoarea returnată devine răspunsul funcției.

Contractul handler-ului: event + context -> răspuns

Aplicații serverless cu AWS Lambda

Parcurgere: event și context

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

Detalii event și context

Aplicații serverless cu AWS Lambda

Parsarea sigură a intrărilor

  • Preferă event.get() pentru câmpurile opționale.
  • Validează intrările obligatorii de la început.
  • Returnează erori clare pentru câmpurile lipsă.

Parsare sigură și validare timpurie

Aplicații serverless cu AWS Lambda

Parcurgere: validarea intrărilor obligatorii

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

Ramura de validare: 400 vs 200

Aplicații serverless cu AWS Lambda

Cazuri limită de testat

  • Câmpuri lipsă (JSON gol).
  • Tipuri greșite (name este un număr).
  • Câmpuri suplimentare sau payload-uri mari.

Exemple de payload-uri pentru cazuri limită

Aplicații serverless cu AWS Lambda

Returnarea unui răspuns previzibil

  • Păstrează o structură consistentă a răspunsului.
  • Folosește statusCode pentru succes sau erori.
  • Codifică body-ul răspunsului în JSON.

Structura răspunsului: statusCode + body JSON

Aplicații serverless cu AWS Lambda

Parcurgere: returnarea JSON

import json

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

json.dumps: dict în text JSON

Aplicații serverless cu AWS Lambda

Jurnalizare și trasabilitate

  • Jurnalizează câmpurile cheie (folosește JSON când e necesar).
  • Include context.aws_request_id pentru trasabilitate.
  • Evită jurnalizarea secretelor sau datelor personale.
  • Implicit, jurnalele Lambda ajung în CloudWatch Logs.

Bune practici de jurnalizare

Aplicații serverless cu AWS Lambda

Parcurgere: jurnalizare structurată

import json

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

Linie de jurnal JSON structurat

Aplicații serverless cu AWS Lambda

Testarea cu evenimente din consolă

  • Creează evenimente de test cu nume.
  • Testează scenariul de succes și cazurile limită.
  • Analizează răspunsul și jurnalele după fiecare rulare.

Evenimente de test din consolă

Aplicații serverless cu AWS Lambda

Un ciclu simplu de depanare

  • Fă o modificare mică în cod.
  • Deployează, apoi rulează un eveniment de test.
  • Citește răspunsul și CloudWatch Logs.

Ciclul de depanare

Aplicații serverless cu AWS Lambda

Hai să exersăm!

Aplicații serverless cu AWS Lambda

Preparing Video For Download...