Filtrage des événements dans Amazon EventBridge Pipes - Amazon EventBridge

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.

Filtrage des événements dans Amazon EventBridge Pipes

Avec EventBridge Pipes, vous pouvez filtrer les événements d'une source donnée et n'en traiter qu'un sous-ensemble. Ce filtrage fonctionne de la même manière que le filtrage sur un bus d' EventBridge événements ou le mappage d'une source d'événements Lambda, en utilisant des modèles d'événements. Pour plus d’informations sur les modèles d’événements, consultez Création de modèles EventBridge d'événements Amazon.

Un objet FilterCriteria de critères de filtre est une structure composée d’une liste de filtres (Filters). Chaque filtre est une structure qui définit un modèle de filtrage (Pattern). Un Pattern est une représentation sous forme de chaîne d'une règle de filtre JSON. Un objet FilterCriteria ressemble à l'exemple suivant :

{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ pattern1 ], \"data\": { \"Data1\": [ pattern2 ] }}" } ] }

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

{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }

Amazon Kinesis, Amazon MQ, Amazon MSK et Apache Kafka autogéré appliquent le codage Base64 à la charge utile, mais pas aux champs de métadonnées. Supposons, par exemple, que votre flux Kinesis contienne un événement tel que celui-ci :

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": {"City": "Seattle", "State": "WA", "Temperature": "46", "Month": "December" }, "approximateArrivalTimestamp": 1545084650.987 }

Lorsque l’événement passe par votre canal, il ressemble à ce qui suit avec le champ data codé en base64 :

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "approximateArrivalTimestamp": 1545084650.987, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" }

Lorsque vous créez des filtres d'événements, EventBridge Pipes peut accéder au contenu des événements. Ce contenu est soit mis en échappement dans le code JSON, comme le champ body Amazon SQS, soit codé en base64, comme le champ data Kinesis. Si vos données sont du format JSON valide, vos modèles d'entrée ou vos chemins JSON pour les paramètres cibles peuvent référencer directement le contenu, car EventBridge Pipes le décodera automatiquement. Par exemple, si une source d’événement Kinesis est au format JSON valide, vous pouvez référencer une variable à l’aide de <$.data.someKey>.

Dans la continuité de notre exemple, pour filtrer les partitionKey métadonnées non codées situées à l'extérieur de l'dataobjet et la City propriété codée en base64 à l'intérieur de l'dataobjet, vous devez utiliser le filtre suivant :

{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] } }

Lorsque vous créez des modèles d’événements, vous pouvez filtrer en fonction des champs envoyés par l’API source, mais pas des champs ajoutés par l’opération d’interrogation. Les champs suivants ne peuvent pas être utilisés dans les modèles d’événements :

  • awsRegion

  • eventSource

  • eventSourceARN

  • eventVersion

  • eventID

  • eventName

  • invokeIdentityArn

  • eventSourceKey

Les sections suivantes expliquent le comportement de filtrage pour chaque type de source d'événement pris en charge.

Filtrer les messages Amazon SQS

Si un message Amazon SQS ne répond pas à vos critères de filtrage, il est EventBridge automatiquement supprimé de la file d'attente. Vous n’avez pas besoin de supprimer manuellement ces messages dans Amazon SQS. Il est peu probable que la connexion de plusieurs canaux à une file d'attente SQS soit une configuration utile, car les canaux seraient en concurrence pour les messages qui seront supprimés s'ils ne correspondent pas.

Le corps d'un message Amazon SQS peut contenir n'importe quelle chaîne, pas uniquement du JSON. EventBridge Pipes s'attend à ce que votre FilterCriteria format corresponde au format des messages entrants, qu'il s'agisse d'un JSON valide ou d'une chaîne simple. S'il y a une incompatibilité, EventBridge Pipes supprime le message. Si vous FilterCriteria n'incluez pasbody, c'est-à-dire que vous filtrez uniquement par métadonnées, EventBridge Pipes ignore cette vérification. Le tableau suivant résume l'évaluation :

Format du du modèle de filtre Format entrant Résultat

Chaîne de texte brut

Chaîne de texte brut

EventBridge filtres en fonction de vos critères de filtrage.

Chaîne de texte brut

JSON valide

EventBridge supprime le message.

JSON valide

Chaîne de texte brut

EventBridge supprime le message.

JSON valide

JSON valide

EventBridge filtres en fonction de vos critères de filtrage.

Aucun modèle de filtre pour body

Chaîne de texte brut

EventBridge filtres en fonction de vos critères de filtrage.

Aucun modèle de filtre pour body

JSON valide

EventBridge filtres en fonction de vos critères de filtrage.

Filtrage des messages Kinesis et DynamoDB

Une fois que vos critères de filtre traitent un enregistrement Kinesis ou DynamoDB, l’itérateur des flux passe au-delà de cet enregistrement. Si l’enregistrement ne répond pas à vos critères de filtre, vous n’avez pas besoin de supprimer manuellement l’enregistrement de la source de votre événement. Après la période de conservation, Kinesis et DynamoDB suppriment automatiquement ces anciens enregistrements. Si vous souhaitez que les enregistrements soient supprimés plus tôt, consultez Modification de la période de conservation des données.

Pour filtrer correctement les événements provenant de sources d'événements de flux, le champ de données et vos critères de filtre pour le champ de données doivent être au format JSON valide. (Pour Kinesis, le champ de données est data. Pour DynamoDB, le champ de données estdynamodb.) Si l'un des champs n'est pas dans un format JSON valide, EventBridge supprime le message ou génère une exception. Le tableau suivant résume le comportement spécifique :

Format du du modèle de filtre Format entrant Résultat

JSON valide

JSON valide

EventBridge filtres en fonction de vos critères de filtrage.

JSON valide

Non JSON

EventBridge supprime le message.

Aucun modèle de filtre pour data (Kinesis) ou (dynamodbDynamoDB)

JSON valide

EventBridge filtres en fonction de vos critères de filtrage.

Aucun modèle de filtre pour data (Kinesis) ou (dynamodbDynamoDB)

Non JSON

EventBridge filtres en fonction de vos critères de filtrage.

Non JSON

N’importe lequel

EventBridge lance une exception au moment de la création ou de la mise à jour de Pipe. Le modèle de filtre doit être au format JSON valide.

Filtrage des messages Amazon Managed Streaming for Apache Kafka, Apache Kafka autogérés et Amazon MQ

Note

Une fois que vous avez attaché des critères de filtre à une source d’événement Apache Kafka ou Amazon MQ, l’application de vos règles de filtrage aux événements peut prendre jusqu’à 15 minutes.

Pour les sources Amazon MQ, le champ de message est data. Pour les sources Apache Kafka (Amazon MSK et Apache Kafka autogéré), il existe deux champs de message : key et value.

EventBridge supprime les messages qui ne correspondent pas à tous les champs inclus dans le filtre. Pour Apache Kafka, EventBridge valide les décalages pour les messages correspondants et non correspondants après avoir invoqué avec succès la cible. Pour Amazon MQ, EventBridge accuse réception des messages correspondants après avoir correctement invoqué la fonction et accuse réception des messages non correspondants lors du filtrage de ceux-ci.

Les messages Apache Kafka et 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, il EventBridge décode les tableaux d'octets d'Apache Kafka et Amazon MQ en UTF-8 avant d'appliquer les critères de filtrage. Si vos messages utilisent un autre encodage, tel que UTF-16 ou ASCII, ou si le format du message ne correspond pas au FilterCriteria format, EventBridge traite uniquement les filtres de métadonnées. Le tableau suivant résume le comportement spécifique :

Format du du modèle de filtre Format entrant Résultat

Chaîne de texte brut

Chaîne de texte brut

EventBridge filtres en fonction de vos critères de filtrage.

Chaîne de texte brut

JSON valide

EventBridge filtre uniquement sur les métadonnées, en ignorant le data champ (Amazon MQ) ou key les value champs (Apache Kafka)

JSON valide

Chaîne de texte brut

EventBridge filtre uniquement sur les métadonnées, en ignorant le data champ (Amazon MQ) ou key les value champs (Apache Kafka)

JSON valide

JSON valide

EventBridge filtres en fonction de vos critères de filtrage.

Aucun modèle de filtre pour data (Amazon MQ) ou value (Apache key Kafka)

Chaîne de texte brut

EventBridge filtre uniquement sur les métadonnées, en ignorant le data champ (Amazon MQ) ou key les value champs (Apache Kafka)

Aucun modèle de filtre pour data (Amazon MQ) ou value (Apache key Kafka)

JSON valide

EventBridge filtre uniquement sur les métadonnées, en ignorant le data champ (Amazon MQ) ou key les value champs (Apache Kafka)

N’importe lequel

Chaîne non encodée en UTF

EventBridge filtre uniquement sur les métadonnées, en ignorant le data champ (Amazon MQ) ou key les value champs (Apache Kafka)

Différences entre Lambda ESM et Pipes EventBridge

Lors du filtrage des événements, Lambda ESM et EventBridge Pipes fonctionnent généralement de la même manière. La principale différence réside dans le fait que le champ eventSourceKey n’est pas présent dans les charges utiles ESM.

Utilisation d'opérateurs de comparaison dans les filtres pour tuyaux

Les opérateurs de comparaison vous permettent de créer des modèles d'événements qui correspondent aux valeurs des champs des événements.

Pour une liste complète des opérateurs de comparaison pris en charge pour une utilisation dans les filtres de tuyauterie, voirOpérateurs de comparaison.