Notions clés de l'architecture axée sur les événements

Applications sans serveur avec AWS Lambda

Claudio Canales

Senior DevOps Engineer

Récap : un modèle mental pour Lambda

  • Source d'événement : ce qui déclenche Lambda.
  • Charge utile : JSON décrivant l'événement.
  • Gestionnaire (handler) : code qui le traite.
  • Résultat : réponse ou effet secondaire.
  • Journaux : où diagnostiquer les problèmes.

Flux d'exécution Lambda

Applications sans serveur avec AWS Lambda

Les événements sont des messages

  • Un événement décrit quelque chose qui s'est produit.
  • C'est généralement un message JSON avec des métadonnées.
  • Votre gestionnaire extrait des champs et agit.

Analogie de la sonnette pour les événements

Applications sans serveur avec AWS Lambda

Sources d'événements courantes dans AWS

  • Amazon S3 déclenche des événements lors des téléversements.
  • Amazon SQS est une file gérée qui livre des messages.
  • DynamoDB Streams produit un journal des changements.
  • Chacun produit une charge utile JSON différente.

Sources d'événements : S3 vs SQS vs Streams

Applications sans serveur avec AWS Lambda

Appel synchrone vs asynchrone

  • Synchrone : l'appelant attend un résultat.
  • Asynchrone : l'appelant reçoit un accusé ; traitement ultérieur.

Analogie synchrone vs asynchrone

Applications sans serveur avec AWS Lambda

Notions clés de l'architecture axée sur les événements

  • Les événements arrivent en JSON depuis les services AWS.
  • Le mode d'invocation change l'endroit où les erreurs apparaissent.
  • Les charges utiles varient : analyser et valider de façon défensive.
  • Supposer des reprises et des doublons.

Points essentiels : enchaînement

Applications sans serveur avec AWS Lambda

Les charges utiles sont des contrats

  • Les charges utiles sont des conventions : l'émetteur choisit la forme.
  • Votre gestionnaire doit savoir où trouver les champs.
  • Extraire, valider, traiter et consigner.

Contrat de charge utile et flux d'analyse

Applications sans serveur avec AWS Lambda

Exemple de charge utile : événement SQS

Charge utile SQS annotée

  • Records est le lot.
  • body est une chaîne.
  • messageId aide au traçage et à la déduplication.
Applications sans serveur avec AWS Lambda

Démo : itérer sur Records

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Lire Records avec une valeur par défaut sûre.
  • Parcourir chaque enregistrement et extraire body.
  • Consigner l'essentiel, puis retourner.

Parcourir Records

Applications sans serveur avec AWS Lambda

Démo : analyser un body JSON en toute sécurité

import json
def lambda_handler(event, context):
    records = event.get("Records") or [{}]
    body = records[0].get("body", "{}")
    payload = json.loads(body)
    oid = payload.get("order_id")
    return json.dumps({"order_id": oid})
  • body est une chaîne ; l'analyser avec json.loads.
  • Lire avec une valeur sûre comme "{}".
  • Extraire order_id et retourner du JSON avec json.dumps.

Flux d'analyse de body

Applications sans serveur avec AWS Lambda

Liste de contrôle : analyse défensive

Liste de contrôle : analyse défensive

  • Consigner une fois la forme de l'événement en découvrant une nouvelle source.
  • Utiliser .get() et des valeurs par défaut pour les champs optionnels.
  • Valider les champs requis et retourner des erreurs claires.
  • Gérer les lots vides et les clés manquantes.
Applications sans serveur avec AWS Lambda

Concevoir pour les reprises et les doublons

  • Plusieurs sources d'événements livrent au moins une fois.
  • Des doublons peuvent survenir.
  • Concevoir des gestionnaires idempotents pour un double traitement correct.

Reprises et doublons

Applications sans serveur avec AWS Lambda

Idempotence en pratique

  • Choisir une clé unique, comme messageId ou order_id.
  • Stocker chaque clé traitée dans DynamoDB.
  • Vérifier l'existence ; si la clé existe, sauter le travail.

Décision d'idempotence

Applications sans serveur avec AWS Lambda

Points essentiels

  • Les événements arrivent en JSON depuis les services AWS.
  • Le mode d'invocation change l'endroit où les erreurs apparaissent.
  • Les charges utiles varient : analyser et valider de façon défensive.
  • Supposer des reprises et des doublons.

Points essentiels : enchaînement

Applications sans serveur avec AWS Lambda

Passons à la pratique !

Applications sans serveur avec AWS Lambda

Preparing Video For Download...