Mappages de source d'événement AWS Lambda - AWS Lambda

Mappages de source d'événement AWS Lambda

Un mappage de source d'événement est une ressource AWS Lambda qui lit à partir d'une source d'événement et appelle une fonction Lambda. Vous pouvez utiliser des mappages de source d'événement pour traiter des éléments à partir d'un flux ou d’une file d'attente dans des services qui n'appellent pas les fonctions Lambda directement. Lambda fournit des mappages de source d'événement pour les services suivants.

Un mappage de source d'événement utilise les autorisations du rôle d’exécution de la fonction pour lire et gérer des éléments dans la source de l'événement. Les autorisations, la structure des événements, les paramètres et le comportement d'interrogation varient selon la source de l'événement. Pour en savoir plus, consultez la rubrique liée pour le service que vous utilisez en tant que source d'événement.

Pour gérer les mappages de source d'événement avec l'AWS CLI ou les kits SDK AWS, utilisez les actions d'API suivantes :

L'exemple suivant utilise l'AWS CLI pour mapper une fonction nommée my-function à un flux DynamoDB spécifié par son Amazon Resource Name (ARN), avec une taille de lot égale à 500.

$ aws lambda create-event-source-mapping --function-name my-function --batch-size 500 --starting-position LATEST \ --event-source-arn arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525 { "UUID": "14e0db71-5d35-4eb5-b481-8945cf9d10c2", "BatchSize": 500, "MaximumBatchingWindowInSeconds": 0, "ParallelizationFactor": 1, "EventSourceArn": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "LastModified": 1560209851.963, "LastProcessingResult": "No records processed", "State": "Creating", "StateTransitionReason": "User action", "DestinationConfig": {}, "MaximumRecordAgeInSeconds": 604800, "BisectBatchOnFunctionError": false, "MaximumRetryAttempts": 10000 }

Les mappages de source d'événement lisent les éléments d'un flux ou d'une file d'attente par lots. Ils incluent plusieurs éléments dans l’événement que votre fonction reçoit. Vous pouvez configurer la taille du lot envoyé à votre fonction par le mappage de source d'événement, jusqu'à un maximum qui varie en fonction du service. Le nombre d'éléments dans l'événement peut être inférieur à la taille de lot s'il y a pas suffisamment d’éléments disponibles, ou si le lot est trop volumineuse pour envoyer un événement et doit être divisé.

L'exemple suivant montre un mappage de source d'événement qui effectue une lecture à partir d'un flux Kinesis. Si un lot d'événements échoue à toutes les tentatives de traitement, le mappage de source d'événement envoie les détails du lot à une file d'attente SQS.


      Un mappage de source d'événement est lu à partir d'un flux Kinesis. Il met en file d'attente les enregistrements localement avant de les envoyer à la fonction.

Le lot d'événements correspond à l'événement que Lambda envoie à la fonction. Il s'agit d'un lot d'enregistrements ou de messages compilés à partir des éléments que le mappage de source d'événement lit à partir d'un flux ou d'une file d'attente. La taille du lot et les autres paramètres ne s'appliquent qu'au lot d'événements.

Pour les flux, un mappage de source d'événement crée un itérateur pour chaque partition dans le flux et traite les éléments dans chaque partition dans l'ordre. Vous pouvez configurer le mappage de source d'événement pour lire uniquement les nouveaux éléments qui apparaissent dans le flux, ou pour démarrer avec des éléments plus anciens. Les éléments traités ne sont pas supprimés du flux et peuvent être traitées par d'autres fonctions ou d’autres consommateurs.

Par défaut, si votre fonction renvoie une erreur, l'ensemble du lot est retraité jusqu'à ce que la fonction aboutisse ou que les éléments du lot expirent. Pour s’assurer d’un traitement dans l’ordre, le traitement dans la partition concernée est mis en pause jusqu'à la résolution de l'erreur. Vous pouvez configurer le mappage de source d'événement pour ignorer les anciens événements, limiter le nombre de tentatives ou traiter plusieurs lots en parallèle. Si vous traitez plusieurs lots en parallèle, le traitement dans l’ordre est toujours garanti pour chaque clé de partition, mais plusieurs clés de partition figurant dans la même partition sont traitées simultanément.

Vous pouvez également configurer le mappage de source d'événement pour envoyer un enregistrement d'appel à un autre service lorsqu'il rejette un lot d'événements. Lambda prend en charge les destinations suivantes pour les mappages de source d'événement.

  • Amazon SQS – File d’ attente SQS.

  • Amazon SNS – Rubrique SNS.

L'enregistrement d'appel contient des détails sur le lot d'événements ayant échoué au format JSON.

L'exemple suivant illustre un enregistrement d'appel pour un flux Kinesis.

Exemple Enregistrement d'appel

{ "requestContext": { "requestId": "c9b8fa9f-5a7f-xmpl-af9c-0c604cde93a5", "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myfunction", "condition": "RetryAttemptsExhausted", "approximateInvokeCount": 1 }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "version": "1.0", "timestamp": "2019-11-14T00:38:06.021Z", "KinesisBatchInfo": { "shardId": "shardId-000000000001", "startSequenceNumber": "49601189658422359378836298521827638475320189012309704722", "endSequenceNumber": "49601189658422359378836298522902373528957594348623495186", "approximateArrivalOfFirstRecord": "2019-11-14T00:38:04.835Z", "approximateArrivalOfLastRecord": "2019-11-14T00:38:05.580Z", "batchSize": 500, "streamArn": "arn:aws:kinesis:us-east-2:123456789012:stream/mystream" } }

Lambda prend également en charge le traitement dans l'ordre pour les files d'attente FIFO, en effectuant un dimensionnement en fonction du nombre de groupes de messages actifs. Pour les files d'attente standard, les éléments ne sont pas nécessairement traités dans l'ordre. Lambda s'adapte pour traiter une file d'attente standard le plus rapidement possible. Les lots qui ont échoué sont renvoyés dans la file d'attente comme éléments individuels et peuvent être traités dans un autre groupement que le lot original. Parfois, le mappage de source d'événement peut recevoir deux fois le même élément depuis la file d'attente, même sans aucune erreur de la fonction. Lambda supprime les éléments de la file d'attente lorsqu’ils sont traités avec succès. Vous pouvez configurer la file d'attente source pour envoyer des éléments vers une file d'attente de lettres mortes s'ils ne peuvent pas être traités.

Pour en savoir plus sur les services qui appellent les fonctions Lambda directement, consultez Utilisation de AWS Lambda avec d'autres services.