Pourquoi ma métrique Lambda IteratorAge augmente-t-elle et comment la réduire ?

Date de la dernière mise à jour : 09/06/2022

Je vois une augmentation ou des pics dans la métrique IteratorAge de ma fonction AWS Lambda. Pourquoi l'âge de l'itérateur de ma fonction augmente-t-il et comment le réduire ?

Brève description

L'âge de l'itérateur d'une fonction Lambda augmente lorsque la fonction ne peut pas traiter efficacement les données écrites dans les flux qui invoquent la fonction. Pour réduire la métrique IteratorAge de votre fonction, vous devez augmenter votre débit de traitement de flux.

Les facteurs suivants influencent la métrique IteratorAge d'une fonction :

Consultez cet article pour comprendre comment chaque facteur affecte l'âge de l'itérateur. Ensuite, reconfigurez votre fonction ou votre flux de données pour réduire l'âge de l'itérateur de votre fonction en fonction de votre cas d'utilisation. Pour plus d'informations, consultez la rubrique Utilisation des métriques de fonction AWS Lambda.

Résolution

Réduire la durée de l'exécution de votre fonction

Une durée d'exécution élevée augmente l'âge de l'itérateur d'une fonction. La diminution de la durée augmente le débit d'une fonction, ce qui diminue l'âge de l'itérateur d'une fonction.

Pour réduire la durée d'exécution de votre fonction, effectuez l'une des opérations suivantes ou les deux :

1.    Augmenter la quantité de mémoire allouée à la fonction.

2.    Optimisez votre code de fonction afin de réduire le temps nécessaire au traitement des enregistrements.

Remarque : pour plus d'informations, consultez les rubriques AWS Lambda et AWS X-Ray et Instrumentation des fonctions AWS Lambda.

Augmenter le nombre de partitions de votre flux

Un faible nombre de partitions dans un flux augmente l'âge de l'itérateur d'une fonction. L'augmentation du nombre de partitions dans un flux augmente le débit d'une fonction, ce qui réduit l'âge de l'itérateur d'une fonction.

Pour augmenter le nombre de partitions de votre flux, suivez les instructions de la section Repartitionnement d'un flux.

Remarque : le fractionnement des partitions n'a pas d'effet immédiat sur l'âge de l'itérateur d'une fonction. Les enregistrements existants restent dans les partitions dans lesquelles ils ont été écrits. Ces partitions doivent rattraper leur backlog avant que l'âge de l'itérateur des partitions ne diminue. Pour plus d'informations, consultez Utilisation des flux.

Augmenter la taille des lots de votre flux

Si la durée d'exécution de votre fonction est indépendante du nombre d'enregistrements dans un événement, l'augmentation de la taille du lot de votre fonction diminue l'âge de l'itérateur de la fonction.

Pour augmenter la taille du lot de votre fonction, suivez les instructions de la rubrique Configuration d'un flux en tant que source d'événement.

Remarque : si la durée de votre fonction dépend du nombre d'enregistrements dans un événement, l'augmentation de la taille du lot de votre fonction ne diminue pas l'âge de l'itérateur de la fonction. Pour plus d'informations, consultez Utilisation des flux.

Assurez-vous que votre fonction gère convenablement les erreurs d'appel

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, une fonction ne peut pas passer à des enregistrements ultérieurs si un lot d'enregistrements provoque une erreur à chaque nouvelle tentative. Dans ces situations, l'âge de l'itérateur augmente linéairement avec l'âge des enregistrements.

Il est important que votre fonction gère gracieusement 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 les rubriques suivantes :

Gérez l'occurrence de votre accélérateur

Comme les enregistrements d'événements sont lus de manière séquentielle, une fonction ne peut pas progresser vers des enregistrements ultérieurs si l'invocation en cours est limitée. Dans ce cas, l'âge de l'itérateur augmente tandis que Lambda relance les appels limités.

Pour gérer la limitation de votre fonction Lambda, vous pouvez demander une augmentation de la simultanéité ou examiner les problèmes de performance de la fonction.

Augmentez votre débit de traitement des flux en testant différents paramètres de facteurs de parallélisation et en utilisant des distributions améliorées

Pour tester les paramètres de facteur de parallélisation

Vous pouvez améliorer le traitement des flux en configurant le facteur de parallélisation de votre fonction afin d'augmenter le nombre d'invocations Lambda simultanées pour chaque partition d'un flux. Vous pouvez également spécifier le nombre de lots simultanés que Lambda interroge à partir de chaque partition.

Par exemple, si votre facteur de parallélisation est défini sur 10, vous pouvez avoir jusqu'à 50 appels Lambda simultanés pour traiter cinq partitions de données Kinesis.

Pour plus d'informations, consultez les rubriques Utilisation d'AWS Lambda avec Amazon Kinesis et Nouveaux contrôles de dimensionnement AWS Lambda pour les sources d'événements Kinesis et Amazon DynamoDB.

Remarque : lorsque vous augmentez le nombre de lots simultanés par partition, Lambda gère le traitement dans l'ordre au niveau de la clé de partition.

Pour utiliser la distribution améliorée

Vous pouvez réduire la latence et augmenter le débit de lecture en créant un consommateur de flux de données avec une distribution améliorée. Les consommateurs de flux bénéficient d'une connexion dédiée à chaque partition qui n'a aucun impact sur les autres applications qui lisent également le flux.

Pour plus d'informations, consultez les rubriques Développement de consommateurs personnalisés avec un débit dédié (distribution améliorée) et Utilisation d'AWS Lambda avec Amazon Kinesis.

Remarque : il est recommandé d'utiliser la distribution améliorée si de nombreuses applications lisent les mêmes données ou si vous retraitez des flux contenant des enregistrements volumineux.