Ma fonction AWS Lambda renvoie les erreurs de limitation « Dépassement du taux » et « TooManyRequestsException ».
Résolution
Vérifier quelle ressource est limitée
Les erreurs de limitation peuvent ne pas se produire dans votre fonction Lambda. Des limitations peuvent survenir sur des appels d'API lors de l'invocation de votre fonction.
Pour vérifier quelle ressource a été limitée, consultez vos Amazon CloudWatch Logs et vos métriques pour détecter les erreurs de limitation. S'il n'existe aucune métrique Limitations Lambda, la limitation se produit sur les appels d'API dans le code de votre fonction Lambda.
Vérifier vos journaux de fonctions et votre code pour détecter tout appel d'API limité
Si les appels d'API sont limités, assurez-vous d'utiliser un backoff exponentiel dans votre code pour effectuer une nouvelle tentative sur les appels d'API.
Remarque : Si vous avez besoin d'un quota de transactions par seconde (TPS) plus élevé pour un appel d'API, demandez une augmentation du quota de service. Les quotas ne sont pas tous ajustables.
Vérifier la simultanéité de vos fonctions avec les métriques CloudWatch
Vérifiez la métrique ConcurrentExecutions pour votre fonction dans la région AWS où la limitation se produit.
Consultez la statistique Maximum pour Exécutions simultanées et la statistique Somme pour Limitations. Vérifiez que le nombre maximal d'exécutions simultanées est proche de votre quota de simultanéité au niveau de votre compte dans la région, conjointement avec les points de données associés dans le graphique Limitations.
Vérifier le quota de simultanéité
Vérifiez si vous avez dépassé le taux de mise à l'échelle de simultanéité pour la région de votre fonction. Votre taux de mise à l'échelle de simultanéité est de 1 000 instances d'environnement d'exécution toutes les 10 secondes. Pour plus d'informations, consultez la section Comportement de mise à l'échelle Lambda.
Sur la page Métriques de Lambda de la console CloudWatch, réduisez la plage de temps du graphique à 1 minute. Si vous êtes limité par des limites de simultanéité en rafale, vous pouvez observer un pic de limitations qui correspond à un modèle en escalier d'exécution simultanées sur le graphique.
Pour éviter les limites de simultanéité en rafale, vous pouvez configurer la simultanéité provisionnée. Vous pouvez également demander une augmentation de la limite de simultanéité pour ma fonction Lambda.
Vérifier les pics dans les métriques de durée de votre fonction
La simultanéité dépend de la durée de la fonction. Si l'exécution de votre code de fonction prend trop de temps, il est possible que les ressources de calcul soient insuffisantes.
Examinez le champ Mémoire maximale utilisée dans vos journaux d'exécution et comparez sa valeur au paramètre de mémoire configuré pour la fonction. Si la mémoire maximale utilisée est proche de la mémoire configurée, votre fonction est généralement liée à la mémoire. Pour plus d'informations, consultez la section Déterminer le paramètre de mémoire approprié pour une fonction Lambda.
Configurer la simultanéité réservée
Vérifiez que vous avez configuré la simultanéité réservée pour votre fonction. La simultanéité réservée sert de limite de simultanéité pour la fonction et protège également la fonction contre d'autres fonctions susceptibles de consommer la simultanéité non réservée. Bien que la simultanéité réservée puisse atténuer la limitation de la fonction, elle peut également limiter cette dernière par inadvertance.
Utilisez la console Lambda pour vérifier le paramètre de simultanéité réservée. Si la simultanéité réservée n'est pas configurée, la fonction utilise la simultanéité non réservée. Lorsque les invocations avec des fonctions dépassent la simultanéité non réservée, une limitation se produit.
Remarque : Si vous avez configuré une fonction sans accès simultané réservé, la fonction est limitée car elle ne peut traiter aucun événement. Veillez à augmenter la valeur jusqu'à un nombre supérieur à zéro.
Pour configurer ou augmenter la simultanéité réservée, consultez la section Configuration de la simultanéité réservée pour une fonction. Pour résoudre les problèmes de simultanéité réservée, consultez la fonction Comment résoudre les problèmes de simultanéité réservée de Lambda ?
Utilisez le backoff exponentiel
Pour éviter les erreurs de limitation, utilisez le backoff exponentiel et de nouvelles tentatives lorsque vous effectuez un appel d'API. Il est recommandé d'utiliser le backoff exponentiel dans votre application qui effectue des appels d'API pour votre fonction Lambda.
Pour plus d'informations, consultez les sections Backoff exponentiel et gigue et Comportement de nouvelle tentative. Veillez à répartir vos appels d'API au fil du temps. Planifiez des actions de manière aléatoire afin qu'elles s'étalent dans le temps.
Utiliser une file d'attente de lettres mortes
Pour les sources d'événements asynchrones, telles qu'Amazon Simple Storage Service (Amazon S3) et le planificateur Amazon EventBridge, configurez votre fonction avec une file d'attente de lettres mortes. Puis, vérifiez la gestion des erreurs pour la configuration des appels asynchrones. La file d'attente de lettres mortes détecte tous les événements qui sont ignorés en raison de blocages constants et peut protéger vos données.
Remarque : Pour les sources d'événements Amazon Simple Queue Service (Amazon SQS), vous devez configurer la file d'attente de lettres mortes sur la file d'attente Amazon SQS.
Demander une augmentation du quota de service
Si votre charge de travail nécessite un quota de service plus élevé pour les exécutions simultanées, demandez une augmentation du quota de service.
Informations connexes
Bonnes pratiques pour utiliser les fonctions Lambda
Résoudre les problèmes d'invocation dans Lambda
Comprendre le comportement de nouvelle tentative dans Lambda