Écrire et tester du code Lambda

Applications serverless avec AWS Lambda

Claudio Canales

Senior DevOps Engineer

Pourquoi les tests et les journaux comptent

  • Les événements réels sont brouillons et variés.
  • Les tests détectent les erreurs avant les utilisateurs.
  • Les journaux sont votre « boîte noire » pour déboguer.

Les tests sont un exercice d'alerte

Applications serverless avec AWS Lambda

Un flux à retenir

Boîte à outils du flux central

  • Event in -> handler s'exécute -> response out.
  • Utilisez les logs + événements de test pour déboguer.

Flux d'invocation Lambda

Applications serverless avec AWS Lambda

Où vont les logs : CloudWatch Logs

  • Lambda envoie par défaut la sortie de print() et les erreurs ici.
  • CloudWatch Logs est le stockage de journaux des services AWS.
  • Les groupes de logs ressemblent à /aws/lambda/<function-name>.

Le handler écrit dans CloudWatch Logs

Applications serverless avec AWS Lambda

Le contrat du handler

  • event est la charge utile d'entrée.
  • context fournit les métadonnées d'exécution.
  • La valeur retournée devient la réponse de la fonction.

Contrat du handler : event + context -> response

Applications serverless avec AWS Lambda

Pas à pas : event et context

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

Annotations pour event et context

Applications serverless avec AWS Lambda

Analyser l'entrée en sécurité

  • Préférez event.get() pour les champs optionnels.
  • Validez tôt les entrées requises.
  • Renvoyez des erreurs claires si des champs manquent.

Analyser prudemment et valider tôt

Applications serverless avec AWS Lambda

Pas à pas : valider une entrée requise

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

Branche de validation : 400 vs 200

Applications serverless avec AWS Lambda

Cas limites à tester

  • Champs manquants (JSON vide).
  • Mauvais types (name est un nombre).
  • Champs en plus ou charges volumineuses.

Exemples de charges limites

Applications serverless avec AWS Lambda

Renvoyer une réponse prévisible

  • Gardez une forme de réponse cohérente.
  • Utilisez statusCode pour succès ou erreurs.
  • Encodez le corps de réponse en JSON.

Enveloppe de réponse : statusCode + corps JSON

Applications serverless avec AWS Lambda

Pas à pas : renvoyer du JSON

import json

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

json.dumps : dict vers texte JSON

Applications serverless avec AWS Lambda

Journalisation et traçage

  • Consignez les champs clés (en JSON si besoin).
  • Incluez context.aws_request_id pour la traçabilité.
  • Évitez les secrets ou données perso dans les logs.
  • Par défaut, Lambda envoie les logs à CloudWatch Logs.

Bonnes pratiques de journalisation

Applications serverless avec AWS Lambda

Pas à pas : logs structurés

import json

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

Ligne JSON de logs structurés

Applications serverless avec AWS Lambda

Tester avec des événements console

  • Créez des événements de test nommés.
  • Testez le cas nominal et les limites.
  • Vérifiez réponse + logs après chaque exécution.

Événements de test dans la console

Applications serverless avec AWS Lambda

Une boucle de débogage simple

  • Faites un petit changement de code.
  • Déployez, puis lancez un événement de test.
  • Lisez la réponse + CloudWatch Logs.

Cycle de boucle de débogage

Applications serverless avec AWS Lambda

Passons à la pratique !

Applications serverless avec AWS Lambda

Preparing Video For Download...