Augmenter le Timeout d'une Fonction Lambda AWS : Configuration et Limites
Votre fonction Lambda s'arrête brutalement après 3 secondes alors que votre traitement en nécessite 10 — c'est le comportement par défaut du timeout Lambda qui entre en jeu, et c'est l'une des premières surprises opérationnelles que rencontrent les équipes qui migrent des tâches batch ou des appels API lents vers une architecture serverless.
Résumé (TL;DR) : Augmenter le Timeout Lambda
| Point clé | Détail |
|---|---|
| Timeout par défaut | 3 secondes |
| Timeout maximum | 900 secondes (15 minutes) |
| Où le modifier | Console AWS, AWS CLI, CloudFormation, SAM, Terraform |
| Erreur observée | Task timed out after X.XX seconds dans CloudWatch Logs |
| Impact facturation | La durée facturée inclut le temps jusqu'au timeout — un timeout mal configuré coûte de l'argent |
Comment fonctionne le Timeout Lambda
Lambda exécute votre code dans un environnement d'exécution géré. Dès que l'invocation démarre, un compteur interne se déclenche. Si votre handler n'a pas retourné de réponse avant l'expiration du timeout configuré, Lambda interrompt l'exécution et émet une erreur Task timed out. Ce n'est pas un crash applicatif — c'est une interruption forcée par la plateforme.
Le timeout s'applique à chaque invocation individuelle, pas à la durée de vie totale de l'environnement d'exécution. Une fonction avec un timeout de 10 secondes peut être invoquée des milliers de fois — chaque invocation dispose de ses propres 10 secondes.
(API GW, S3, EventBridge)"] --> B["Lambda démarre l'invocation
Compteur timeout démarré"] B --> C{"Handler terminé
avant timeout ?"} C -- Oui --> D["Réponse retournée
Invocation réussie"] C -- Non --> E["Timeout atteint
Interruption forcée"] E --> F["CloudWatch Logs:
Task timed out after X.XX seconds"]
- Invocation reçue : Lambda reçoit l'événement déclencheur (API Gateway, S3, EventBridge, etc.).
- Compteur démarré : Le chronomètre interne démarre dès le début de l'exécution du handler.
- Exécution normale : Si le handler retourne avant le timeout, l'invocation réussit.
- Timeout atteint : Si le compteur expire, Lambda force l'arrêt et écrit l'erreur dans CloudWatch Logs.
Augmenter le Timeout Lambda : Toutes les Méthodes
Il existe plusieurs façons de modifier le timeout selon votre outillage. Choisissez celle qui correspond à votre workflow de déploiement.
Via la Console AWS
C'est la méthode la plus rapide pour un ajustement ponctuel ou un diagnostic en production.
- Ouvrez la Console AWS Lambda et sélectionnez votre fonction.
- Cliquez sur l'onglet Configuration, puis sur Paramètres généraux.
- Cliquez sur Modifier.
- Dans le champ Timeout, entrez la valeur souhaitée (minutes et secondes).
- Cliquez sur Enregistrer.
Via AWS CLI
La CLI est indispensable pour automatiser la modification ou l'intégrer dans un pipeline CI/CD. La commande update-function-configuration est la bonne action ici — pas update-function-code.
aws lambda update-function-configuration \
--function-name ma-fonction-lambda \
--timeout 30 \
--region us-east-1
La valeur --timeout est exprimée en secondes. Pour 15 minutes (maximum), utilisez --timeout 900.
Pour vérifier la configuration actuelle avant de modifier :
aws lambda get-function-configuration \
--function-name ma-fonction-lambda \
--region us-east-1 \
--query 'Timeout'
Via AWS CloudFormation
🔽 Cliquer pour afficher le template CloudFormation
Resources:
MaFonctionLambda:
Type: AWS::Lambda::Function
Properties:
FunctionName: ma-fonction-lambda
Runtime: python3.12
Handler: index.handler
Role: arn:aws:iam::123456789012:role/mon-role-lambda
Timeout: 30
Code:
ZipFile: |
def handler(event, context):
return {'statusCode': 200}
Via AWS SAM
🔽 Cliquer pour afficher le template SAM
Resources:
MaFonctionLambda:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: python3.12
Timeout: 30
CodeUri: ./src/
Diagnostiquer une Erreur de Timeout Lambda
Avant d'augmenter aveuglément le timeout, confirmez que c'est bien un timeout et non une autre classe d'erreur. Le message dans CloudWatch Logs est sans ambiguïté :
REPORT RequestId: abc123 Duration: 3000.00 ms Billed Duration: 3000 ms
Task timed out after 3.00 seconds
Si vous voyez Task timed out, c'est un timeout. Si vous voyez une stack trace Python, Java ou Node.js, c'est une exception applicative — augmenter le timeout ne résoudra rien.
Requête CloudWatch Logs Insights pour isoler les timeouts
Plutôt que de parcourir les logs manuellement, utilisez Logs Insights pour filtrer uniquement les invocations ayant expiré :
fields @timestamp, @message
| filter @message like /Task timed out/
| sort @timestamp desc
| limit 50
Exécutez cette requête via la Console CloudWatch Logs Insights ou via CLI :
aws logs start-query \
--log-group-name /aws/lambda/ma-fonction-lambda \
--start-time 1700000000 \
--end-time 1700086400 \
--query-string "fields @timestamp, @message | filter @message like /Task timed out/ | sort @timestamp desc | limit 50" \
--region us-east-1
Chercher 'Task timed out'"] B --> C["Mesurer Duration
dans le rapport REPORT"] C --> D["Augmenter timeout
via CLI ou Console"] D --> E["Surveiller les invocations
suivantes dans CloudWatch"] E --> F{"Timeout résolu ?"} F -- Oui --> G["Terminé"] F -- Non --> H["Vérifier timeout
du service appelant"]
- Vérifier les logs : Confirmer la présence du message
Task timed outdans CloudWatch Logs. - Mesurer la durée réelle : Regarder le champ
Durationdans le rapport REPORT pour estimer le temps nécessaire. - Augmenter le timeout : Configurer une valeur supérieure à la durée observée, avec une marge raisonnable.
- Surveiller après modification : Vérifier que les invocations suivantes se terminent sans timeout.
Le Piège Classique : Timeout et Intégrations Synchrones
Voici un scénario que j'ai vu plusieurs fois en production : la fonction Lambda est configurée avec un timeout de 29 secondes, mais les invocations continuent d'échouer à 29 secondes exactement. Le réflexe est d'augmenter encore le timeout Lambda — mais ce n'est pas là que se trouve le vrai problème.
Quand Lambda est invoquée via API Gateway (REST API ou HTTP API), API Gateway impose son propre timeout d'intégration, indépendant du timeout Lambda. Ce timeout d'intégration est de 29 secondes maximum pour API Gateway REST API et HTTP API — et il ne peut pas être augmenté.
Penser que le timeout Lambda est le seul compteur en jeu, c'est comme régler l'alarme de son téléphone sans savoir que quelqu'un d'autre a déjà coupé le courant avant. Deux systèmes, deux compteurs, deux points de défaillance.
Si votre traitement dépasse 29 secondes et passe par API Gateway, augmenter le timeout Lambda au-delà de 29 secondes n'apportera rien. Il faut repenser l'architecture : réponse asynchrone avec un identifiant de job, polling côté client, ou utilisation de WebSockets.
Ce comportement s'applique aussi à d'autres services qui invoquent Lambda de façon synchrone — vérifiez toujours les limites de timeout du service appelant, pas seulement de Lambda.
IAM : Permissions Requises pour Modifier le Timeout
Pour modifier la configuration d'une fonction Lambda (timeout, mémoire, variables d'environnement), le principal IAM doit disposer de l'action lambda:UpdateFunctionConfiguration. Sans cette permission, la commande CLI retournera une erreur AccessDeniedException.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:UpdateFunctionConfiguration",
"lambda:GetFunctionConfiguration"
],
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:ma-fonction-lambda"
}
]
}
L'action lambda:GetFunctionConfiguration permet de lire la configuration actuelle sans la modifier — utile pour les rôles de lecture seule en audit ou en monitoring.
Limites et Considérations Opérationnelles
Le timeout maximum de Lambda est de 900 secondes (15 minutes). C'est une limite de service documentée par AWS — elle ne peut pas être augmentée via une demande de quota.
Si votre traitement dépasse 15 minutes, Lambda n'est pas le bon outil. Les alternatives natives AWS pour les traitements longs incluent AWS Fargate, AWS Batch, ou AWS Step Functions avec des activités de longue durée.
Un timeout à 900 secondes sur une fonction invoquée fréquemment peut générer des coûts significatifs si le code attend passivement (connexion base de données suspendue, appel HTTP bloquant). La durée facturée correspond au temps réel d'exécution jusqu'au timeout — pas au temps utile.
Quelques points à vérifier avant de simplement augmenter le timeout :
- Le code est-il bloquant ? Un appel HTTP sans timeout côté client peut bloquer indéfiniment jusqu'au timeout Lambda. Configurez des timeouts explicites dans votre code.
- La connexion base de données est-elle correctement fermée ? Les connexions non libérées peuvent épuiser le pool de connexions même si la fonction finit par se terminer.
- La mémoire est-elle suffisante ? Lambda alloue du CPU proportionnellement à la mémoire configurée. Une fonction sous-dimensionnée en mémoire peut être lente non pas à cause du timeout, mais à cause du manque de CPU.
Conclusion et Prochaines Étapes pour Optimiser le Timeout Lambda
Modifier le timeout Lambda est une opération de deux minutes — mais comprendre pourquoi votre fonction dépasse son timeout est ce qui évite de revenir sur le même problème trois semaines plus tard. Confirmez l'erreur dans CloudWatch Logs, mesurez la durée réelle, ajustez le timeout avec une marge raisonnable, et vérifiez que le service appelant n'impose pas sa propre limite.
Pour aller plus loin :
- Documentation AWS Lambda — Configuration des paramètres de fonction
- Quotas AWS Lambda
- Consultez notre article sur la configuration de la mémoire Lambda pour comprendre l'impact CPU sur les performances.
Glossaire
| Terme | Définition |
|---|---|
| Timeout Lambda | Durée maximale allouée à une invocation Lambda avant interruption forcée. Configurable de 1 à 900 secondes. |
| Task timed out | Message d'erreur émis par Lambda dans CloudWatch Logs quand une invocation dépasse le timeout configuré. |
| Invocation synchrone | Mode d'invocation où l'appelant attend la réponse de Lambda. API Gateway utilise ce mode. |
| Timeout d'intégration API Gateway | Limite de 29 secondes imposée par API Gateway sur les intégrations synchrones, indépendante du timeout Lambda. |
| UpdateFunctionConfiguration | Action IAM Lambda permettant de modifier les paramètres de configuration d'une fonction (timeout, mémoire, etc.). |
Commentaires
Enregistrer un commentaire