Modèles d' EventBridge événements Amazon - 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.

Modèles d' EventBridge événements Amazon

Les modèles d’événements ont la même structure que les événements auxquels ils correspondent. Les règles utilisent des modèles d’événements pour sélectionner des événements et les envoyer vers des cibles. Soit un modèle d’événement correspond à un événement, soit il n’y correspond pas.

Important

Dans EventBridge, il est possible de créer des règles pouvant entraîner des higher-than-expected frais et des ralentissements. Par exemple, vous pouvez créer par inadvertance une règle qui entraîne une boucle infinie, dans laquelle une règle est déclenchée de manière récursive sans fin. Supposons que vous avez créé une règle permettant de détecter que les listes ACL ont été modifiées sur un compartiment Amazon S3 et de déclencher un logiciel pour les modifier afin qu’elles aient l’état souhaité. Si la règle n'est pas correctement écrite, la modification suivante des listes de contrôle d'accès (ACL) déclenche à nouveau la règle, créant ainsi une boucle infinie.

Pour obtenir des conseils sur la façon d’écrire des règles et des modèles d’événements précis afin de réduire au maximum ces résultats inattendus, consultez Bonnes pratiques lors de la définition de règles Amazon EventBridge et Bonnes pratiques lors de la définition des modèles EventBridge d'événements Amazon.

La vidéo suivante présente les principes de base des modèles d’événements :

L'événement suivant montre un AWS événement simple provenant d'Amazon EC2.

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [ "arn:aws:ec2:us-west-1:123456789012:instance/i-1234567890abcdef0" ], "detail": { "instance-id": "i-1234567890abcdef0", "state": "terminated" } }

Le modèle d’événement suivant traite tous les événements instance-termination Amazon EC2.

{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["terminated"] } }

Création de modèles d’événements

Pour créer un modèle d’événement, vous spécifiez les champs d’un événement auxquels vous souhaitez que le modèle d’événement corresponde. Spécifiez uniquement les champs que vous utilisez pour la correspondance. L'exemple de modèle d'événement précédent ne fournit des valeurs que pour trois champs : les champs de niveau supérieur "source" et"detail-type", et le "state" champ situé à l'intérieur du champ "detail" d'objet. EventBridge ignore tous les autres champs de l'événement lors de l'application de la règle.

Pour qu’un modèle d’événement corresponde à un événement, cet événement doit contenir tous les noms de champs figurant dans le modèle d’événement. Les noms de champs doivent également apparaître dans l’événement avec la même structure imbriquée.

Lorsque vous écrivez des modèles d’événements pour correspondre à des événements, vous pouvez utiliser l’API TestEventPattern ou la commande d’interface de ligne de commande test-event-pattern pour vérifier que votre modèle correspond au événements appropriés. Pour plus d'informations, consultez TestEventPattern.

Correspondance de valeurs d’événements

Dans un modèle d’événement, la valeur à mettre en correspondance se trouve dans un tableau JSON, entourée de crochets (« [ », « ] ») afin que vous puissiez fournir plusieurs valeurs. Par exemple, pour faire correspondre des événements provenant d'Amazon EC2 ou AWS Fargate, vous pouvez utiliser le modèle suivant, qui correspond aux événements dont la valeur du "source" champ est soit ou"aws.ec2". "aws.fargate"

{ "source": ["aws.ec2", "aws.fargate"] }

Considérations lors de la création de modèles d’événements

Voici certains éléments à prendre en compte lors de la construction de vos modèles d’événements :

  • EventBridge ignore les champs de l'événement qui ne sont pas inclus dans le modèle d'événement. En conséquence, le caractère générique "*": "*" est ajouté pour les champs qui n’apparaissent pas dans le modèle d’événements.

  • Les valeurs auxquelles les modèles d’événements correspondent suivent les règles JSON. Vous pouvez inclure des chaînes entre guillemets ("), des nombres et les mots-clés true, false, et null.

  • Pour les chaînes, EventBridge utilise une character-by-character correspondance exacte sans pliage des boîtiers ni aucune autre normalisation des chaînes.

  • Pour les nombres, EventBridge utilise une représentation sous forme de chaîne. Par exemple, 300, 300,0 et 3.0e2 ne sont pas considérés égaux.

  • Si plusieurs modèles sont spécifiés pour le même champ JSON, utilise EventBridge uniquement le dernier.

  • Sachez que lorsque vous EventBridge compilez des modèles d'événements à utiliser, il utilise un point (.) comme caractère de jointure.

    Cela signifie que les modèles d'événements suivants EventBridge seront traités comme identiques :

    ## has no dots in keys { "detail" : { "state": { "status": [ "running" ] } } } ## has dots in keys { "detail" : { "state.status": [ "running" ] } }

    Et que les deux modèles d’événements correspondront aux deux événements suivants :

    ## has no dots in keys { "detail" : { "state": { "status": "running" } } } ## has dots in keys { "detail" : { "state.status": "running" } }
    Note

    Cela décrit EventBridge le comportement actuel et ne doit pas être invoqué pour ne pas le modifier.

  • Les modèles d’événements contenant des champs en double ne sont pas valides. Si un modèle contient des champs dupliqués, EventBridge seule la valeur finale du champ est prise en compte.

    Par exemple, les modèles d’événements suivants correspondront au même événement :

    ## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["sns.amazonaws.com"] } }

    Et EventBridge traite les deux événements suivants comme identiques :

    ## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } ] } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["sns.amazonaws.com"] } ] }
    Note

    Cela décrit EventBridge le comportement actuel et ne doit pas être invoqué pour ne pas le modifier.

Opérations de comparaison à utiliser dans les modèles d’événements

Vous trouverez ci-dessous un résumé de tous les opérateurs de comparaison disponibles dans EventBridge.

Les opérateurs de comparaison ne fonctionnent que sur les nœuds terminaux, à l’exception de $or et anything-but.

Comparison (Comparaison) Exemple Syntaxe des règles

And

Le lieu est « New York » et le jour est « Monday »

"Location": [ "New York" ], "Day": ["Monday"]

N'importe quoi, sauf L'état est n'importe quelle valeur autre que « initialisation ».

"state": [ { "anything-but": "initializing" } ]

Tout sauf (commence par)

La région n'est pas située aux États-Unis.

"Region": [ { "anything-but": {"prefix": "us-" } } ]

Tout sauf (se termine par)

FileName ne se termine pas par une extension .png.

"FileName": [ { "anything-but": { "suffix": ".png" } } ]

Tout sauf (ignorer le cas)

L'état est une valeur autre que « initialisation » ou toute autre variation du boîtier, telle que « INITIALISATION ».

"state": : [{ "anything-but": { "equals-ignore-case": "initializing" }}]}

Commence par

La région se trouve aux États-Unis.

"Region": [ {"prefix": "us-" } ]

Commence par (ignorer le cas)

Le nom du service commence par les lettres « eventb », quel que soit le cas.

{"service" : [{ "prefix": { "equals-ignore-case": "eventb" }}]}

Vide

LastName est vide.

"LastName": [""]

Égal à

Le nom est « Alice »

"Name": [ "Alice" ]

Est égal à (ignorer la casse)

Le nom est « Alice »

"Name": [ { "equals-ignore-case": "alice" } ]

Se termine par

FileName se termine par une extension .png

"FileName": [ { "suffix": ".png" } ]

Se termine par (ignorer les majuscules)

Le nom du service se termine par les lettres « tbridge » ou par toute autre variante du boîtier, telle que « TBRIDGE ».

{"service" : [{ "suffix": { "equals-ignore-case": "tBridge" }}]}

Existe

ProductName existe

"ProductName": [ { "exists": true } ]

N’existe pas

ProductName n'existe pas

"ProductName": [ { "exists": false } ]

Pas

La météo est tout sauf « Raining »

"Weather": [ { "anything-but": [ "Raining" ] } ]

Null

UserID est null

"UserID": [ null ]

Numérique (égal à)

Le prix est de 100

"Price": [ { "numeric": [ "=", 100 ] } ]

Numérique (plage)

Le prix est supérieur à 10 et inférieur ou égal à 20

"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]

Ou

PaymentType est « Crédit » ou « Débit »

"PaymentType": [ "Credit", "Debit"]

Ou (plusieurs champs)

Location est « New York », ou Day est « Monday ».

"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]

Caractère générique

Tout fichier portant l’extension .png, situé dans le dossier « dir »

"FileName": [ { "wildcard": "dir/*.png" } ]

Exemples d’événements et de modèles d’événements

Vous pouvez utiliser tous les types de données et toutes les valeurs JSON pour mettre des événements en correspondance. Les exemples suivants illustrent des évènements et les modèles d’évènements qui leur correspondent.

Correspondance de champs

Vous pouvez mettre en correspondance la valeur d’un champ. Tenez compte de l’événement Amazon EC2 Auto Scaling suivant.

{ "version": "0", "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "", "responseElements": null } }

Pour l’événement précédent, vous pouvez utiliser le champ "responseElements" pour établir une correspondance.

{ "source": ["aws.autoscaling"], "detail-type": ["EC2 Instance Launch Successful"], "detail": { "responseElements": [null] } }

Correspondance de valeurs

Prenons l’événement Amazon Macie suivant, qui est tronqué.

{ "version": "0", "id": "0948ba87-d3b8-c6d4-f2da-732a1example", "detail-type": "Macie Finding", "source": "aws.macie", "account": "123456789012", "time": "2021-04-29T23:12:15Z", "region":"us-east-1", "resources": [ ], "detail": { "schemaVersion": "1.0", "id": "64b917aa-3843-014c-91d8-937ffexample", "accountId": "123456789012", "partition": "aws", "region": "us-east-1", "type": "Policy:IAMUser/S3BucketEncryptionDisabled", "title": "Encryption is disabled for the S3 bucket", "description": "Encryption is disabled for the Amazon S3 bucket. The data in the bucket isn’t encrypted using server-side encryption.", "severity": { "score": 1, "description": "Low" }, "createdAt": "2021-04-29T15:46:02Z", "updatedAt": "2021-04-29T23:12:15Z", "count": 2, . . .

Le modèle d’événement suivant correspond à tout événement dont le score de gravité est de 1 et le nombre de 2.

{ "source": ["aws.macie"], "detail-type": ["Macie Finding"], "detail": { "severity": { "score": [1] }, "count":[2] } }