Comprendre le modèle d'exécution de Lambda

Applications sans serveur avec AWS Lambda

Claudio Canales

Senior DevOps Engineer

Exécution automatique

AWS piloté par événements

  • Lambda exécute du code lorsqu'un événement survient.
  • Exemple : téléversement S3 -> redimensionner l'image.
  • Déclencheurs variés, même logique.
Applications sans serveur avec AWS Lambda

Inactif jusqu'au déclenchement

Inactif -> événement -> exécuter -> arrêter

  • Inactif : rien ne s'exécute.
  • Événement : le gestionnaire s'exécute, puis s'arrête.

Analogie du détecteur de mouvement pour Lambda

  • Comme un détecteur : inactif jusqu'au déclenchement.
  • Le déclencheur passe de « off » à « on ».
Applications sans serveur avec AWS Lambda

Qu'est-ce qu'AWS Lambda ?

AWS Lambda en bref

  • Service de calcul piloté par événements.
  • Mise à l'échelle automatique selon la demande.
  • Paiement à l'usage d'exécution.
Applications sans serveur avec AWS Lambda

Comment Lambda exécute votre code

Flux d'exécution Lambda

  • Une source d'événements déclenche Lambda.
  • Lambda transmet une charge d'événement à votre gestionnaire.
  • Votre gestionnaire renvoie un résultat.
Applications sans serveur avec AWS Lambda

Mise à l'échelle selon la demande

La mise à l'échelle crée plus d'environnements

  • Plus d'événements : plus d'invocations parallèles.
  • Lambda crée d'autres environnements.
  • Démarrages à froid possibles par nouvel environnement.
Applications sans serveur avec AWS Lambda

La fonction gestionnaire

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event : charge d'entrée (JSON).
  • context : métadonnées d'exécution.
  • return : sortie (ou succès/échec).

Le gestionnaire reçoit event et context

Applications sans serveur avec AWS Lambda

L'objet event

Charge d'événement d'entreposage d'objets

Événement S3 : contenant + clé d'objet.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Même tâche : extraire l'essentiel.

Charge d'événement de requête HTTP

Événement d'API : méthode, chemin, corps.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Déclencheurs différents, JSON différent.
Applications sans serveur avec AWS Lambda

L'objet context

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis : temps restant avant l'échéance.
  • aws_request_id : identifiant de requête pour la journalisation.
Applications sans serveur avec AWS Lambda

Exécution sans état

Réutilisation à chaud vs réinitialisation

  • Chaque invocation est indépendante.
  • Réutilisation possible, non garantie.
  • Stockez l'état hors de Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Applications sans serveur avec AWS Lambda

Démarrages à froid

Chronologie d'un démarrage à froid

  • Nouvel environnement d'exécution.
  • Charger le code et les dépendances.
  • Exécuter l'initialisation, puis le gestionnaire.
Applications sans serveur avec AWS Lambda

Démarrages à chaud

Chronologie d'un démarrage à chaud

  • Réutiliser l'environnement existant.
  • Sauter la plupart des initialisations.
  • Le gestionnaire démarre plus vite.
Applications sans serveur avec AWS Lambda

Init, invocation, gel

Cycle de vie de l'environnement d'exécution

  • L'initialisation s'exécute une fois par environnement.
  • Le gestionnaire s'exécute à chaque invocation.
  • Entre les exécutions, l'env. peut geler.
Applications sans serveur avec AWS Lambda

Optimiser les démarrages à froid

# init (une fois par env)
import boto3
s3 = boto3.client('s3')
# gestionnaire (à chaque invocation)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init une fois vs gestionnaire à chaque invocation

  • Placez les importations et clients SDK hors du gestionnaire.
Applications sans serveur avec AWS Lambda

Passons à la pratique !

Applications sans serveur avec AWS Lambda

Preparing Video For Download...