Scrivere e testare codice Lambda

Applicazioni serverless con AWS Lambda

Claudio Canales

Senior DevOps Engineer

Perché test e log contano

  • Gli eventi reali sono disordinati e vari.
  • I test trovano errori prima degli utenti.
  • I log sono la tua "scatola nera" per il debug.

Il testing è un'esercitazione antincendio

Applicazioni serverless con AWS Lambda

Un flusso da ricordare

Toolkit del flusso principale

  • Event in -> handler esegue -> response out.
  • Usa log + eventi di test per il debug.

Flusso di invocazione Lambda

Applicazioni serverless con AWS Lambda

Dove vanno i log: CloudWatch Logs

  • Lambda scrive lì output di print() ed errori per default.
  • CloudWatch Logs è l'archivio log dei servizi AWS.
  • I log group hanno forma /aws/lambda/<function-name>.

L'handler invia log a CloudWatch Logs

Applicazioni serverless con AWS Lambda

Il contratto dell'handler

  • event è il payload di input.
  • context fornisce metadati di runtime.
  • Il valore di ritorno è la risposta della funzione.

Contratto handler: event + context -> response

Applicazioni serverless con AWS Lambda

Walkthrough: event e context

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

Richiami a event e context

Applicazioni serverless con AWS Lambda

Analisi sicura dell'input

  • Preferisci event.get() per campi opzionali.
  • Valida presto gli input obbligatori.
  • Restituisci errori chiari per campi mancanti.

Analizza in sicurezza e valida presto

Applicazioni serverless con AWS Lambda

Walkthrough: valida input obbligatori

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

Ramo di validazione: 400 vs 200

Applicazioni serverless con AWS Lambda

Edge case da testare

  • Campi mancanti (JSON vuoto).
  • Tipi errati (name è un numero).
  • Campi extra o payload grandi.

Esempi di payload edge case

Applicazioni serverless con AWS Lambda

Restituire risposte prevedibili

  • Mantieni una risposta con forma coerente.
  • Usa statusCode per successi o errori.
  • Codifica in JSON il body della risposta.

Busta di risposta: statusCode + body JSON

Applicazioni serverless con AWS Lambda

Walkthrough: restituire JSON

import json

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

json.dumps: dict in testo JSON

Applicazioni serverless con AWS Lambda

Logging e tracing

  • Logga i campi chiave (usa JSON quando serve).
  • Includi context.aws_request_id per il tracing.
  • Evita di loggare segreti o dati personali.
  • Per default, i log Lambda finiscono in CloudWatch Logs.

Best practice di logging

Applicazioni serverless con AWS Lambda

Walkthrough: logging strutturato

import json

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

Riga di log strutturato in JSON

Applicazioni serverless con AWS Lambda

Test con eventi in console

  • Crea eventi di test nominati.
  • Testa il percorso felice e gli edge case.
  • Rivedi risposta + log dopo ogni run.

Eventi di test dalla console

Applicazioni serverless con AWS Lambda

Un semplice ciclo di debug

  • Fai una piccola modifica al codice.
  • Distribuisci, poi esegui un evento di test.
  • Leggi risposta + CloudWatch Logs.

Ciclo di debug

Applicazioni serverless con AWS Lambda

Andiamo a praticare!

Applicazioni serverless con AWS Lambda

Preparing Video For Download...