Comment puis-je créer un modèle d'événement personnalisé pour une règle EventBridge ?
Je veux capturer certains événements pour les services AWS avec une règle Amazon EventBridge. Cependant, je ne parviens pas à créer un modèle d'événement personnalisé correspondant à l'événement. Comment puis-je créer un modèle d'événement EventBridge personnalisé ?
Solution
Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous que vous utilisez la version la plus récente d'AWS CLI.
EventBridge accepte les événements des services AWS, des partenaires EventBridge, ainsi que les événements personnalisés. Cet article décrit les événements JSON qui proviennent des services AWS. Vous pouvez créer des règles EventBridge à l’aide de modèles d'événements pour filtrer les événements entrants. Ce faisant, la règle EventBridge fait correspondre uniquement les événements souhaités et transmet ces événements aux cibles.
Détermination du format JSON de l'événement entrant
Il existe trois méthodes pour déterminer le format JSON d'un événement entrant :
- Consultez cette liste d'exemples d'événements des services AWS qu'EventBridge reçoit.
- EventBridge fournit l'outil d’environnement de test (sandbox) EventBridge pour aider les utilisateurs à créer et à valider des modèles d'événements. Par exemple, si vous êtes intéressé(e) par un événement de changement d'état d'une instance EC2, vous pouvez procéder comme suit :
- Ouvrez la console EventBridge.
- Dans le volet de navigation, sous Developer resources (Ressources pour développeurs), sélectionnez Sandbox (Environnement de test [sandbox]).
- Accédez à la section Sample event (Exemple d'événement), puis sélectionnez AWS events (Événements AWS).
- Dans le menu Sample events (Exemples d'événements), sélectionnez EC2 Instance State-change Notification (Notification de changement d'état de l'instance EC2). Le premier exemple d’événement est alors renseigné dans la fenêtre. Pour un type d'événement donné, il est possible que plusieurs exemples soient disponibles.
- Créer une règle EventBridge avec un modèle d'événement simple qui correspond à tous les événements d'un service AWS donné. Par exemple, ce modèle d'événement correspond à tous les événements Amazon Elastic Compute Cloud (Amazon EC2) :
{ "source": [ "aws.ec2" ] }
Remarque : les caractères génériques et les événements vides ne sont pas autorisés dans le modèle d'événement.
Associez ensuite une cible SNS ou Groupe de journaux CloudWatch à la règle pour capturer les événements entrants. L'option Configure target input (Configurer l’entrée cible) doit être définie sur Matched events (Événements correspondants) pour que le JSON émis par le service soit reçu correctement.
Création d’un modèle d'événement dans le même format JSON que l'événement entrant
Les règles suivantes s'appliquent à la création d'un modèle d'événement correspondant valide :
- Tous les champs que vous ne spécifiez pas dans votre modèle d'événement sont automatiquement mis en correspondance. Par exemple, si Detail (Détail) n'est pas spécifié dans le modèle d'événement, alors le modèle d'événement correspond à chaque événement avec n'importe quel détail.
- Pour faire correspondre des champs d'un niveau vers le bas dans la structure JSON, utilisez des accolades { }. Une visionneuse JSON peut être utile si vous examinez des structures d'événements plus grands.
- La chaîne à mettre en correspondance à partir de l'événement JSON doit être placée entre crochets [ ]. Vous pouvez inclure plusieurs valeurs entre crochets afin que l'événement soit invoqué lorsque l'une des valeurs est présente dans un événement entrant. Par exemple, pour invoquer un événement basé sur chaque événement envoyé par Amazon EC2 ou Amazon DynamoDB, utilisez ce filtre :
{ "source": [ "aws.ec2", "aws.dynamodb" ] }
Étape 1 : obtenir un événement entrant à l'aide de la cible SNS/CloudWatch
Cet exemple montre un événement Route 53 émis vers EventBridge. L'appel d'API ChangeResourceRecordSets représente la création d'un enregistrement A dans une zone hébergée Amazon Route 53. Une rubrique Amazon Simple Notification Service (Amazon SNS) ou une cible du groupe de journaux Amazon CloudWatch capture l'événement suivant :
{ "version": "0", "id": "d857ae5c-cc83-3742-ab88-d825311ee4e9", "detail-type": "AWS API Call via CloudTrail", "source": "aws.route53", "account": "123456789012", "time": "2019-12-05T16:50:53Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAABCDEFGHIJKLMNOPQ:Admin", "arn": "arn:aws:sts::123456789012:assumed-role/Admin", "accountId": "123456789012", "accessKeyId": "ASIAABCDEFGH12345678", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAABCDEFGHIJKLMNOPQ", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2019-12-05T16:28:27Z" } } }, "eventTime": "2019-12-05T16:50:53Z", "eventSource": "route53.amazonaws.com", "eventName": "ChangeResourceRecordSets", "awsRegion": "us-east-1", "sourceIPAddress": "12.34.56.78", "userAgent": "console.amazonaws.com", "requestParameters": { "hostedZoneId": "Z1RP12345WXRQD", "changeBatch": { "changes": [ { "action": "CREATE", "resourceRecordSet": { "type": "A", "tTL": 300, "resourceRecords": [ { "value": "4.4.4.4" } ], "name": "test.example.us." } } ] } }, "responseElements": { "changeInfo": { "status": "PENDING", "id": "/change/C271P4WIKN511J", "submittedAt": "Dec 5, 2019 4:50:53 PM" } }, "additionalEventData": { "Note": "Do not use to reconstruct hosted zone" }, "requestID": "bbbf9847-96cb-45ef-b617-d535b9fe83d8", "eventID": "74e2d2c8-7497-4292-94d0-348272dbc4f7", "eventType": "AwsApiCall", "apiVersion": "2013-04-01" } }
Étape 2 : créer un EventPattern correspondant
Cet exemple de modèle d'événement filtre un certain nombre de champs. Par exemple, eventName, hostedZoneld, action et type. Les événements correspondants doivent contenir tous les champs, ainsi que les valeurs correspondantes. Le modèle isole les enregistrements A créés par rapport à une zone hébergée spécifique.
{ "source": [ "aws.route53" ], "detail": { "eventSource": [ "route53.amazonaws.com" ], "eventName": [ "ChangeResourceRecordSets" ], "requestParameters": { "hostedZoneId": [ "Z1RP12345WXRQD" ], "changeBatch": { "changes": { "action": [ "CREATE" ], "resourceRecordSet": { "type": [ "A" ] } } } } } }
Test du modèle d'événement
Test à l'aide de la console EventBridge
Tirez parti de l’environnement de test (sandbox) EventBridge :
- Dans la section Sample event (Exemple d'événement), sélectionnez ou saisissez un exemple d'événement.
- Dans la section Event pattern (Modèle d'événement), indiquez un modèle d'événement. Pour ce faire, vous pouvez créer un modèle d'événement à l'aide des menus du formulaire Modèle d'événement ou en saisissant un modèle d'événement personnalisé à l'aide des modèles personnalisés (éditeur JSON).
- Une fois les deux sections renseignées, sélectionnez Test pattern (Modèle de test) pour confirmer que le modèle d'événement correspond à l'exemple d'événement donné.
Test à l'aide d'AWS CLI
Dans l'AWS CLI, exécutez la commande test-event-pattern. Pour confirmer que le modèle d'événement correspond, assurez-vous que le résultat est true (vrai). Cela vous permet ainsi d'identifier les événements JSON envoyés par le service AWS et de faciliter la capture des événements spécifiques par votre modèle d'événement personnalisé.
Informations connexes
Modèles d'événements Amazon EventBridge
Création de règles Amazon EventBridge qui réagissent aux événements
Didacticiel : journaliser les appels d'API AWS à l'aide d'EventBridge
Amazon EventBridge – Quelle est la différence entre CloudWatch Events et EventBridge ? (vidéo)
Vidéos associées
Contenus pertinents
- demandé il y a 5 moislg...
- demandé il y a 7 moislg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 23 jours