Comment modifier le délai d’expiration dans AWS Lambda

Photo of author

By pierre



Pour bâtir une architecture serverless sur AWS, ou du moins une partie, AWS Lambda s’avère être un élément fondamental.

Il s’agit d’une fonction de calcul sans serveur, souvent codée en Node.JS ou Python, que vous pouvez développer et exécuter sans avoir à gérer de clusters ou de serveurs backend. Vous pouvez relier plusieurs fonctions AWS Lambda pour créer des processus plus complexes.

Cependant, une caractéristique importante de Lambda est sa limitation en durée de traitement, qui détermine quand l’utilisation d’AWS Lambda est pertinente.

Source : aws.amazon.com

Qu’est-ce que le délai d’attente ?

Le délai d’attente d’une fonction AWS Lambda est un paramètre qui définit la durée maximale pendant laquelle une fonction peut s’exécuter avant d’être arrêtée.

Les fonctions Lambda sont conçues pour être éphémères et sans état, et c’est ainsi qu’il est recommandé de les utiliser. Il n’est pas rare de voir des équipes essayer d’utiliser Lambda pour des processus de longue durée, simplement pour bénéficier des avantages du serverless. En effet, exécuter du code sans avoir à configurer un serveur avec des ressources CPU et mémoire spécifiques est souvent plus économique. L’intention est donc compréhensible.

Cependant, une fonction qui s’exécute trop longtemps peut entraîner des problèmes de performance et d’utilisation des ressources. Il y a un risque de blocage des ressources et, ayant un processus de longue durée, on ne se préoccupe souvent pas d’optimiser les différentes étapes. Ainsi, un délai de cinq minutes ne pose plus de problème, même si cela peut être inutile pour le processus lui-même.

Par défaut, le délai d’expiration d’une fonction Lambda est de 3 secondes seulement. Votre code doit donc impérativement se terminer dans ce laps de temps. C’est idéal pour une architecture avec des communications et des temps de réponse très rapides, potentiellement avec des millions de transactions en très peu de temps. Mais cela limite considérablement les cas d’usage de Lambda. Vous pouvez augmenter ce délai jusqu’à un maximum de 900 secondes (15 minutes). Une fois ce délai atteint, Lambda interrompt la fonction et renvoie un code d’erreur.

Comment configurer le délai d’attente ?

Source: aws.amazon.com

Vous pouvez configurer le délai d’attente d’une fonction Lambda via la console de gestion AWS, l’interface de ligne de commande AWS CLI ou les SDK AWS.

Voici les étapes à suivre :

  • Ouvrez la console de gestion AWS et allez au service Lambda.
  • Sélectionnez la fonction Lambda que vous voulez modifier.
  • Dans l’onglet « Configuration », descendez jusqu’à la section « Configuration générale » et trouvez le paramètre « Timeout ».
  • Cliquez sur le bouton « Modifier » à côté.
  • Saisissez la nouvelle valeur de délai d’attente en secondes (entre 1 et 900) et cliquez sur « Enregistrer ».
  • Cliquez sur « Enregistrer » en haut de la page pour valider les modifications de la fonction Lambda.

Vous pouvez également utiliser la ligne de commande AWS CLI pour modifier le délai d’attente d’une fonction Lambda. Voici un exemple de commande :

aws lambda update-function-configuration --function-name [Nom_De_Ma_Fonction_Lambda] --timeout 900

Cette commande configure le délai d’attente pour la fonction [Nom_De_Ma_Fonction_Lambda] à 15 minutes. Remplacez simplement le nom de fonction par le vôtre et indiquez la valeur du délai d’attente souhaité en secondes.

Points à considérer

Le délai d’attente s’applique à toute la fonction, et non à des blocs de code ou des opérations spécifiques. Donc, si votre fonction effectue une opération de longue durée (traitement d’un gros fichier, requête réseau), vous devez vous assurer que le délai est suffisant, même dans le pire des cas.

Il faut retenir que les fonctions Lambda sont faites pour être éphémères et sans état. Elles sont conçues pour réaliser de petites tâches discrètes. Si votre fonction Lambda met trop de temps à s’exécuter, il peut être judicieux de la diviser en plusieurs fonctions plus petites, que vous pouvez ensuite enchaîner grâce à des déclencheurs. Par exemple, la sortie de la fonction précédente peut être stockée sur un compartiment S3 spécifique.

De plus, pour les processus de longue durée dépassant 15 minutes, envisagez d’utiliser AWS Step Functions pour orchestrer une série de fonctions Lambda ou d’autres services AWS.

Meilleures pratiques

Le délai d’attente en lui-même ne semble pas mériter une discussion approfondie. La plupart du temps, les développeurs le règlent directement à 15 minutes pour toutes les fonctions Lambda. Même si la fonction se termine plus tôt, cela n’a pas d’effet secondaire négatif.

Il y a néanmoins quelques bonnes pratiques à respecter.

#1. Définir une valeur appropriée

Vous devez fixer le délai d’attente en fonction du temps d’exécution prévu de la fonction, en évitant une valeur trop courte ou inutilement longue.

Par exemple, vous pourriez vouloir vous assurer que la durée totale d’une fonction Lambda ne dépasse pas trois minutes, pour des raisons d’architecture ou de performance de votre application.

De même, vous pourriez vouloir éviter que la fonction Lambda ne se termine avant, par exemple, trois minutes, pour effectuer plusieurs tentatives dans le code si certaines ressources nécessaires sont indisponibles ou verrouillées.

Donc, avant de définir le délai d’attente à 15 minutes, réfléchissez à la valeur optimale du temps d’exécution. Choisir des valeurs précises est un moyen de définir des limites pour l’équipe de développement.

#2. Surveillance dans le temps

Une fois les délais d’attente définis, suivez le temps d’exécution de vos fonctions Lambda. Cela vous permettra de vérifier si votre choix initial était correct ou si des ajustements sont nécessaires.

Vous pouvez utiliser les métriques et les journaux CloudWatch pour surveiller le temps d’exécution des fonctions. Ainsi, vous pourrez identifier celles qui prennent plus de temps que prévu et celles qui sont beaucoup plus rapides.

#3. Appel asynchrone

Si votre fonction Lambda est déclenchée par un événement qui ne nécessite pas de réponse immédiate (téléchargement de fichier, message d’une file d’attente), utilisez l’appel asynchrone pour limiter les risques de dépassement de délai. La fonction s’exécutera en arrière-plan sans attendre de réponse, ce qui peut réduire le nombre de dépassements de délai, car le temps d’attente d’une ressource ne sera pas inclus dans le temps d’exécution global de Lambda.

#4. Utiliser Step Functions pour les processus complexes

Pour les processus de longue durée dépassant la limite de 15 minutes, utilisez AWS Step Functions pour orchestrer une série de fonctions Lambda ou d’autres services AWS. Step Functions divise le processus en tâches plus petites et gérables, exécutables dans le délai imparti.

Vous pouvez même exécuter plusieurs fonctions lambda en parallèle au sein d’une fonction Step. Laissez ensuite la fonction Step attendre la fin de toutes les fonctions lambda parallèles avant de continuer. C’est une forme de mise à l’échelle horizontale, où plusieurs fonctions lambda peuvent diviser et résoudre un problème partiellement ensemble.

Enfin, vous n’aurez qu’à collecter les résultats partiels et à construire la résolution finale, pour laquelle une fonction lambda indépendante peut suffire.

#5. Optimiser le code

Optimisez le code de votre fonction Lambda pour réduire le temps d’exécution et améliorer les performances, surtout si le délai d’attente est parfois insuffisant. Dans ce cas, une optimisation du code peut aider à éviter ces échecs.

Quel est l’impact du délai d’attente sur la facturation ?

Source : aws.amazon.com

Le paramètre de délai d’expiration d’une fonction AWS Lambda n’a pas d’impact direct sur la facturation. AWS Lambda facture en fonction du nombre de requêtes et de la durée d’exécution de la fonction.

Si vous augmentez le délai d’attente, cela peut entraîner des temps d’exécution plus longs, mais seulement si la fonction a réellement besoin de ce temps supplémentaire. Si vous combinez cela avec une fréquence élevée d’une fonction qui prend plus de temps, vous pouvez vous attendre à des coûts plus importants.

Toutefois, si la fonction n’est pas souvent invoquée ou si elle termine avant que le délai d’attente ne soit atteint, l’impact sur la facturation peut être faible.

C’est pourquoi le fait de configurer toutes les fonctions Lambda avec un délai d’attente de 15 minutes par défaut n’est peut-être pas la principale cause de l’augmentation du coût de votre traitement global.

Cela entraîne cependant une augmentation indirecte des coûts. Les développeurs ont l’impression d’avoir une marge de manœuvre et peuvent moins optimiser le code que s’ils avaient des délais plus restrictifs, mais toujours réalistes.

De plus, AWS Lambda propose une offre gratuite comprenant 1 million de requêtes gratuites et 400 000 Go-secondes de temps de calcul par mois. Si votre utilisation se situe dans les limites de l’offre gratuite, vous ne paierez pas le temps d’exécution, quel que soit le délai d’attente.

Conclusion

AWS Lambda est un outil puissant, notamment pour le traitement serverless dans le cloud AWS. Il a ses objectifs et ses limites, dont il faut tenir compte. N’essayons pas de l’utiliser pour des cas d’usage pour lesquels il n’est pas conçu.

Il est idéal pour les actions simples, asynchrones et déclenchées, qui ne nécessitent pas plus de 15 minutes d’exécution. Pour les processus plus complexes, utilisez AWS Step Functions pour combiner plusieurs fonctions Lambda en un processus orchestré. Ou alors, abandonnez le serverless et utilisez des serveurs avec une configuration et une puissance de calcul adaptées à votre tâche.

Pour aller plus loin, consultez l’introduction à AWS Lambda pour les débutants.