

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.

# Création de fonctions Lambda durables
<a name="durable-getting-started"></a>

Pour commencer à utiliser les fonctions durables Lambda, utilisez la console Lambda pour créer une fonction durable. En quelques minutes, vous pouvez créer et déployer une fonction durable qui utilise des étapes et des temps d'attente pour démontrer une exécution basée sur des points de contrôle.

Au cours de ce didacticiel, vous découvrirez les concepts fondamentaux des fonctions durables, tels que la façon d'utiliser l'`DurableContext`objet, de créer des points de contrôle avec des étapes et de suspendre l'exécution avec des temps d'attente. Vous découvrirez également comment fonctionne le replay lorsque votre fonction reprend après une attente.

Pour simplifier les choses, ce didacticiel explique comment créer votre fonction à l'aide de l'environnement d'exécution Python ou Node.js. Avec ces langages interprétés, vous pouvez modifier le code de fonction directement dans l'éditeur de code intégré à la console.

**Note**  
Les fonctions durables prennent actuellement en charge les environnements d'exécution Python, Node.js (JavaScript/TypeScript) et Java, ainsi que les images de conteneur (OCI). Pour obtenir la liste complète des versions d'exécution et des options d'image de conteneur prises en charge, voir [Runtimes pris en charge pour des fonctions durables.](durable-supported-runtimes.md) Pour plus d'informations sur l'utilisation d'images de conteneur avec Lambda, consultez la section Création d'images de [conteneur Lambda dans le guide du développeur](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html) Lambda.

**Astuce**  
Pour apprendre à créer des **solutions sans serveur**, consultez le [Guide du développeur sans serveur](https://docs.aws.amazon.com/serverless/latest/devguide/).

## Conditions préalables
<a name="durable-getting-started-prerequisites"></a>

### Inscrivez-vous pour un Compte AWS
<a name="sign-up-for-aws"></a>

Si vous n'en avez pas Compte AWS, procédez comme suit pour en créer un.

**Pour vous inscrire à un Compte AWS**

1. Ouvrez l'[https://portal.aws.amazon.com/billing/inscription.](https://portal.aws.amazon.com/billing/signup)

1. Suivez les instructions en ligne.

   Dans le cadre de la procédure d’inscription, vous recevrez un appel téléphonique ou un SMS et vous saisirez un code de vérification en utilisant le clavier numérique du téléphone.

   Lorsque vous vous inscrivez à un Compte AWS, un *Utilisateur racine d'un compte AWS*est créé. Par défaut, seul l’utilisateur racine a accès à l’ensemble des Services AWS et des ressources de ce compte. La meilleure pratique de sécurité consiste à attribuer un accès administratif à un utilisateur, et à utiliser uniquement l’utilisateur racine pour effectuer les [tâches nécessitant un accès utilisateur racine](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS vous envoie un e-mail de confirmation une fois le processus d'inscription terminé. À tout moment, vous pouvez consulter l'activité actuelle de votre compte et gérer votre compte en accédant à [https://aws.amazon.com/](https://aws.amazon.com/)et en choisissant **Mon compte**.

### Création d’un utilisateur doté d’un accès administratif
<a name="create-an-admin"></a>

Après vous être inscrit à un Compte AWS, sécurisez Utilisateur racine d'un compte AWS AWS IAM Identity Center, activez et créez un utilisateur administratif afin de ne pas utiliser l'utilisateur root pour les tâches quotidiennes.

**Sécurisez votre Utilisateur racine d'un compte AWS**

1.  Connectez-vous en [AWS Management Console](https://console.aws.amazon.com/)tant que propriétaire du compte en choisissant **Utilisateur root** et en saisissant votre adresse Compte AWS e-mail. Sur la page suivante, saisissez votre mot de passe.

   Pour obtenir de l’aide pour vous connecter en utilisant l’utilisateur racine, consultez [Connexion en tant qu’utilisateur racine](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) dans le *Guide de l’utilisateur Connexion à AWS *.

1. Activez l’authentification multifactorielle (MFA) pour votre utilisateur racine.

   Pour obtenir des instructions, voir [Activer un périphérique MFA virtuel pour votre utilisateur Compte AWS root (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) dans le guide de l'utilisateur *IAM*.

**Création d’un utilisateur doté d’un accès administratif**

1. Activez IAM Identity Center.

   Pour obtenir des instructions, consultez [Activation d’ AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) dans le *Guide de l’utilisateur AWS IAM Identity Center *.

1. Dans IAM Identity Center, octroyez un accès administratif à un utilisateur.

   Pour un didacticiel sur l'utilisation du Répertoire IAM Identity Center comme source d'identité, voir [Configurer l'accès utilisateur par défaut Répertoire IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) dans le *Guide de AWS IAM Identity Center l'utilisateur*.

**Connexion en tant qu’utilisateur doté d’un accès administratif**
+ Pour vous connecter avec votre utilisateur IAM Identity Center, utilisez l’URL de connexion qui a été envoyée à votre adresse e-mail lorsque vous avez créé l’utilisateur IAM Identity Center.

  Pour obtenir de l'aide pour vous connecter en utilisant un utilisateur d'IAM Identity Center, consultez la section [Connexion au portail AWS d'accès](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) dans le *guide de l'Connexion à AWS utilisateur*.

**Attribution d’un accès à d’autres utilisateurs**

1. Dans IAM Identity Center, créez un ensemble d’autorisations qui respecte la bonne pratique consistant à appliquer les autorisations de moindre privilège.

   Pour obtenir des instructions, consultez [Création d’un ensemble d’autorisations](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) dans le *Guide de l’utilisateur AWS IAM Identity Center *.

1. Attribuez des utilisateurs à un groupe, puis attribuez un accès par authentification unique au groupe.

   Pour obtenir des instructions, consultez [Ajout de groupes](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) dans le *Guide de l’utilisateur AWS IAM Identity Center *.

## Créez une fonction Lambda durable avec la console
<a name="getting-started-create-durable-function"></a>

Dans cet exemple, votre fonction durable traite une commande en plusieurs étapes avec un point de contrôle automatique. La fonction prend un objet JSON contenant un numéro de commande, valide la commande, traite le paiement et confirme la commande. Chaque étape est automatiquement contrôlée. Ainsi, si la fonction est interrompue, elle reprend à partir de la dernière étape terminée.

Votre fonction illustre également une opération d'attente, interrompant l'exécution pendant une courte période pour simuler l'attente d'une confirmation externe.

**Pour créer une fonction durable avec la console**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez **Créer une fonction**.

1. Sélectionnez **Créer à partir de zéro**.

1. Dans le volet **Informations de base**, pour **Nom de la fonction**, saisissez `myDurableFunction`.

1. Pour **Runtime**, choisissez **Node.js 24** ou **Python 3.14**.

1. Sélectionnez **Activer l'exécution durable**.

Lambda crée votre fonction durable avec un [rôle d'exécution](lambda-intro-execution-role.md) qui inclut des autorisations pour les opérations de point de contrôle (`lambda:CheckpointDurableExecution`et). `lambda:GetDurableExecutionState`

**Note**  
Les environnements d'exécution Lambda incluent le SDK Durable Execution, qui vous permet de tester des fonctions durables sans créer de dépendances. Toutefois, nous vous recommandons d'inclure le SDK dans votre package de déploiement pour la production. Cela garantit la cohérence des versions et évite les mises à jour d'exécution potentielles susceptibles d'affecter votre fonction.

Utilisez l'éditeur de code intégré à la console pour ajouter votre code de fonction durable.

------
#### [ Node.js ]

**Pour modifier le code dans la console**

1. Cliquez sur l’onglet **Code**.

   Dans l'éditeur de code intégré de la console, vous devriez voir le code de fonction créé par Lambda. Si vous ne voyez pas l'onglet **index.mjs** dans l'éditeur de code, sélectionnez **index.mjs** dans l'explorateur de fichiers, comme le montre le schéma suivant.  
![Schéma illustrant l’éditeur de code de la console et le fichier index.mjs dans l’explorateur de fichiers](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/durable-nodejs.png)

1. Collez le code suivant dans l'onglet **index.mjs**, en remplaçant le code créé par Lambda.

   ```
   import {
     withDurableExecution,
   } from "@aws/durable-execution-sdk-js";
   
   export const handler = withDurableExecution(
     async (event, context) => {
       const orderId = event.orderId;
       
       // Step 1: Validate order
       const validationResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Validating order ${orderId}`);
         return { orderId, status: "validated" };
       });
       
       // Step 2: Process payment
       const paymentResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Processing payment for order ${orderId}`);
         return { orderId, status: "paid", amount: 99.99 };
       });
       
       // Wait for 10 seconds to simulate external confirmation
       await context.wait({ seconds: 10 });
       
       // Step 3: Confirm order
       const confirmationResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Confirming order ${orderId}`);
         return { orderId, status: "confirmed" };
       });
           
       return {
         orderId: orderId,
         status: "completed",
         steps: [validationResult, paymentResult, confirmationResult]
       };
     }
   );
   ```

1. Dans la section **DÉPLOYER**, choisissez **Déployer** pour mettre à jour le code de votre fonction :  
![Bouton de déploiement dans l’éditeur de code de la console Lambda](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**Comprendre votre code de fonction durable**  
Avant de passer à l'étape suivante, examinons le code de la fonction et comprenons les principaux concepts relatifs aux fonctions durables.
+ L'`withDurableExecution`emballage :

  Votre fonction durable est emballée avec`withDurableExecution`. Ce wrapper permet une exécution durable en fournissant l'`DurableContext`objet et en gérant les opérations des points de contrôle.
+ L'`DurableContext`objet :

  Au lieu du contexte Lambda standard, votre fonction reçoit un. `DurableContext` Cet objet fournit des méthodes pour des opérations durables telles `wait()` que `step()` et qui créent des points de contrôle.
+ Étapes et points de contrôle :

  Chaque `context.step()` appel crée un point de contrôle avant et après l'exécution. Si votre fonction est interrompue, elle reprend à partir du dernier point de contrôle terminé. La fonction ne réexécute pas les étapes terminées. Il utilise plutôt leurs résultats enregistrés.
+ Opérations d'attente :

  L'`context.wait()`appel interrompt l'exécution sans consommer de ressources informatiques. Une fois l'attente terminée, Lambda appelle à nouveau votre fonction et rejoue le journal des points de contrôle, en substituant des valeurs stockées aux étapes terminées.
+ Mécanisme de rediffusion :

  Lorsque votre fonction reprend après une attente ou une interruption, Lambda exécute votre code depuis le début. Toutefois, les étapes terminées ne sont pas réexécutées. Lambda rejoue leurs résultats à partir du journal des points de contrôle. C'est pourquoi votre code doit être déterministe.

------
#### [ Python ]

**Pour modifier le code dans la console**

1. Cliquez sur l’onglet **Code**.

   Dans l'éditeur de code intégré de la console, vous devriez voir le code de fonction créé par Lambda. Si vous ne voyez pas l'onglet **lambda\_function.py** dans l'éditeur de code, sélectionnez **lambda\_function.py** dans l'explorateur de fichiers, comme le montre le schéma suivant.  
![Schéma illustrant l’éditeur de code de la console et le fichier lambda_function.py dans l’explorateur de fichiers](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/durable-python.png)

1. Collez le code suivant dans l'onglet **lambda\_function.py**, en remplaçant le code créé par Lambda.

   ```
   from aws_durable_execution_sdk_python import (
       DurableContext,
       durable_execution,
       durable_step,
   )
   from aws_durable_execution_sdk_python.config import Duration
   
   @durable_step
   def validate_order(step_context, order_id):
       step_context.logger.info(f"Validating order {order_id}")
       return {"orderId": order_id, "status": "validated"}
   
   @durable_step
   def process_payment(step_context, order_id):
       step_context.logger.info(f"Processing payment for order {order_id}")
       return {"orderId": order_id, "status": "paid", "amount": 99.99}
   
   @durable_step
   def confirm_order(step_context, order_id):
       step_context.logger.info(f"Confirming order {order_id}")
       return {"orderId": order_id, "status": "confirmed"}
   
   @durable_execution
   def lambda_handler(event, context: DurableContext):
       order_id = event['orderId']
       
       # Step 1: Validate order
       validation_result = context.step(validate_order(order_id))
       
       # Step 2: Process payment
       payment_result = context.step(process_payment(order_id))
       
       # Wait for 10 seconds to simulate external confirmation
       context.wait(Duration.from_seconds(10))
       
       # Step 3: Confirm order
       confirmation_result = context.step(confirm_order(order_id))
           
       return {
           "orderId": order_id,
           "status": "completed",
           "steps": [validation_result, payment_result, confirmation_result]
       }
   ```

1. Dans la section **DÉPLOYER**, choisissez **Déployer** pour mettre à jour le code de votre fonction :  
![Bouton de déploiement dans l’éditeur de code de la console Lambda](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**Comprendre votre code de fonction durable**  
Avant de passer à l'étape suivante, examinons le code de la fonction et comprenons les principaux concepts relatifs aux fonctions durables.
+ Le `@durable_execution` décorateur :

  Votre fonction de gestion est décorée avec`@durable_execution`. Ce décorateur permet une exécution durable en fournissant l'`DurableContext`objet et en gérant les opérations aux points de contrôle.
+ Le `@durable_step` décorateur :

  Chaque fonction de marche est décorée avec`@durable_step`. Ce décorateur définit la fonction comme une étape durable qui crée des points de contrôle.
+ L'`DurableContext`objet :

  Au lieu du contexte Lambda standard, votre fonction reçoit un. `DurableContext` Cet objet fournit des méthodes pour des opérations durables telles `wait()` que `step()` et qui créent des points de contrôle.
+ Étapes et points de contrôle :

  Chaque `context.step()` appel crée un point de contrôle avant et après l'exécution. Si votre fonction est interrompue, elle reprend à partir du dernier point de contrôle terminé. La fonction ne réexécute pas les étapes terminées. Il utilise plutôt leurs résultats enregistrés.
+ Opérations d'attente :

  L'`context.wait()`appel interrompt l'exécution sans consommer de ressources informatiques. Une fois l'attente terminée, Lambda appelle à nouveau votre fonction et rejoue le journal des points de contrôle, en substituant des valeurs stockées aux étapes terminées.
+ Le SDK Python est synchrone :

  Notez que le SDK Python n'utilise `await` pas. Toutes les opérations durables sont des appels de méthode synchrones.

------

## Appelez la fonction durable à l'aide de l'éditeur de code de la console
<a name="get-started-invoke-durable-manually"></a>

Lorsqu'aucune version explicite n'est spécifiée (ou publiée), la console invoque la fonction durable à l'aide du qualificatif de `$LATEST` version. Toutefois, pour une exécution déterministe de votre code, vous devez toujours utiliser un ARN qualifié pointant vers une version stable.

**Pour publier une version de votre fonction**

1. Choisissez l'onglet **Versions**.

1. Choisissez **Publish new version (Publier une nouvelle version)**.

1. Dans le **champ Description de la version**, entrez **Initial version** (facultatif).

1. Choisissez **Publier**.

1. Lambda crée la version 1 de votre fonction. Notez que la fonction ARN inclut désormais `:1` à la fin, ce qui indique qu'il s'agit de la version 1.

Créez maintenant un événement de test à envoyer à votre fonction. L'événement est un document au format JSON contenant un numéro de commande.

**Pour créer l'événement de test**

1. Dans la section **ÉVÉNEMENTS DE TEST** de l’éditeur de code de console, choisissez **Créer un événement de test**.  
![Bouton de création d’un événement de test dans l’éditeur de code de la console Lambda](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/getting-started-tutorial/test-event.png)

1. Dans **Event Name (Nom de l'événement)**, saisissez **myTestEvent**.

1. Dans la section **JSON d’événement**, remplacez le JSON par défaut par ce qui suit :

   ```
   {
     "orderId": "order-12345"
   }
   ```

1. Choisissez **Enregistrer**.

**Pour tester votre fonctionnalité durable et voir son exécution**

Dans la section **ÉVÉNEMENTS DE TEST** de l’éditeur de code de la console, cliquez sur l’icône d’exécution à côté de votre événement de test :

![Bouton d’exécution de l’événement de test dans l’éditeur de code de la console Lambda](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/getting-started-tutorial/run-test-event.png)


Votre fonction durable commence à s'exécuter. Comme il inclut une attente de 10 secondes, l'appel initial se termine rapidement et la fonction reprend après la période d'attente. Vous pouvez consulter la progression de l'exécution dans l'onglet **Exécutions durables**.

**Pour visualiser l'exécution durable de vos fonctions**

1. Choisissez l'onglet **Exécutions durables**.

1. Trouvez votre exécution dans la liste. L'exécution indique l'état actuel (en cours, réussi ou échec).

1. Choisissez l'ID d'exécution pour afficher les détails, notamment :
   + Chronologie d'exécution indiquant la fin de chaque étape
   + Historique des points de contrôle
   + Périodes d'attente
   + Résultats des étapes

Vous pouvez également consulter les journaux de votre fonction dans CloudWatch Logs pour voir le résultat de chaque étape de la console.

**Pour consulter les enregistrements d'invocation de votre fonction dans Logs CloudWatch**

1. Ouvrez la page [Groupes de journaux](https://console.aws.amazon.com/cloudwatch/home#logs:) de la CloudWatch console.

1. Choisissez le groupe de journaux de votre fonction (`/aws/lambda/myDurableFunction`).

1. Faites défiler la page vers le bas et choisissez le **flux de journaux** pour les invocations de fonctions que vous souhaitez consulter.  
![Liste des flux de journaux pour une fonction Lambda.](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/log-stream.png)

   Vous devriez voir des entrées de journal pour chaque appel de votre fonction, y compris l'exécution initiale et la rediffusion après l'attente.

**Note**  
Lorsque vous utilisez l'enregistreur depuis `DurableContext` (tel que `context.logger` ou`stepContext.logger`), les journaux apparaissent également dans les vues d'exécution durable et d'étape de la console Lambda. Le chargement de ces journaux peut prendre un certain temps.

## Nettoyage
<a name="gettingstarted-durable-cleanup"></a>

Lorsque vous avez fini d'utiliser l'exemple de fonction durable, supprimez-le. Vous pouvez également supprimer le groupe de journaux qui stocke les journaux de la fonction, et le [rôle d'exécution](lambda-intro-execution-role.md) créé par la console.

**Pour supprimer la fonction Lambda**

1. Ouvrez la [page Functions (Fonctions)](https://console.aws.amazon.com/lambda/home#/functions) de la console Lambda.

1. Sélectionnez la fonction que vous avez créée.

1. Sélectionnez **Actions**, **Supprimer**.

1. Saisissez **confirm** dans la zone de saisie de texte et choisissez **Delete** (Supprimer).

**Pour supprimer le groupe de journaux**

1. Ouvrez la [page Log groups (Groupes de journaux)](https://console.aws.amazon.com/cloudwatch/home#logs:) de la console CloudWatch.

1. Sélectionnez le groupe de journaux de la fonction (`/aws/lambda/myDurableFunction`).

1. Sélectionnez **Actions**, **Delete log group(s) (Supprimer le ou les groupes de journaux)**.

1. Dans la boîte de dialogue **Delete log group(s) (Supprimer le ou les groupes de journaux)**, sélectionnez **Delete (Supprimer)**.

**Pour supprimer le rôle d'exécution**

1. Ouvrez la [page Rôles](https://console.aws.amazon.com/iam/home?#/roles) de la console Gestion des identités et des accès AWS (IAM).

1. Sélectionnez le rôle d'exécution de la fonction (par exemple, `myDurableFunction-role-{{31exxmpl}}`).

1. Sélectionnez **Delete (Supprimer)**.

1. Dans la fenêtre de dialogue **Supprimer le rôle**, saisissez le nom du rôle, puis sélectionnez **Supprimer**.

## Ressources supplémentaires et prochaines étapes
<a name="durable-getting-started-more-resources"></a>

Maintenant que vous avez créé et testé une fonction simple et durable à l'aide de la console, procédez comme suit :
+ Découvrez les cas d'utilisation courants des fonctions durables, notamment les transactions distribuées, le traitement des commandes et les flux de travail de révision humaine. Voir les [exemples](durable-examples.md).
+ Découvrez comment surveiller les exécutions de fonctions durables à l'aide de CloudWatch métriques et d'un historique d'exécution. Consultez [la section Surveillance et débogage](durable-monitoring.md).
+ Découvrez comment invoquer des fonctions durables de manière synchrone et asynchrone, et comment gérer les exécutions de longue durée. Voir [Invocation de fonctions durables.](durable-invoking.md)
+ Suivez les meilleures pratiques en matière de rédaction de code déterministe, de gestion de la taille des points de contrôle et d'optimisation des coûts. Consultez la section [Bonnes pratiques](durable-best-practices.md).
+ Découvrez comment tester des fonctions durables localement et dans le cloud. Voir [Tester des fonctions durables](durable-testing.md).
+ Comparez les fonctions durables aux Step Functions pour savoir quand chaque approche est la plus efficace. Voir [Durable functions ou Step Functions](durable-step-functions.md).