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é. Les étapes ont une sémantique at-least-once d'exécution par défaut : lors de la réexécution, 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 d'éventuelles nouvelles tentatives 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 :
| 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
Les étapes ont une sémantique at-least-once d'exécution par défaut. 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.
Votre logique métier articulée en étapes doit être idempotente pour gérer d'éventuelles nouvelles tentatives. 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.
Exemple : utilisation des clés d'idempuissance par étapes
Vous pouvez configurer les étapes pour utiliser la sémantique at-most-once d'exécution en définissant le mode d'exécution sur. AT_MOST_ONCE_PER_RETRY Cela garantit que l'étape s'exécute au maximum une fois par nouvelle tentative, mais peut ne pas s'exécuter du tout si la fonction est interrompue avant la fin de l'étape.
Le SDK applique la rediffusion déterministe en vérifiant que les noms et l'ordre des étapes correspondent au journal des points de contrôle lors de la rediffusion. Si votre code tente d'exécuter des étapes dans un ordre différent ou avec des noms différents, le SDK lance unNonDeterministicExecutionError.
Comment fonctionne le replay une fois les étapes terminées :
Premier appel : la fonction exécute l'étape A, crée un point de contrôle, puis attend
Deuxième appel (après attente) : la fonction est rejouée depuis le début, l'étape A renvoie instantanément le résultat vérifié sans la réexécuter, puis passe à l'étape B
Troisième appel (après une nouvelle attente) : les fonctions sont rejouées depuis le début, les étapes A et B renvoient instantanément les résultats vérifiés, puis passent à l'étape C
Ce mécanisme de réexécution garantit que les étapes terminées ne sont pas réexécutées, mais votre logique métier doit toujours être idempotente pour gérer les nouvelles tentatives avant leur fin.