Comment résoudre les erreurs de limitation de fonction Lambda de type « Dépassement du débit » et 429 « TooManyRequestsException » ?

Lecture de 5 minute(s)
0

Ma fonction AWS Lambda génère des erreurs « Dépassement du débit » et 429 « TooManyRequestsException ».

Résolution

Les fonctions Lambda sont parfois limitées pour protéger vos ressources et vos applications en aval. Bien que Lambda se mette automatiquement à l'échelle pour s'adapter à votre trafic entrant, votre fonction peut malgré tout rester limitée pour diverses raisons.

Pour résoudre les problèmes de limitation Lambda, y compris les erreurs Dépassement du débit et TooManyRequestsException, procédez comme suit.

Vérifiez quelle ressource est limitée

Les erreurs de limitation peuvent ne pas provenir de votre fonction Lambda. Des limitations peuvent également se produire sur les appels d'API au cours de l'appel de votre fonction.

Pour vérifier quelle ressource est limitée, consultez les ressources suivantes.

Consultez vos Amazon CloudWatch Logs pour vérifier s'ils contiennent des erreurs de limitation sans points de données correspondants dans les métriques de limitation de Lambda

S'il n'existe pas de métriques Throttles Lambda, la limitation se produit sur les appels d'API dans le code de votre fonction Lambda.

Vérifiez si le code de votre fonction contient des appels d'API limités

Si certains appels d'API sont limités, utilisez le backoff exponentiel dans votre code pour retenter les appels d'API.

Remarque : si avez besoin d'un quota de transactions par seconde (TPS) plus élevé pour un appel d'API, vous pouvez demander une augmentation du quota de service. Tous les quotas ne sont pas ajustables.

Vérifiez les métriques de simultanéité de votre fonction

Passez en revue vos métriques Lambda dans Amazon CloudWatch

Vérifiez la métrique ConcurrentExecutions de votre fonction dans la région AWS où vous constatez une limitation.

Comparez la métrique ConcurrentExecutions à la métrique Throttles correspondant au même horodatage

Consultez les statistiques Maximum pour ConcurrentExecutions et Sum pour Throttles. Vérifiez si le nombre maximal d'exécutions simultanées ConcurrentExecutions est proche du quota de simultanéité au niveau du compte dans la région, ainsi que les points de données correspondants dans le graphique Throttles (Limites).

Vérifiez si vous dépassez le quota initial de simultanéité de transmission en rafales pour une région AWS donnée

Sur la page des métriques de Lambda dans la console CloudWatch, réduisez la plage de temps du graphique à 1 minute. Si vous êtes limité par le dimensionnement en rafales, vous constatez un pic des métriques qui correspond à un motif en escalier de ConcurrentExecutions sur le graphique.

Remarque : pour contourner les limites de simultanéité en rafales, vous pouvez configurer la simultanéité allouée.

Recherchez des pics dans les métriques Duration (Durée) de votre fonction

La simultanéité dépend de la durée de la fonction. Si l'exécution du code de votre fonction prend trop de temps, cela peut signifier qu'il ne dispose pas de suffisamment de ressources de calcul.

Essayez d'augmenter le paramètre de mémoire de la fonction. Ensuite, utilisez AWS X-Ray et CloudWatch Logs pour isoler la cause des augmentations de durée.

Remarque : la modification du paramètre de mémoire peut affecter les frais que vous encourez pour le temps d'exécution.

Vous pouvez ajouter la fonction à un Amazon Virtual Private Cloud (Amazon VPC). Si votre fonction se trouve dans un Amazon VPC, consultez Comment accorder l'accès Internet à une fonction Lambda connectée à un VPC Amazon ?

Recherchez une augmentation des métriques Erreurs de votre fonction

L'augmentation des erreurs peut entraîner des nouvelles tentatives et une augmentation globale des appels. L'augmentation des appels peut entraîner une augmentation de la simultanéité. Utilisez CloudWatch Logs pour identifier et éliminer les erreurs, et veillez à ce que le code de votre fonction gère les exceptions.

Remarque : votre fonction peut également être limitée en fonction des demandes d'appel par région (demandes par seconde), soit 10 fois votre quota d'exécutions simultanées.

Configurez la simultanéité réservée

Vérifiez que vous avez configuré la simultanéité réservée sur votre fonction

Utilisez la console Lambda pour vérifier le paramètre ou appelez l'API GetFunction.

Remarque : si vous configurez une fonction de manière à n'avoir aucune simultanéité réservée, la fonction est alors limitée, car elle ne peut pas traiter d'événement. Veillez à augmenter la valeur à un nombre supérieur à zéro.

Consultez la statistique Maximum dans CloudWatch pour votre fonction

Vérifiez si la métrique de la fonction atteint la valeur maximale pour ConcurrentExecutions à un moment donné.

Augmentez la simultanéité réservée de votre fonction à une valeur de simultanéité qui empêche sa limitation

Utilisez la console Lambda pour modifier le paramètre ou appelez l'API PutFunctionConcurrency.

Utilisez le backoff exponentiel dans votre application

La bonne pratique pour réessayer les demandes limitées consiste à utiliser le backoff exponentiel dans votre application pour appeler votre fonction Lambda.

Utilisez une file d'attente de lettres mortes

Pour les sources d'événements asynchrones telles qu'Amazon Simple Storage Service (Amazon S3) et Amazon EventBridge, configurez votre fonction avec une file d'attente de lettres mortes (DLQ). La DLQ capture tous les événements rejetés en raison de la limitation constante et peut protéger vos données si vous observez une limitation significative.

Remarque : pour les sources d'événements Amazon Simple Queue Service (Amazon SQS), vous devez configurer la file d'attente DLQ sur la file d'attente Amazon SQS.

Demandez une augmentation des quotas de service

Si votre charge de travail nécessite un quota de service plus élevé pour les exécutions simultanées, utilisez la console de quotas de service pour demander une augmentation du quota de service.


Informations connexes

Bonnes pratiques d'utilisation des fonctions AWS Lambda

Résolution des problèmes d'appel dans AWS Lambda

Gestion des erreurs et nouvelles tentatives automatiques dans AWS Lambda

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an