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
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 :
-
Amazon Simple Storage Service (Amazon S3) : invoque une fonction lorsqu'un objet est créé, supprimé ou modifié dans un compartiment. Pour de plus amples informations, veuillez consulter Didacticiel : utilisation d’un déclencheur Amazon S3 pour invoquer une fonction Lambda.
-
Amazon Simple Notification Service (AmazonSNS) : invoque une fonction lorsqu'un message est publié dans un SNS sujet. Pour de plus amples informations, veuillez consulter Tutoriel : Utilisation AWS Lambda avec Amazon Simple Notification Service.
-
Amazon API Gateway : invoque une fonction lorsqu'une API demande est envoyée à un point de terminaison spécifique. Pour de plus amples informations, veuillez consulter Invocation d'une fonction Lambda à l'aide d'un point de terminaison Amazon Gateway API.
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, configurez
MaximumBatchingWindowInSeconds
. 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'
CreateEventSourceMapping
APIopé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.
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