Pourquoi la métrique Lambda IteratorAge augmente-t-elle pour mon flux DynamoDB ?
Lorsqu'AWS Lambda utilise des enregistrements provenant d'Amazon DynamoDB Streams, j’observe un pic de la métrique Lambda IteratorAge.
Brève description
La métrique Lambda IteratorAge mesure la latence entre le moment où un enregistrement est ajouté à un flux DynamoDB et le moment où la fonction traite cet enregistrement. Une augmentation de la métrique IteratorAge signifie que Lambda ne traite pas efficacement les enregistrements qui sont écrits dans le flux DynamoDB.
IteratorAge peut augmenter pour les raisons suivantes :
- Erreurs d'invocation
- Occurrence de l'accélérateur
- Faible débit Lambda
Résolution
Erreurs d'invocation
Lambda est conçu pour traiter des lots d'enregistrements en séquence et effectuer une nouvelle tentative en cas d'erreur. Si une fonction renvoie une erreur à chaque fois qu'elle est invoquée, Lambda continue d’effectuer de nouvelles tentatives jusqu'à ce que les enregistrements expirent. Ou bien, Lambda continue d’effectuer de nouvelles tentatives jusqu'à ce qu'il dépasse l'âge maximum que vous avez configuré dans le mappage des sources d'événements. De plus, la période de conservation de flux DynamoDB est de 24 heures. Lambda continue d’effectuer de nouvelles tentatives pendant une journée entière. Après cela, il passe au lot d'enregistrements suivant.
Pour confirmer si une erreur d'invocation est à l’origine de la métrique IteratorAge, vérifiez la métrique d’erreurs Lambda. Si une erreur d'invocation est la cause, consultez les journaux Lambda pour déboguer l'erreur, puis modifiez votre code. Lorsque vous gérez l'erreur, assurez-vous d’inclure une instruction try-catch dans votre code.
La configuration du mappage des sources d'événements comprend trois paramètres qui peuvent vous aider à éviter les pics de la métrique IteratorAge :
- Nombre de tentatives : ce paramètre définit le nombre maximal de nouvelles tentatives de Lambda lorsque la fonction renvoie une erreur.
- Âge maximal de l'enregistrement : ce paramètre définit l'âge maximal d'un enregistrement que Lambda envoie à votre fonction. Utilisez ce paramètre pour vous aider à supprimer les enregistrements trop anciens.
- Fractionner le lot en cas d'erreur : ce paramètre vous permet d’effectuer de nouvelles tentatives avec des lots de plus petite taille afin d'isoler les enregistrements erronés et de résoudre les problèmes de délai d'expiration. Lorsque la fonction renvoie une erreur, fractionnez le lot avant d’effectuer une nouvelle tentative.
Remarque : le fractionnement d'un lot n'est pas pris en compte dans le quota de nouvelles tentatives.
Pour conserver les événements ignorés, configurez le mappage des sources d'événements afin d'envoyer les détails sur les lots en échec à une file d'attente Amazon Simple Queue Service (Amazon SQS). Vous pouvez également configurer le mappage des sources d’événements pour envoyer les détails à une rubrique Amazon Simple Notification Service (Amazon SNS). Pour ce faire, utilisez le paramètre Destination en cas d’échec.
Occurrences de l'accélérateur
Les enregistrements d'événements étant lus de manière séquentielle, les fonctions Lambda ne peuvent pas passer à l'enregistrement suivant si l'invocation en cours est limitée.
Lorsque vous utilisez des flux DynamoDB, ne configurez pas plus de deux consommateurs sur la même partition de flux. Si vous avez plus de deux lecteurs par partition, il se peut que votre fonction soit limitée. Pour plus d'informations, consultez la section Lecture et traitement d'un flux.
Si vous avez besoin de plus de deux lecteurs sur une seule partition de flux, utilisez un modèle de diffusion en éventail. Configurez la fonction Lambda pour utiliser les enregistrements du flux, puis transférez-les vers d'autres fonctions Lambda en aval ou des flux Amazon Kinesis. Pour Lambda, utilisez une limite de simultanéité pour éviter la limitation.
Débit Lambda
Durée d'exécution
Si la métrique Durée d'une fonction Lambda est élevée, le débit de la fonction diminue et la métrique IteratorAge augmente.
Pour réduire la durée d'exécution de votre fonction, utilisez l'une des méthodes suivantes ou les deux :
- Augmentez la quantité de mémoire allouée à la fonction.
- Optimisez votre code de fonction afin de réduire le temps nécessaire au traitement des enregistrements.
Exécutions Lambda simultanées
Le nombre maximal d’exécutions Lambda simultanées est calculé comme suit :
Exécutions simultanées = nombre de partitions x lots simultanés par partition (facteur de parallélisation)
- Nombre de partitions : dans un flux DynamoDB, il existe un mappage biunivoque entre le nombre de partitions de la table et le nombre de partitions de flux. La taille de la table et son débit déterminent le nombre de partitions. Chaque partition de la table peut accepter jusqu'à 3 000 unités de demande de lecture ou 1 000 unités de demande d'écriture, ou une combinaison linéaire des deux. Pour accroître la simultanéité, augmentez la capacité provisionnée de la table afin d'augmenter le nombre de partitions.
- Lots simultanés par partition (facteur de parallélisation) : vous pouvez configurer le nombre de lots simultanés par partition dans le mappage des sources d'événements. La valeur par défaut est 1 et peut être augmentée jusqu'à 10.
Par exemple, si la table compte 10 partitions et que le nombre de lots simultanés par partition est défini sur 5, vous pouvez avoir jusqu'à 50 exécutions simultanées.
Remarque : pour traiter la modification au niveau de l’élément dans le bon ordre à tout moment, les éléments dotés de la même clé de partition sont placés dans le même lot. Assurez-vous que la clé de partition de votre table présente une cardinalité élevée et que votre trafic ne génère pas de clés sensibles. Par exemple, si vous définissez la valeur de lots simultanés par partition sur 10 et que votre trafic d'écriture cible une seule clé de partition, vous ne pouvez avoir qu'une seule exécution simultanée par partition.
Taille du lot
Régler la valeur de la taille du lot peut vous aider à augmenter le débit Lambda. Si vous traitez un faible nombre d'enregistrements par lot, cela ralentit le traitement du flux. En revanche, si vous avez un nombre élevé d'enregistrements par lot, cela peut augmenter la durée d'exécution de la fonction. Pour trouver la valeur la mieux adaptée à votre cas d'utilisation, il est recommandé de tester la taille de votre lot avec plusieurs valeurs.
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 entraîne la réduction de l'âge de l'itérateur de la fonction.
Informations connexes
Contenus pertinents
- demandé il y a un anlg...
- demandé il y a 6 moislg...
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans