Comment créer un modèle d'événement personnalisé pour une règle d'événement CloudWatch ?

Date de la dernière mise à jour : 03/02/2020

Je souhaite capturer certains événements pour les services AWS avec une règle d'événement Amazon CloudWatch. Cependant, je ne parviens pas à créer un modèle d'événement personnalisé correspondant à l'événement. Comment créer un modèle d'événement CloudWatch personnalisé ?

Solution

Les événements sont générés par les services AWS dans un format JSON prédéfini et envoyés vers Amazon CloudWatch Events. Vous pouvez créer des règles qui utilisent des modèles d'événements pour filtrer les événements entrants, puis déclencher une cible.

Déterminer le format JSON de l'événement entrant

Reportez-vous à cette liste d'exemples d'événements. Ou effectuez les opérations suivantes pour voir vos événements entrants :

1.    Créez une règle CloudWatch Events avec un modèle d'événement simple qui correspond à tous les événements d'un service spécifique. Pour Event Source (Source de l’événement), choisissez Event Pattern (Modèle de l’événement).
Remarque : les caractères génériques ne sont pas autorisés dans le modèle d'événement. Les modèles d'événements vides ne sont pas autorisés non plus.

Par exemple, pour voir tous les événements générés par le service Amazon Elastic Compute Cloud (Amazon EC2), utilisez ce filtre :

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

2.    Attachez une cible à votre règle, avec une rubrique SNS ou CloudWatch Logs. Ainsi, tous les événements correspondants sont reçus via la rubrique SNS ou CloudWatch Logs. Vous recevez l'événement JSON exact qui a été envoyé par un service AWS spécifique. En fonction de ces résultats, vous pouvez ensuite créer un modèle d'événement personnalisé. Veillez à utiliser le paramètre par défaut (Configure Input : Matched event) [(Configurer l'entrée : événement correspondant)] pour l'input transformer (transformateur d'entrée) de la règle CloudWatch, afin que l'événement entrant soit transféré en l'état.

Créer 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 déclenché lorsque l'une des valeurs est présente dans un événement entrant. Par exemple, pour déclencher un événement basé sur chaque événement envoyé par Amazon EC2 ou Amazon DynamoDB, utilisez ce filtre :
{
 "source": [ "aws.ec2", "aws.dynamodb" ]
}

Remarque : vous devez supprimer les crochets de l'événement JSON envoyé par le service pour vous assurer que le modèle d'événement est marqué comme valide. Par exemple, pour être notifié lorsqu'un enregistrement de type A est créé pour une zone hébergée Amazon Route 53 spécifique, utilisez les éléments ci-dessous.

Événement envoyé par Route 53 vers CloudWatch Events (reçu d'une rubrique SNS ou CloudWatch Logs) :

{
    "version": "0",
    "id": "d857ae5c-cc83-3742-ab88-d825311ee4e9",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.route53",
    "account": "756022511916",
    "time": "2019-12-05T16:50:53Z",
    "region": "us-east-1",
    "resources": [

    ],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "AssumedRole",
            "principalId": "AROAIVOJE6CTAWGSJQUP2:patsusha-Isengard",
            "arn": "arn:aws:sts::756022511916:assumed-role/Admin/patsusha-Isengard",
            "accountId": "756022511916",
            "accessKeyId": "ASIA3ABTUBEWCHWLUGFI",
            "sessionContext": {
                "sessionIssuer": {
                    "type": "Role",
                    "principalId": "AROAIVOJE6CTAWGSJQUP2",
                    "arn": "arn:aws:iam::756022511916:role/Admin",
                    "accountId": "756022511916",
                    "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": "72.21.196.66",
        "userAgent": "console.amazonaws.com",
        "requestParameters": {
            "hostedZoneId": "Z1RP9G2VYLRY8V",
            "changeBatch": {
                "changes": [
                    {
                        "action": "CREATE",
                        "resourceRecordSet": {
                            "type": "A",
                            "tTL": 300,
                            "resourceRecords": [
                                {
                                    "value": "4.4.4.4"
                                }
                            ],
                            "name": "test4.sushantpatil.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"
    }
}

Modèle de filtre d'événement pour être notifié lorsqu'un enregistrement de type A est créé pour votre zone hébergée :

{
"source": ["aws.route53"],
    "detail": {
        "eventSource": ["route53.amazonaws.com"],
        "eventName": ["ChangeResourceRecordSets"],
        "requestParameters": {
            "hostedZoneId": ["Z1RP9G2VYLRY8V"],
            "changeBatch": {
                "changes":
                    {
                        "action": ["CREATE"],
                        "resourceRecordSet": {
                            "type": ["A"]
                        }
                    }
            }
        }
    }
}

Tester le modèle d'événement à l'aide de l'interface de ligne de commande AWS (AWS CLI)

Dans l'interface de ligne de commande AWS, 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 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é.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?