Utilisation du filtrage des événements avec une source d'SQSévénements Amazon - 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.

Utilisation du filtrage des événements avec une source d'SQSévénements Amazon

Vous pouvez utiliser le filtrage d’événements pour contrôler les enregistrements d’un flux ou d’une file d’attente que Lambda envoie à votre fonction. Pour des informations générales sur le fonctionnement du filtrage des événements, consultezContrôlez les événements que Lambda envoie à votre fonction.

Cette section se concentre sur le filtrage des événements pour les sources MSK d'événements Amazon.

Principes de base du filtrage des SQS événements Amazon

Supposons que votre SQS file d'attente Amazon contienne des messages au JSON format suivant.

{ "RecordNumber": 1234, "TimeStamp": "yyyy-mm-ddThh:mm:ss", "RequestCode": "AAAA" }

Un exemple d’enregistrement pour cette file d’attente ressemblerait à ce qui suit.

{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue", "awsRegion": "us-west-2" }

Pour filtrer en fonction du contenu de vos SQS messages Amazon, utilisez la body clé figurant dans l'enregistrement des SQS messages Amazon. Supposons que vous souhaitiez traiter uniquement les enregistrements contenant le « » RequestCode dans votre SQS message AmazonBBBB. L’objet FilterCriteria serait le suivant.

{ "Filters": [ { "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }" } ] }

Pour plus de clarté, voici la valeur du filtre Pattern expansé en clairJSON.

{ "body": { "RequestCode": [ "BBBB" ] } }

Vous pouvez ajouter votre filtre à l'aide de la console AWS CLI ou d'un AWS SAM modèle.

Console

Pour ajouter ce filtre à l’aide de la console, suivez les instructions de Attacher des critères de filtre à un mappage de sources d’événements (console) et saisissez la chaîne suivante comme critère de filtre.

{ "body" : { "RequestCode" : [ "BBBB" ] } }
AWS CLI

Pour créer un nouveau mappage de source d'événements avec ces critères de filtre à l'aide de AWS Command Line Interface (AWS CLI), exécutez la commande suivante.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'

Pour ajouter ces critères de filtre à un mappage des sources d’événements existant, exécutez la commande suivante.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'
AWS SAM

Pour ajouter ce filtre à l'aide de AWS SAM, ajoutez l'extrait suivant au YAML modèle de votre source d'événement.

FilterCriteria: Filters: - Pattern: '{ "body" : { "RequestCode" : [ "BBBB" ] } }'

Supposons que vous vouliez que votre fonction ne traite que les enregistrements où RecordNumber est supérieur à 9 999. L’objet FilterCriteria serait le suivant.

{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }

Pour plus de clarté, voici la valeur du filtre Pattern expansé en clairJSON.

{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }

Vous pouvez ajouter votre filtre à l'aide de la console AWS CLI ou d'un AWS SAM modèle.

Console

Pour ajouter ce filtre à l’aide de la console, suivez les instructions de Attacher des critères de filtre à un mappage de sources d’événements (console) et saisissez la chaîne suivante comme critère de filtre.

{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }
AWS CLI

Pour créer un nouveau mappage de source d'événements avec ces critères de filtre à l'aide de AWS Command Line Interface (AWS CLI), exécutez la commande suivante.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'

Pour ajouter ces critères de filtre à un mappage des sources d’événements existant, exécutez la commande suivante.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'
AWS SAM

Pour ajouter ce filtre à l'aide de AWS SAM, ajoutez l'extrait suivant au YAML modèle de votre source d'événement.

FilterCriteria: Filters: - Pattern: '{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }'

Pour AmazonSQS, le corps du message peut être n'importe quelle chaîne. Toutefois, cela peut être problématique si vous vous FilterCriteria attendez body à ce que le JSON format soit valide. Le scénario inverse est également vrai : si le corps du message entrant est JSON formaté mais que vos critères de filtrage s'attendent body à être une chaîne simple, cela peut entraîner un comportement involontaire.

Pour éviter ce problème, assurez-vous que le format du corps dans vos FilterCriteria correspond au format attendu de body dans les messages que vous recevez de votre file d’attente. Avant de filtrer vos messages, Lambda évalue automatiquement le format du corps de votre message entrant et de votre modèle de filtre pour body. En cas de décalage, Lambda abandonne le message. Le tableau suivant résume cette évaluation :

Format du body du message entrant Format du body du modèle de filtre Action obtenue.

Chaîne de texte brut

Chaîne de texte brut

Lambda filtre en fonction de vos critères de filtre.

Chaîne de texte brut

Pas de modèle de filtre pour les propriétés des données

Lambda filtre (uniquement selon les autres propriétés de métadonnées) en fonction de vos critères de filtre.

Chaîne de texte brut

Valide JSON

Lambda rejette le message.

Valide JSON

Chaîne de texte brut

Lambda rejette le message.

Valide JSON

Pas de modèle de filtre pour les propriétés des données

Lambda filtre (uniquement selon les autres propriétés de métadonnées) en fonction de vos critères de filtre.

Valide JSON

Valide JSON

Lambda filtre en fonction de vos critères de filtre.