Comment rendre une fonction Lambda idempotente pour empêcher les incohérences et les pertes de données dans mon application ?

Date de la dernière mise à jour : 28/05/2019

On m'a dit que je dois rendre le code de ma fonction AWS Lambda idempotent. Comment procéder ?

Brève description

En programmation, l'idempotence est la capacité d'une application ou d'un composant à identifier les événements répétés et de répondre en conséquence pour empêcher les données d'être dupliquées, incohérentes ou perdues.

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 la fonction idempotente est plus susceptible de réduire les éléments suivants :

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

Résolution

Pour rendre votre fonction 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 dicte le meilleur moyen de le faire. Pour une assistance, consultez l'exemple de logique de fonction et les bonnes pratiques ci-dessous.

Exemple de logique de fonction

Cet exemple de logique de fonction Lambda s'applique à la plupart des cas :

  1. Extrayez la valeur d'un attribut unique de l'événement d'entrée. (Par exemple, un ID de transaction ou d'achat ID)
  2. Vérifiez que la valeur d'attribut existe dans une base de données de contrôle (par exemple, une table Amazon DynamoDB).
    Remarque : l'ajout de services AWS à votre architecture peut entraîner des coûts supplémentaires. Pour plus d'informations, consultez Tarification Amazon DynamoDB ou Tarification AWS.
  3. S'il existe une valeur unique (ce qui indique un événement dupliqué), arrêtez proprement l'exécution (c'est-à-dire, sans générer d'erreur). S'il n'existe pas de valeur unique, poursuivez l'exécution normalement.
  4. Lorsque le travail de la fonction aboutit, incluez un enregistrement dans la base de données de contrôle.
  5. Terminez l'exécution.

Bonnes pratiques

Tenez compte de ces bonnes pratiques lorsque vous concevez votre fonction Lambda pour l'idempotence :

  • Planifiez les fonctionnalités d'idempotence avant développer votre application.
  • Vérifiez que l'exécution de votre code Lambda se termine correctement lorsqu'il traite un événement dupliqué. 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. 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. Cela peut alors nécessiter un délai plus long 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. Cela est essentiel pour empêcher la logique d'idempotence de provoquer des effets secondaires, tels que des expirations, une latence excessive ou des goulets d'étranglement.
  • Stockez les données de session en utilisant un service qui peut être facilement réaffecté et qui fournit un débit élevé, comme DynamoDB.

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

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?