Filtrer les événement à partir d’une source d’événements Amazon MQ - 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.

Filtrer les événement à partir d’une source d’événements Amazon MQ

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 obtenir des informations générales sur le fonctionnement du filtrage des événements, consultez Contrôle des événements envoyés par Lambda à votre fonction.

Cette section porte sur le filtrage des événements pour les sources Amazon MQ.

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

Supposons que votre file d’attente de messages Amazon MQ contienne des messages au format JSON valide ou sous forme de chaînes simples. Un exemple d’enregistrement ressemblerait à ce qui suit, avec les données converties en chaîne encodée en Base64 dans le champ data.

ActiveMQ
{ "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "deliveryMode": 1, "replyTo": null, "type": null, "expiration": "60000", "priority": 1, "correlationId": "myJMSCoID", "redelivered": false, "destination": { "physicalName": "testQueue" }, "data":"QUJDOkFBQUE=", "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959, "properties": { "index": "1", "doAlarm": "false", "myCustomProperty": "value" } }
RabbitMQ
{ "basicProperties": { "contentType": "text/plain", "contentEncoding": null, "headers": { "header1": { "bytes": [ 118, 97, 108, 117, 101, 49 ] }, "header2": { "bytes": [ 118, 97, 108, 117, 101, 50 ] }, "numberInHeader": 10 }, "deliveryMode": 1, "priority": 34, "correlationId": null, "replyTo": null, "expiration": "60000", "messageId": null, "timestamp": "Jan 1, 1970, 12:33:41 AM", "type": null, "userId": "AIDACKCEVSQ6C2EXAMPLE", "appId": null, "clusterId": null, "bodySize": 80 }, "redelivered": false, "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" }

Pour les agents Active MQ et Rabbit MQ, vous pouvez utiliser le filtrage d’événements pour filtrer les enregistrements à l’aide de la clé data. Supposons que votre file d’attente Amazon MQ contienne des messages au format JSON suivant.

{ "timeout": 0, "IPAddress": "203.0.113.254" }

Pour filtrer uniquement les enregistrements dont le champ timeout est supérieur à 0, l’objet FilterCriteria serait le suivant.

{ "Filters": [ { "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }" } ] }

Pour plus de clarté, voici la valeur du Pattern de filtre étendu en JSON simple :

{ "data": { "timeout": [ { "numeric": [ ">", 0 ] } ] } }

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.

{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }
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:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'

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": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'

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": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
AWS SAM

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

FilterCriteria: Filters: - Pattern: '{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }'

Avec Amazon MQ, vous pouvez également filtrer les enregistrements dont le message est une chaîne simple. Supposons que vous vouliez traiter uniquement les enregistrements dont le message commence par « Result:  ». L’objet FilterCriteria se présente comme suit.

{ "Filters": [ { "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }" } ] }

Pour plus de clarté, voici la valeur du Pattern de filtre étendu en JSON simple :

{ "data": [ { "prefix": "Result: " } ] }

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.

{ "data" : [ { "prefix": "Result: " } ] }
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:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'

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": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
AWS SAM

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

FilterCriteria: Filters: - Pattern: '{ "data" : [ { "prefix": "Result " } ] }'

Les messages Amazon MQ doivent être des chaînes codées en UTF-8, soit des chaînes en texte brut, soit au format JSON. En effet, Lambda décode les tableaux d’octets Amazon MQ en UTF-8 avant d’appliquer des critères de filtre. Si vos messages utilisent un autre encodage, tel que UTF-16 ou ASCII, ou si le format du message ne correspond pas au format FilterCriteria, Lambda traite uniquement les filtres de métadonnées. Le tableau suivant résume le comportement spécifique :

Format du du message entrant Modèle de filtre de format pour les propriétés des messages 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

JSON valide

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

JSON valide

Chaîne de texte brut

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

JSON valide

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.

JSON valide

JSON valide

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

Chaîne non codée UTF-8

JSON, chaîne de texte brut ou aucun modèle

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