Comment puis-je rendre ma fonction Lambda idempotente ?

Lecture de 3 minute(s)
0

Je souhaite rendre le code de ma fonction AWS Lambda idempotent afin d’éviter les incohérences et les pertes de données dans mon application.

Brève description

Pour que votre fonction AWS Lambda soit idempotente, vous devez concevoir votre logique de fonction de manière à gérer correctement les événements dupliqués. Le code de la fonction doit valider correctement les événements d'entrée et identifier si les événements ont déjà été traités. Les fonctionnalités de votre application dictent la meilleure façon d’écrire le code.

Une logique de fonction idempotente peut contribuer à réduire les problèmes suivants :

  • Appels d’API inutiles
  • Temps de traitement du code
  • Incohérence des données
  • Limitation
  • Latence

Résolution

À titre d'exemple, vous pouvez vous baser sur la logique de fonction et les bonnes pratiques ci-dessous.

Exemple de logique de fonction Lambda idempotente

Pour utiliser la fonction Lambda idempotente, procédez comme suit :

  1. Extrayez la valeur d'un attribut unique de l'événement d'entrée, tel qu'un ID de transaction ou d'achat.
  2. Utilisez une expression conditionnelle pour placer la clé idempotente dans votre table Amazon DynamoDB.
  3. Pour les attributs d'enregistrement, procédez comme suit :
    Définissez Statut sur IN_PROGRESS.
    Pour l'horodatage in_progress_expiry, sélectionnez l’horodatage actuel en millisecondes + le nombre de millisecondes restantes avant l'expiration de l'exécution. Pour Python, utilisez context.get_remaining_time_in_millis.
    Remarque : Avec in_progress_expiry, la fonction Lambda peut réessayer la logique en toute sécurité.
    Si le paramètre PutItem de l'étape précédente renvoie ConditionalCheckFailedException, cela signifie que la clé idempotente est en cours de traitement.
    Pour utiliser l'attribut DynamoDB Time To Live (TTL) avec idempotent_expiry, définissez l'attribut à une date ultérieure pour la valeur.
  4. Mettez à jour le statut de l'enregistrement de clé sur TERMINÉ.
  5. Terminez l'action.

Remarque : L'ajout de services AWS à votre architecture peut entraîner des coûts supplémentaires. Pour en savoir plus, consultez la tarification Amazon DynamoDB et la tarification AWS.

Bonnes pratiques concernant l’idempotence d’une fonction lambda

Utilisez les bonnes pratiques suivantes :

  • Planifiez vos fonctionnalités d’idempotence avant de développer votre application.
  • Lorsque votre code Lambda traite un événement dupliqué, vérifiez qu’il se termine sans générer d’erreur.
    Remarque : Un processus qui se termine par une erreur peut entraîner une nouvelle tentative des services qui invoquent votre fonction.
  • Configurez le paramètre de délai d’expiration de la fonction Lambda afin que l’ensemble de l’exécution soit traité correctement.
    Remarque : Si vous utilisez un service distinct pour conserver les données et contrôler les événements dupliqués, vous devrez peut-être effectuer des appels d'API vers des points de terminaison HTTPS. Les appels d’API vers des points de terminaison HTTPS peuvent alors nécessiter une exécution plus longue que le délai de 3 secondes par défaut.
  • Testez et optimisez votre fonctionnement autant que possible. Simulez un scénario et un taux de demandes réalistes.
    Remarque : Il est essentiel de tester et d’optimiser la logique des fonctions idempotentes afin d’éviter des délais d’attente, une latence excessive ou des goulots d’étranglement potentiels.
  • Pour stocker les données de session, utilisez un service qui peut être facilement mis à l’échelle et qui offre un débit élevé, tel que DynamoDB.

Remarque : Lorsque vous effectuez des appels d'API vers Amazon Elastic Compute Cloud (Amazon EC2), vous pouvez utiliser le paramètre clientToken. Ce paramètre garantit qu’une requête d’API en mutation ne termine son flux de travail qu’une seule fois, même si vous lancez plusieurs tentatives avec le même clientToken.

Informations connexes

Comprendre le modèle de programmation Lambda

Créer une fonction Lambda avec la console

Sécuriser les nouvelles tentatives avec des API idempotentes

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois