View a markdown version of this page

Idempotence - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Idempotence

Les fonctions durables fournissent une idempotence intégrée pour les démarrages d'exécution par le biais de noms d'exécution. Lorsque vous fournissez un nom d'exécution, Lambda l'utilise pour empêcher les exécutions dupliquées et permettre de nouvelles tentatives d'invocation en toute sécurité. Les étapes ont une sémantique d'exécution au moins une fois par défaut. Pendant la rediffusion, le SDK renvoie des résultats vérifiés sans réexécuter les étapes terminées, mais votre logique métier doit être idempotente pour gérer les nouvelles tentatives potentielles avant la fin.

Note

Les mappages de sources d'événements Lambda (ESM) ne prennent pas en charge l'idempotence au lancement. Par conséquent, chaque invocation (y compris les nouvelles tentatives) lance une nouvelle exécution durable. Pour garantir une exécution idempotente avec des mappages de sources d'événements, implémentez la logique d'idempotence dans le code de votre fonction, comme avec Powertools for, AWS Lambda ou utilisez une fonction Lambda classique comme proxy (répartiteur) pour invoquer une fonction durable avec une clé d'idempotence (paramètre du nom d'exécution).

Noms d'exécution

Vous pouvez fournir un nom d'exécution lorsque vous invoquez une fonction durable. Le nom de l'exécution agit comme une clé d'idempotence, vous permettant de réessayer les demandes d'invocation en toute sécurité sans créer d'exécutions dupliquées. Si vous ne fournissez pas de nom, Lambda génère automatiquement un identifiant d'exécution unique.

Les noms d'exécution doivent être uniques au sein de votre compte et de votre région. Lorsque vous appelez une fonction dont le nom d'exécution existe déjà, le comportement de Lambda dépend de l'état de l'exécution existante et de la correspondance de la charge utile.

Comportement d'idempotence

Le tableau suivant décrit la façon dont Lambda gère les demandes d'appel selon que vous fournissez un nom d'exécution, l'état d'exécution existant et si la charge utile correspond :

Scénario Nom fourni ? État d'exécution existant Charge utile identique ? Comportement
1 Non N/A N/A Nouvelle exécution démarrée : Lambda génère un identifiant d'exécution unique et démarre une nouvelle exécution
2 Oui N'a jamais existé ou la conservation a expiré N/A Nouvelle exécution démarrée : Lambda démarre une nouvelle exécution avec le nom fourni
3 Oui En cours d’exécution Oui Démarrage idempotent : Lambda renvoie les informations d'exécution existantes sans créer de doublon. Pour les appels synchrones, cela agit comme un reattachement à l'exécution en cours
4 Oui En cours d’exécution Non Erreur : Lambda renvoie une DurableExecutionAlreadyStartedException erreur car une exécution portant ce nom est déjà en cours d'exécution avec une charge utile différente
5 Oui Fermé (succès, échec, arrêt ou expiration du délai) Oui Démarrage idempotent : Lambda renvoie les informations d'exécution existantes sans démarrer une nouvelle exécution. Le résultat de l'exécution fermée est renvoyé
6 Oui Fermé (succès, échec, arrêt ou expiration du délai) Non Erreur : Lambda renvoie une DurableExecutionAlreadyStartedException erreur car une exécution portant ce nom s'est déjà terminée avec une charge utile différente
Remarque

Les scénarios 3 et 5 présentent un comportement idempotent dans lequel Lambda gère en toute sécurité les demandes d'invocation dupliquées en renvoyant les informations d'exécution existantes au lieu de créer des doublons.

Étape 1 : empotence

Les étapes ont une sémantique d'exécution au moins une fois par défaut. Lorsque votre fonction est rejouée après une attente, un rappel ou un échec, le SDK vérifie chaque étape par rapport au journal des points de contrôle. Pour les étapes déjà terminées, le SDK renvoie le résultat du point de contrôle sans réexécuter la logique des étapes. Toutefois, si une étape échoue ou si la fonction est interrompue avant la fin de l'étape, celle-ci peut être exécutée plusieurs fois.

La logique métier qui sous-tend vos étapes doit être idempotente pour gérer d'éventuelles nouvelles tentatives. Utilisez des clés d'idempotence pour vous assurer que les opérations telles que les paiements ou les écritures de bases de données ne s'exécutent qu'une seule fois, même si l'étape est relancée. Consultez la section Idempotence et nouvelles tentatives dans le Guide du développeur du SDK AWS Durable Execution pour plus de détails sur la façon de coder pour l'idempotence.