Comment puis-je rendre ma fonction Lambda idempotente ?

Date de la dernière mise à jour : 14/04/2021

J'ai entendu dire que je devrais rendre mon code de fonction AWS Lambda idempotent pour éviter les incohérences et les pertes de données dans mon application. Comment procéder ?

Brève description

En programmation, l'idempotence signifie la capacité d'une application ou d'un composant à identifier les événements répétés et à empêcher la duplication, les incohérences et les pertes de données. Pour rendre votre fonction AWS Lambda idempotente, vous devez définir sa logique pour qu'elle traite correctement les événements dupliqués.

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

  • Appels d'API inutiles
  • Délai de traitement du code
  • Incohérence des données
  • Limitations
  • Latence

Solution

Pour que votre fonction soit idempotente, son code doit correctement valider les événements d'entrée et déterminer si les événements ont été traités auparavant. Le fonctionnement de votre application définit la meilleure façon de procéder.

À 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 suivant de logique de fonction Lambda 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 ID de transaction ou d'achat.)

2.    Vérifiez si la valeur d'attribut existe dans une base de données de contrôle. (Par exemple, une table Amazon DynamoDB.) Ensuite, en fonction des résultats, procédez comme suit :
Si une valeur unique existe, arrêtez l'action sans générer d'erreur.

-ou-

Si une valeur unique n'existe pas, procédez à 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 plus d'informations, consultez Tarification Amazon DynamoDB et Tarification AWS.

3.    Une fois le travail de la fonction accompli, incluez un enregistrement dans la base de données de contrôle.

4.    Mettez fin à l'action.

Meilleures pratiques d'idempotence pour les fonctions Lambda

  • Planifiez les fonctionnalités d'idempotence avant de développer votre application.
  • Assurez-vous que votre code Lambda se termine sans générer d'erreur lorsqu'il traite un événement dupliqué.
    Remarque : la génération d'erreurs peut entraîner de nouvelles tentatives, soit de la part de Lambda ou d'un autre service qui appelle votre fonction.
  • Modifiez le paramètre d'expiration de la fonction Lambda, si nécessaire, afin que l'ensemble de l'exécution soit gérée correctement.
    Remarque : l'utilisation d'un service distinct pour faire persister les événements dupliqués de données et de contrôle peut nécessiter des appels d'API vers les points de terminaison HTTPS. Les appels d'API aux points de terminaison HTTPS peuvent alors nécessiter plus d'exécution que les trois secondes par défaut.
  • Testez et optimisez votre fonction autant que possible, en simulant un scénario réel et un taux de demandes.
    Remarque : le test et l'optimisation de la logique de fonction idempotente sont essentiels pour prévenir les effets secondaires potentiels tels que des expirations, une latence excessive ou des goulets d'étranglement.
  • Stockez les données de session à l'aide d'un service qui peut être facilement réaffecté et qui fournit un débit élevé, comme DynamoDB.

Remarque : lorsque vous effectuez des appels API vers Amazon Elastic Compute Cloud (Amazon EC2), le service propose le paramètre de jeton client. Le jeton client peut être utilisé pour veiller à ce que toute demande d'API mutante ne s'exécute qu'une seule fois si la demande d'API est réitérée.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?