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

Lecture de 7 minute(s)
0

Je constate une augmentation (ou des pics) de la métrique IteratorAge de ma fonction AWS Lambda.

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 l’effet de chaque facteur sur l'âge de l'itérateur. Reconfigurez ensuite 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 en savoir plus sur les invocations Lambda, consultez la rubrique Utilisation des métriques des fonctions Lambda d'AWS.

**Remarque :**Pour les flux Amazon DynamoDB, consultez Pourquoi la métrique Lambda IteratorAge augmente-t-elle pour mes flux Amazon DynamoDB ?

Résolution

Diminuez la durée d'exécution de votre fonction

Une durée d'exécution longue augmente l'âge de l'itérateur d'une fonction. La diminution de la durée augmente le débit d'une fonction et par conséquent, diminue l'âge de l'itérateur de la fonction.

Pour réduire la durée d'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. Lambda alloue la puissance du processeur proportionnellement à la mémoire.

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

Remarque : Pour en savoir plus sur la durée et les performances de votre Lambda, consultez Utilisation d'AWS Lambda et d'AWS X-Ray.

Augmentez la taille du lot de votre flux

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

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énements.

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

Assurez-vous que votre fonction gère correctement les erreurs d'invocation

Les erreurs d'invocation peuvent retarder le traitement d'un événement par une fonction Lambda ou provoquer le traitement du même événement plusieurs fois. Les enregistrements d'événements étant lus de manière séquentielle, une fonction ne peut pas passer aux enregistrements suivants si un lot d'enregistrements provoque une erreur à chaque nouvelle tentative. Dans ce cas de figure, l'âge de l'itérateur augmente de façon linéaire à mesure que ces enregistrements vieillissent.

Si votre fonction renvoie une erreur, Lambda réessaie continuellement le lot. Les tentatives par lots se poursuivent jusqu'à ce que le traitement soit réussi, que le nombre maximum de tentatives soit atteint ou que les données expirent du flux.

Assurez-vous que votre fonction gère correctement 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 en avoir plus, consultez les rubriques suivantes :

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

Les enregistrements d'événements étant lus de manière séquentielle, une fonction ne peut pas passer à l'enregistrement suivant si l'invocation en cours est limitée. Dans ce cas de figure, l'âge de l'itérateur augmente pendant que Lambda retente 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 performances de la fonction.

Répartissez les enregistrements de manière uniforme dans le flux

Les clés de partition de chaque enregistrement de données déterminent les partitions du flux dans lequel les enregistrements sont écrits. Une augmentation du trafic vers votre flux contenant des enregistrements avec la même clé de partition entraîne la réception d'un nombre disproportionné d'enregistrements par une partition. Il en résulte une partition à chaud.

Les métriques améliorées de Kinesis au niveau des partitions vous permettent de vérifier le taux d'ingestion dans chaque partition et de dépanner une partition à chaud.

Pour en savoir plus, consultez Under the hood : dimensionnement de vos flux de données Kinesis.

Augmentez le nombre de partitions de votre flux

Un faible nombre de fragments dans un flux augmente l'âge de l'itérateur d'une fonction. L'augmentation du nombre de partitions dans un flux augmente le nombre de fonctions Lambda simultanées consommant votre flux, réduisant l'âge de l'itérateur d'une fonction.

Pour augmenter le nombre de partitions de votre flux, suivez les instructions de la rubrique Repartage de flux.

**Remarque :**La division des fragments n'a aucun effet immédiat sur l'âge de l'itérateur d'une fonction. Les enregistrements existants restent dans les partitions sur lesquelles ils ont été écrits. Ces fragments doivent rattraper leur retard avant que l'âge des itérateurs des fragments ne diminue. Pour en savoir plus, consultez la rubrique Utilisation des flux.

Augmentez votre débit de traitement des flux en testant différents paramètres de facteur de parallélisation et en recourant à la diffusion en éventail améliorée

Pour tester les paramètres du 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 y parviendrez en spécifiant le nombre de lots simultanés que Lambda interroge dans chaque partition. La configuration s’effectue au niveau de la configuration de la source de l’événement.

Si votre facteur de parallélisation est défini sur 10, vous pouvez effectuer jusqu'à 50 invocations Lambda simultanées pour traiter cinq partitions de données Kinesis.

Par exemple, exécutions simultanées = nombre de partitions x lots simultanés par partition (facteur de parallélisation).

Pour en savoir plus, consultez 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 :**l’augmentation du nombre de lots simultanés par partition entraîne la validation par Lambda du traitement dans l'ordre au niveau de la clé de partition.

Pour utiliser une diffusion en éventail 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 diffusion en éventail améliorée. Les utilisateurs du stream bénéficient d'une connexion dédiée à chaque partition sans impact sur les autres applications qui lisent également le flux.

Pour en savoir plus, consultez Développement de clients personnalisés avec un débit dédié (diffusion en éventail améliorée) et Utilisation d'AWS Lambda avec Amazon Kinesis.

**Remarque :**L’utilisation d’une diffusion en éventail améliorée est recommandée si un grand nombre d’applications lisent les mêmes données ou si vous retraitez des flux contenant des enregistrements volumineux.

Informations connexes

Meilleures pratiques pour utiliser les fonctions Lambda

Mappages de sources d'événements Lambda

Dimensionnement des fonctions AWS Lambda

Repartage, mise à l'échelle et traitement parallèle

Configuration de votre flux de données et de votre fonction

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