Filtrage 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 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 Modèles d' EventBridge é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\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}" } ] }

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

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

Les parties principales d’un objet FilterCriteria sont les propriétés de métadonnées et les propriétés de données.

  • Les Propriétés des métadonnées sont les champs de l'objet événement. Dans l’exemple, FilterCriteria.Metadata1 fait référence à une propriété de métadonnées.

  • Les Propriétés de données sont les champs du corps de l'événement. Dans l’exemple, FilterCriteria.Data1 fait référence à une propriété de données.

Supposons que votre flux Kinesis contienne l’événement suivant :

{ "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" }

Les propriétés de métadonnées de l’événement Kinesis correspondent à n’importe quel champ externe à l’objet data, tel que partitionKey ou sequenceNumber.

Les propriétés de données de l’événement Kinesis correspondent aux champs internes à l’objet data, tels que City ou Temperature.

Lorsque vous utilisez un filtre pour mettre en correspondance cet événement, vous pouvez utiliser des filtres sur les champs décodés. Par exemple, pour filtrer sur partitionKey et City, vous devez utiliser le filtre suivant :

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

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 au 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. 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>.

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

Champs de message et de données

Chaque source EventBridge Pipe contient un champ qui contient le message ou les données de base. Nous les appelons champs de message ou champs de données. Ces champs sont spéciaux, car ils peuvent être mise en échappement dans le code JSON ou codés en base64, mais lorsqu’ils sont au format JSON valide, ils peuvent être filtrés avec des modèles JSON comme si le corps n’était pas mis en échappement. Le contenu de ces champs peut également être utilisé de façon transparente dans les transformateurs d’entrée.

Filtrage correct des 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.

Pour Amazon SQS, le message body peut être n'importe quelle chaîne. Toutefois, cela peut être problématique si votre FilterCriteria s'attend à ce que body se présente dans un format JSON valide. Le scénario inverse est également vrai. Si le message entrant body est au format JSON valide, mais que votre critère de filtre s’attend à ce que body soit une chaîne de texte brut, cela peut entraîner un comportement inattendu.

Pour éviter ce problème, assurez-vous que le format de body dans FilterCriteria correspond au format attendu de body dans les messages que vous recevez de votre file d’attente. Avant de filtrer vos messages, évalue EventBridge automatiquement le format du message entrant body et de votre modèle de filtre pourbody. S'il y a une incompatibilité, EventBridge supprime 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

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

Chaîne de texte brut

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

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

Chaîne de texte brut

JSON valide

EventBridge supprime le message.

JSON valide

Chaîne de texte brut

EventBridge supprime le message.

JSON valide

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

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

JSON valide

JSON valide

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

Si vous ne l'incluez body pas dans votreFilterCriteria, EventBridge ignore cette vérification.

Filtrage correct 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 des données entrantes (data ou dynamodb) Pas de modèle de filtre pour les propriétés des données Action obtenue.

JSON valide

JSON valide

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

JSON valide

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

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

JSON valide

Non JSON

EventBridge lance une exception au moment du canal ou de la mise à jour. Le modèle de filtre des propriétés de données doit être au format JSON valide.

Non JSON

JSON valide

EventBridge fait tomber le record.

Non JSON

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

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

Non JSON

Non JSON

EventBridge lance une exception au moment de la création ou de la mise à jour du canal. Le modèle de filtre des propriétés de données doit être au format JSON valide.

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

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é la fonction avec succès. Pour Amazon MQ, EventBridge accuse réception des messages correspondants après avoir correctement invoqué la fonction et confirme les 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 d'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 message entrant (data ou key et value) 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

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

Chaîne de texte brut

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

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

Chaîne de texte brut

JSON valide

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

JSON valide

Chaîne de texte brut

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

JSON valide

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

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

JSON valide

JSON valide

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

Chaîne non codée UTF-8

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

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

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.