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.
AWS Lambda gestionnaire de fonctions dans Node.js
Le gestionnaire de fonction Lambda est la méthode dans votre code de fonction qui traite les événements. Lorsque votre fonction est invoquée, Lambda exécute la méthode du gestionnaire. Votre fonction s’exécute jusqu’à ce que le gestionnaire renvoie une réponse, se ferme ou expire.
L'exemple de fonction suivant enregistre le contenu de l'objet d'événement et renvoie l'emplacement des journaux.
Note
Cette page présente des exemples de gestionnaires de modules CommonJS et ES. Pour en savoir plus sur la différence entre ces deux types de gestionnaires, consultez Désignation d’un gestionnaire de fonctions en tant que module ES.
Lorsque vous configurez une fonction, la valeur du paramètre du gestionnaire est le nom du fichier et le nom de la méthode du gestionnaire exporté, séparés par un point. La valeur par défaut dans la console et pour les exemples de ce guide est index.handler
. Cela indique la méthode handler
qui est exportée à partir du fichier index.js
.
L’exécution transmet des arguments à la méthode du gestionnaire. Le premier argument est l’objet event
, qui contient les informations de l’appelant. L’appelant transmet ces informations sous la forme d’une chaîne au format JSON lorsqu’il appelle Invoke, et l’environnement d’exécution les convertit en objet. Lorsqu'un AWS service invoque votre fonction, la structure de l'événement varie d'un service à l'autre.
Le deuxième argument est l’objet de contexte, qui contient des informations sur l’invocation, la fonction et l’environnement d’exécution. Dans l’exemple précédent, la fonction obtient le nom du flux de journaux de l’objet de contexte et le renvoie au mécanisme d’invocation.
Vous pouvez également utiliser un argument callback, qui est une fonction que vous pouvez appeler dans les gestionnaires non asynchrones pour envoyer une réponse. Nous vous recommandons d’utiliser async/await plutôt que des callbacks. Async/await améliore la lisibilité, la gestion des erreurs et l’efficacité. Pour plus d’informations sur les différences entre async/await et les callbacks, consultez Utilisation de callbacks.
Dénomination
Lorsque vous configurez une fonction, la valeur du paramètre du gestionnaire est le nom du fichier et le nom de la méthode du gestionnaire exporté, séparés par un point. La valeur par défaut pour les fonctions créées dans la console et pour les exemples présentés dans ce guide estindex.handler
. Cela indique la handler
méthode qui est exportée depuis le index.mjs
fichier index.js
or.
Si vous créez une fonction dans la console en utilisant un nom de fichier ou un nom de gestionnaire de fonction différent, vous devez modifier le nom du gestionnaire par défaut.
Pour modifier le nom du gestionnaire de fonction (console)
-
Ouvrez la page Fonctions
de la console Lambda et choisissez votre fonction. -
Cliquez sur l'onglet Code.
-
Faites défiler l'écran jusqu'au volet Paramètres d'exécution et choisissez Modifier.
-
Dans Gestionnaire, saisissez le nouveau nom de votre gestionnaire de fonction.
-
Choisissez Enregistrer.
Utilisation d’async/await
Si votre code exécute une tâche asynchrone, utilisez le modèle async/await pour vous assurer que le gestionnaire termine son exécution. Async/await est un moyen concis et lisible d’écrire du code asynchrone dans Node.js, sans avoir besoin de callbacks imbriqués ou de promesses en chaîne. Avec async/await, vous pouvez écrire du code qui se lit comme du code synchrone, tout en étant asynchrone et non bloquant.
Le mot-clé async
marque une fonction comme étant asynchrone, et le mot-clé await
met en pause l’exécution de la fonction jusqu’à ce qu’une Promise
soit résolue.
Note
Assurez-vous d’attendre la fin des événements asynchrones. Si la fonction retourne avant que les événements asynchrones ne soient terminés, elle risque d’échouer ou de provoquer un comportement inattendu dans votre application. Cela peut se produire lorsqu’une boucle forEach
contient un événement asynchrone. Les boucles forEach
attendent un appel synchrone. Pour plus d’informations, consultez Array.prototype.forEach()
L’exemple suivant utilise async/await pour répertorier vos compartiments Amazon Simple Storage Service.
Note
Avant d’utiliser cet exemple, assurez-vous que le rôle d’exécution de votre fonction dispose d’autorisations de lecture Amazon S3.
Utilisation de callbacks
Nous vous recommandons d’utiliser async/await pour déclarer le gestionnaire de fonctions au lieu d’utiliser des callbacks. Async/await est un meilleur choix pour plusieurs raisons :
-
Lisibilité : le code Async/await est plus facile à lire et à comprendre que le code callback, qui peut rapidement devenir difficile à suivre et entraîner l’enfer du callback.
-
Débogage et gestion des erreurs : le débogage du code basé sur des callbacks peut être difficile. La pile d’appels peut devenir difficile à suivre et les erreurs peuvent facilement se perdre. Avec async/await, vous pouvez utiliser des blocs try/catch pour gérer les erreurs.
-
Efficacité : les callbacks nécessitent souvent de basculer entre différentes parties du code. Async/await permet de réduire le nombre de changements de contexte, ce qui se traduit par un code plus efficace.
Lorsque vous utilisez des callbacks dans votre gestionnaire, la fonction continue à s’exécuter jusqu’à ce que la boucle d’événement
La fonction de rappel accepte deux arguments : un(e) Error
et une réponse. L’objet de réponse doit être compatible avec JSON.stringify
.
L’exemple suivant vérifie la fonction d’une URL et renvoie le code de statut au mécanisme d’appel.
Dans l’exemple suivant, la réponse du Simple Storage Service (Amazon S3) est renvoyée au mécanisme d’invocation dès qu’elle est disponible. Le délai d’expiration de l’événement en boucle est gelé et reprend lors de l’invocation suivante de la fonction.
Note
Avant d’utiliser cet exemple, assurez-vous que le rôle d’exécution de votre fonction dispose d’autorisations de lecture Amazon S3.