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 idempuissance intégrée pour les démarrages d'exécution grâce aux noms d'exécution. Lorsque vous fournissez un nom d'exécution, Lambda l'utilise pour empêcher les doubles exécutions et permettre de nouvelles tentatives d'appel en toute sécurité. Par défaut, les étapes ont une sémantique d'exécution au moins une fois. Pendant la rediffusion, le SDK renvoie des résultats précis sans réexécuter les étapes terminées, mais votre logique métier doit être idempotente pour gérer les tentatives potentielles avant la fin.
Note
Les mappages de sources d'événements Lambda (ESM) ne prennent pas en charge l'idempotencie 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'idempotentie dans votre code de fonction, par exemple avec Powertools for, ou AWS Lambda utilisez une fonction Lambda normale comme proxy (répartiteur) pour appeler une fonction durable avec une clé d'idempotentie (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 d'exécution agit comme une clé d'impuissance, vous permettant de réessayer les demandes d'invocation en toute sécurité sans créer de doublons d'exécutions. 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 invoquez 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'impuissance
Le tableau suivant décrit comment Lambda gère les demandes d'invocation selon que vous fournissez un nom d'exécution, l'état d'exécution existant et si la charge utile correspond ou non :
| 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 ID d'exécution unique et lance une nouvelle exécution |
| 2 | Oui | N'a jamais existé ou la rétention a expiré | N/A | Nouvelle exécution démarrée : Lambda lance 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 invocations synchrones, cela agit comme un rattachement à l'exécution en cours |
| 4 | Oui | En cours d’exécution | Non | Erreur : Lambda renvoie une DurableExecutionAlreadyExists 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é (réussite, échec, arrêt ou expiration du délai imparti) | 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é (réussite, échec, arrêt ou expiration du délai imparti) | Non | Erreur : Lambda renvoie une DurableExecutionAlreadyExists erreur car une exécution portant ce nom est déjà terminée avec une charge utile différente |
Remarque
Les scénarios 3 et 5 illustrent 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 : Idempuissance
Par défaut, les étapes ont une sémantique d'exécution au moins une fois. Lorsque votre fonction est rejouée après une attente, un rappel ou un échec, le SDK compare chaque étape 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, l'étape peut être exécutée plusieurs fois.
La logique métier qui sous-tend vos étapes doit être idempotente pour gérer les nouvelles tentatives potentielles. Utilisez des clés d'idempuissance pour garantir que les opérations telles que les paiements ou les écritures de base de données ne s'exécutent qu'une seule fois, même si l'étape est réessayée. Consultez la section Idempotencie 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'idempotencie.