Pourquoi ma métrique IteratorAge Lambda augmente-t-elle ?

Date de la dernière mise à jour : 05/08/2019

Je vois une augmentation ou des pics dans la métrique IteratorAge de ma fonction AWS Lambda. D'où vient le problème et comment le résoudre ?

Brève description

Pour les appels basés sur les flux, Lambda émet la métrique IteratorAge. L'âge de l'itérateur est le délai entre l'enregistrement du dernier enregistrement d' un lot et la lecture de l'enregistrement par Lambda. L'âge de l'itérateur dépend d'autres paramètres, tels que la durée d'exécution de la fonction Lambda, le nombre de partitions et la taille du lot. Pour plus d'informations, consultez Métriques AWS Lambda CloudWatch.

En général, l'âge des itérateurs augmente lorsqu'une fonction ne parvient pas à traiter la quantité de données en cours d'écriture dans les flux.

Solution

Examinez comment chacun de ces paramètres de fonction Lambda et cas d'utilisation affecte l'âge de l'itérateur. Ensuite, reconfigurez votre fonction afin de diminuer l'âge de l'itérateur.

Durée

Une durée d'exécution élevée pour votre fonction Lambda peut entraîner un âge élevé de l'itérateur. La durée est le délai nécessaire au traitement d'un lot d'enregistrements. La réduction de la durée augmente le débit, ce qui diminue l'âge de l'itérateur.

Pour réduire la durée de votre fonction, essayez de :

  • Augmenter la quantité de mémoire allouée à la fonction. Cela peut permettre à votre fonction de traiter les enregistrements plus rapidement, ce qui diminue l'âge de l'itérateur.
  • Optimiser le code de votre fonction (par exemple, en utilisant des appels en parallèle, des méthodes asynchrones, etc.) pour accélérer le traitement des enregistrements.

AWS X-Ray est également utile pour optimiser la durée de la fonction. Pour plus d'informations, consultez AWS Lambda et AWS X-Ray et Instrumentation des fonctions AWS Lambda.

Nombre de partitions

L'augmentation du nombre de partitions dans un flux diminue l'âge de l'itérateur, en supposant que les enregistrements soient répartis de manière égale, ce qui constitue une pratique recommandée. En effet, le nombre de partitions d'un flux correspond à la simultanéité maximale de votre fonction Lambda. Fondamentalement, un plus grand nombre de partitions augmente la simultanéité et donc le débit. Pour plus d'informations, consultez Appels d'événements de flux.

Remarque : le fractionnement des partitions n'a pas d'effet immédiat sur l'âge de l'itérateur. Les enregistrements existants restent dans les partitions dans lesquelles ils ont été écrits et ces dernières doivent rattraper leur retard avant que l’âge de l’itérateur de ces partitions diminue.

Taille de lot

En fonction de la façon dont votre fonction Lambda fonctionne, modifier la taille de lot peut diminuer l'âge de l'itérateur.

Supposons que la durée de votre fonction soit essentiellement indépendante du nombre d'enregistrements dans un événement, par exemple, lorsque des appels en aval ont lieu dans un lot. Dans ce cas, l'augmentation de la taille du lot augmente le débit et réduit l'âge de l'itérateur.

Toutefois, la durée de votre fonction peut fortement dépendre du nombre d'enregistrements dans un événement, par exemple, lorsque chaque enregistrement déclenche un appel en aval synchrone. Dans ce cas, le réglage de la taille de lot peut ne pas diminuer efficacement l'âge de l'itérateur.

Pour plus d'informations, consultez Appels d'événements de flux.

Erreurs

Les erreurs d’appel peuvent allonger le traitement d'un événement par votre fonction Lambda ou l'amener à traiter le même événement de manière répétée. Étant donné que les enregistrements d'événements sont lus de manière séquentielle, votre fonction ne peut pas passer à des enregistrements ultérieurs si un lot d'enregistrements provoque une erreur à chaque nouvelle tentative. Dans ces cas, l'âge de l'itérateur augmente linéairement avec l'âge des enregistrements.

Il est important que votre fonction gère avec correctement tous les enregistrements écrits dans le flux. Au fur et à mesure que vous développez votre fonction, la journalisation et l’instrumentation de votre code peuvent vous aider à diagnostiquer les erreurs. Pour plus d'informations, consultez Surveillance et résolution des problèmes liés aux applications Lambda et Instrumentation des fonctions AWS Lambda.