Comment Lambda traite les enregistrements provenant de sources d'événements basées sur des flux et des files d'attente - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Comment Lambda traite les enregistrements provenant de sources d'événements basées sur des flux et des files d'attente

Un mappage de source d'événements est une ressource Lambda qui lit des éléments provenant de services basés sur des flux et des files d'attente et invoque une fonction avec des lots d'enregistrements. Les services suivants utilisent des mappages de sources d'événements pour appeler des fonctions Lambda :

Avertissement

Les mappages de sources d'événements Lambda traitent chaque événement au moins une fois, et le traitement des enregistrements peut être dupliqué. Pour éviter les problèmes potentiels liés à des événements dupliqués, nous vous recommandons vivement de rendre votre code de fonction idempotent. Pour en savoir plus, consultez Comment rendre ma fonction Lambda idempotente dans le Knowledge Center. AWS

En quoi les mappages de sources d'événements diffèrent des déclencheurs directs

Certains AWS services peuvent appeler directement des fonctions Lambda à l'aide de déclencheurs. Ces services transmettent les événements à Lambda, et la fonction est invoquée immédiatement lorsque l'événement spécifié se produit. Les déclencheurs sont adaptés aux événements discrets et au traitement en temps réel. Lorsque vous créez un déclencheur à l'aide de la console Lambda, celle-ci interagit avec le AWS service correspondant pour configurer la notification d'événement sur ce service. Le déclencheur est en fait stocké et géré par le service qui génère les événements, et non par Lambda. Voici quelques exemples de services qui utilisent des déclencheurs pour appeler des fonctions Lambda :

Les mappages de sources d'événements sont des ressources Lambda créées et gérées au sein du service Lambda. Les mappages de sources d'événements sont conçus pour traiter de gros volumes de données en streaming ou de messages provenant de files d'attente. Le traitement par lots des enregistrements d'un flux ou d'une file d'attente est plus efficace que le traitement individuel des enregistrements.

Comportement de traitement par lots

Par défaut, un mappage de source d’événements regroupe des enregistrements dans une même charge utile que Lambda envoie à votre fonction. Pour affiner le comportement du traitement par lots, vous pouvez configurer une fenêtre de traitement par lots (MaximumBatchingWindowInSeconds) et une taille de lot (). BatchSize Une fenêtre de traitement par lots représente l’intervalle de temps maximal pour collecter des enregistrements dans une même charge utile. La taille d’un lot est le nombre maximal d’enregistrements dans un même lot. Lambda invoque votre fonction en présence de l’un des trois critères suivants :

  • La fenêtre de traitement par lots atteint sa valeur maximale. Le comportement par défaut de la fenêtre de traitement par lots varie en fonction de la source d'événement spécifique.

    • Pour les sources d'événements Kinesis, DynamoDB et SQS Amazon : la fenêtre de traitement par lots par défaut est de 0 seconde. Cela signifie que Lambda appelle votre fonction dès que les enregistrements sont disponibles. Pour définir une fenêtre de traitement par lots, configurezMaximumBatchingWindowInSeconds. Vous pouvez définir ce paramètre sur n'importe quelle valeur comprise entre 0 et 300 secondes par incréments de 1 seconde. Si vous configurez une fenêtre de traitement par lots, la fenêtre suivante commence dès que l'appel de fonction précédent est terminé.

    • Pour AmazonMSK, les sources d'événements autogérées Apache Kafka, Amazon MQ et Amazon DocumentDB : la fenêtre de traitement par lots par défaut est de 500 ms. Vous pouvez configurer MaximumBatchingWindowInSeconds à n’importe quelle valeur comprise entre 0 et 300 secondes par incréments de secondes. Une fenêtre de traitement par lots commence dès l’arrivée du premier registre.

      Note

      Comme vous ne pouvez modifier MaximumBatchingWindowInSeconds que par incréments de quelques secondes, vous ne pouvez pas revenir à la fenêtre de traitement par lots par défaut de 500 ms après l'avoir modifiée. Pour restaurer la fenêtre de traitement par lots par défaut, vous devez créer un mappage de source d’événement.

  • La taille du lot est atteinte. La taille minimale du lot est de 1. La taille par défaut et la taille maximale du lot dépendent de la source d’événement. Pour plus de détails sur ces valeurs, consultez les BatchSizespécifications de l'CreateEventSourceMappingAPIopération.

  • La taille de la charge utile atteint 6 Mo. Vous ne pouvez pas modifier cette limite.

Le diagramme suivant illustre ces trois conditions. Supposons qu’une fenêtre de traitement par lots commence à t = 7 secondes. Dans le premier scénario, la fenêtre de traitement par lots atteint son maximum de 40 secondes à t = 47 secondes après avoir accumulé 5 enregistrements. Dans le second scénario, la taille du lot atteint 10 avant l’expiration de la fenêtre de traitement par lots, de sorte que la fenêtre de traitement par lots se termine plus tôt. Dans le troisième scénario, la taille maximale de la charge utile est atteinte avant l’expiration de la fenêtre de traitement par lots, de sorte que la fenêtre de traitement par lots se termine plus tôt.

La fenêtre de traitement par lots expire lorsque le temps maximum est atteint, que la taille du lot est atteinte ou que la charge utile atteint 6 Mo

Nous vous recommandons de tester avec différentes tailles de lot et d'enregistrement afin que la fréquence d'interrogation de chaque source d'événements soit adaptée à la rapidité avec laquelle votre fonction est capable d'accomplir sa tâche. Le CreateEventSourceMapping BatchSize paramètre contrôle le nombre maximum d'enregistrements qui peuvent être envoyés à votre fonction à chaque appel. Une taille de lot plus grande peut souvent absorber plus efficacement l’invocation sur un plus large ensemble d’enregistrements, ce qui accroît votre débit.

Lambda n'attend pas que les extensions configurées soient terminées avant d'envoyer le lot suivant pour traitement. En d’autres termes, vos extensions peuvent continuer à s’exécuter pendant que Lambda traite le prochain lot d’enregistrements. Cela peut causer des problèmes de limitation si vous enfreignez l’un des paramètres ou l’une des limites de simultanéité de votre compte. Pour détecter s’il s’agit d’un problème éventuel, surveillez vos fonctions et vérifiez si vous observez des métriques de simultanéité plus élevées que prévu pour votre mappage des sources d’événements. En raison de la brièveté des intervalles entre les invocations, Lambda peut brièvement signaler une utilisation simultanée supérieure au nombre de partitions. Cela peut être vrai même pour les fonctions Lambda sans extensions.

Par défaut, si votre fonction renvoie une erreur, le mappage de la source d’événements retraite l’ensemble du lot jusqu’à ce que la fonction réussisse ou que les éléments du lot arrivent à expiration. Pour s’assurer d’un traitement dans l’ordre, le mappage de la source d’événement met en pause le traitement dans la partition concernée jusqu’à la résolution de l’erreur. Pour les sources de flux (DynamoDB et Kinesis), vous pouvez configurer le nombre maximal de tentatives que Lambda effectue lorsque votre fonction renvoie une erreur. Les erreurs de service ou les limitations où le lot n’atteint pas votre fonction ne comptent pas dans les tentatives de réessai. Vous pouvez également configurer le mappage de la source d'événements pour envoyer un enregistrement d'appel vers une destination lorsqu'il supprime un lot d'événements.

Cartographie des sources d'événements API

Pour gérer une source d'événement avec le AWS Command Line Interface (AWS CLI) ou un AWS SDK, vous pouvez utiliser les API opérations suivantes :