Comment puis-je rendre ma fonction Lambda idempotente ?

Lecture de 4 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

En programmation, l’idempotence désigne la capacité d’une application ou d’un composant à identifier des événements répétés et à empêcher la duplication, l’incohérence ou la perte des données. Pour rendre une fonction AWS Lambda idempotente, la logique de la fonction doit être conçue pour traiter correctement les événements dupliqués.

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

Pour rendre une fonction idempotente, le code de la fonction doit valider correctement les événements d’entrée et repérer si ces événements ont déjà été traités. Les fonctionnalités de votre application dictent la meilleure façon d’écrire le code.

À 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

Remarque : l’exemple de logique de fonction Lambda suivant s’applique à la plupart des cas d’utilisation.

1.    Extrayez la valeur d’un attribut unique de l’événement d’entrée. (Par exemple, un numéro de transaction ou d’achat.)

2.    Vérifiez si la valeur de l’attribut existe dans une base de données de contrôle. (Par exemple, une table Amazon DynamoDB.)

3.    En fonction des résultats, effectuez l’étape suivante :
Si une valeur unique existe, arrêtez l’action sans générer d’erreur.

-ou-

S’il n’existe pas de valeur unique, poursuivez l’action que vous avez initialement conçue.

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.

4.    S’il n’existe pas de valeur unique une fois la fonction terminée, incluez l’enregistrement dans la base de données de contrôle.

5.    Terminez l’action.
Remarque : si vous utilisez des environnements d’exécution Java ou Python pour votre fonction, consultez les modules d’idempotence Python et Java sur la page GitHub Powertools pour AWS Lambda.

Bonnes pratiques concernant l’idempotence d’une fonction lambda

  • 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 : si des erreurs surviennent, cela peut entraîner de nouvelles tentatives, soit de la part de Lambda, soit d’un autre service qui invoque votre fonction.
  • Modifiez le paramètre de délai d’expiration de la fonction Lambda afin que l’ensemble de l’exécution soit géré correctement.
    Remarque : l’utilisation d’un service distinct pour faire persister les données et contrôler les événements dupliqués peut nécessiter 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 les effets secondaires potentiels tels que les délais d’attente, une latence excessive ou des goulots d’étranglement.
  • Stockez les données de session à l’aide d’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), le service propose le paramètre clientToken. Ce paramètre garantit qu’une demande d’API en mutation ne termine son flux de travail qu’une seule fois, même si vous lancez plusieurs tentatives en utilisant le même clientToken.


Informations connexes

Modèle de programmation Lambda

Création d’une fonction Lambda avec la console

Sécuriser les nouvelles tentatives avec des API idempotentes

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans