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

Date de la dernière mise à jour : 15/06/2021

Je constate une augmentation (ou des pics) de 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 appellent 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 découvrir 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, voir Utilisation des métriques de la 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 réduction de la durée augmente le débit d'une fonction, ce qui réduit l'âge de l'itérateur d'une fonction.

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

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

2.    Optimisez votre code de fonction pour que le traitement des enregistrements prenne moins de temps.

Remarque : pour plus d'informations, voir AWS Lambda et AWS X-Ray et Instrumention des fonctions AWS Lambda.

Augmenter le nombre de partitions de votre flux

Un nombre réduit 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, voir Utilisation des flux.

Augmenter la taille des lots de votre flux

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

Pour augmenter la taille des lots de votre fonction, suivez les instructions contenues dans la section 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 des lots de votre fonction ne diminue pas l'âge de l'itérateur de la fonction. Pour plus d'informations, voir Utilisation des flux.

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

Les erreurs d'appel peuvent amener une fonction Lambda à prolonger la durée de traitement d'un évènement ou à traiter le même évènement plusieurs fois. É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 ce cas, l'âge de l'itérateur augmente linéairement à mesure que ces enregistrements vieillissent.

Il est important que votre fonction gère convenablement 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 ressources suivantes :

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 des facteurs 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'appels Lambda simultanés 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 ressources suivantes :Utilisation d'AWS Lambda avec Amazon Kinesis et Nouveaux contrôles de mise à l'échelle 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 en ordre au niveau de la clé de partition.

Pour utiliser une distribution améliorée

Vous pouvez réduire la latence et augmenter le débit de lecture, en créant une application de consommation de flux de données avec une distribution améliorée. Les applications de consommation de flux disposent d'une connexion dédiée à chaque partition qui n'a pas d'impact sur les autres applications qui lisent également les données à partir du flux.

Pour plus d'informations, consultez les ressources suivantes :Développement d'applications de consommation personnalisées avec un débit dédié (distribution améliorée) et Utilisation d'AWS Lambda avec Amazon Kinesis.

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