Écrire et tester du code Lambda

Applications sans serveur avec AWS Lambda

Claudio Canales

Senior DevOps Engineer

Pourquoi les tests et les journaux comptent

  • Les événements réels sont variés et désordonnés.
  • Les tests détectent les erreurs avant les usagers.
  • Les journaux sont votre « boîte noire » pour le débogage.

Tester, c'est un exercice d'évacuation

Applications sans serveur avec AWS Lambda

Un flux à retenir

Trousse du flux de base

  • Événement entrant -> exécuteur -> réponse sortante.
  • Utilisez les journaux + des événements de test pour déboguer.

Flux d'invocation Lambda

Applications sans serveur avec AWS Lambda

Où vont les journaux : CloudWatch Logs

  • Lambda écrit par défaut print() et les erreurs là.
  • CloudWatch Logs est l'entreposage de journaux d'AWS.
  • Les groupes de journaux ressemblent à /aws/lambda/<function-name>.

Le gestionnaire consigne dans CloudWatch Logs

Applications sans serveur avec AWS Lambda

Le contrat du gestionnaire

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

Contrat du gestionnaire : event + context -> response

Applications sans serveur avec AWS Lambda

Démo guidée : 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 sur event et context

Applications sans serveur avec AWS Lambda

Analyser l'entrée en toute sécurité

  • Préférez event.get() pour les champs facultatifs.
  • Validez tôt les entrées requises.
  • Retournez des erreurs claires pour les champs manquants.

Analyser prudemment et valider tôt

Applications sans serveur avec AWS Lambda

Démo guidée : 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 sans serveur avec AWS Lambda

Cas limites à tester

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

Exemples de charges utiles limites

Applications sans serveur avec AWS Lambda

Retourner une réponse prévisible

  • Gardez un format de réponse cohérent.
  • Utilisez statusCode pour succès et erreurs.
  • Codez en JSON le corps de la réponse.

Enveloppe de réponse : statusCode + corps JSON

Applications sans serveur avec AWS Lambda

Démo guidée : retourner du JSON

import json

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

json.dumps : dict en texte JSON

Applications sans serveur avec AWS Lambda

Consignation et traçage

  • Consignez les champs clés (en JSON au besoin).
  • Incluez context.aws_request_id pour le traçage.
  • Évitez de consigner des secrets ou des données personnelles.
  • Par défaut, Lambda envoie les journaux à CloudWatch Logs.

Bonnes pratiques de consignation

Applications sans serveur avec AWS Lambda

Démo guidée : consignation structurée

import json

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

Ligne de journal structurée en JSON

Applications sans serveur avec AWS Lambda

Tester avec des événements de la console

  • Créez des événements de test nommés.
  • Testez la voie heureuse et les cas limites.
  • Vérifiez la réponse + les journaux après chaque exécution.

Événements de test dans la console

Applications sans serveur avec AWS Lambda

Une boucle de débogage simple

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

Cycle de boucle de débogage

Applications sans serveur avec AWS Lambda

Passons à la pratique !

Applications sans serveur avec AWS Lambda

Preparing Video For Download...