Come posso creare un modello di evento personalizzato per una regola EventBridge?

Ultimo aggiornamento: 26/01/2022

Desidero catturare determinati eventi per i servizi AWS con una regola Amazon EventBridge. Tuttavia, non sono in grado di creare un modello di evento personalizzato che corrisponda all'evento. Come posso creare un modello di evento EventBridge personalizzato?

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Gli eventi vengono generati dai servizi AWS in un formato JSON predefinito e inviati ad Amazon EventBridge. È possibile creare regole che utilizzano modelli di eventi per filtrare gli eventi in arrivo e quindi attivare una destinazione.

Determinazione del formato JSON dell'evento in arrivo

Esistono tre metodi per determinare il formato JSON per un evento in arrivo:

1.    Fai riferimento a questo elenco di esempi di eventi.

2.    Utilizza un evento di esempio integrato nella console di Amazon EventsBridge. Per utilizzare un evento di esempio, completa le seguenti operazioni:

Per Modello di corrispondenza degli eventi, seleziona Modello predefinito per servizio. Seleziona un provider di servizi dall'elenco a discesa. Seleziona un nome di servizio dall'elenco a discesa. Seleziona un tipo di evento dall'elenco a discesa. Seleziona se l'evento è per qualsiasi risorsa o una risorsa specifica. Seleziona se l'evento è relativo a qualsiasi stato o a uno stato specifico. La casella di testo Modello di evento viene completata con il modello di evento di esempio selezionato. Puoi copiare o modificare il motivo in base alle necessità.

3.    Crea una regola EventBridge con un modello di evento semplice che corrisponda a tutti gli eventi per un servizio specifico. Per Definisci modello, scegli Modello di evento.

Nota: i caratteri jolly non sono consentiti nel modello di evento. Anche i modelli di eventi vuoti non sono consentiti.

Ad esempio, per visualizzare tutti gli eventi generati dal servizio Amazon Elastic Compute Cloud (Amazon EC2), utilizza questo filtro:

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

Allega una destinazione alla tua regola, con un argomento SNS o CloudWatch Logs. Di conseguenza, tutti gli eventi corrispondenti saranno ricevuti tramite l'argomento SNS o CloudWatch Logs. Riceverai l'evento JSON esatto inviato da un particolare servizio AWS. Sulla base di questi risultati, potrai creare un modello di evento personalizzato. Assicurati di utilizzare l'impostazione predefinita (Configure Input: Matched event) per il trasformatore di input della regola EventBridge in modo che l'evento in arrivo venga inoltrato così com'è.

Creazione di un modello di evento nello stesso formato JSON dell'evento in arrivo

Le seguenti regole si applicano alla creazione di un modello di evento corrispondente valido:

  • Tutti i campi che non specifichi nel modello di evento vengono abbinati automaticamente. Ad esempio, se nel modello di evento non specifichi Detail, il modello di evento corrisponderà a ogni evento con qualsiasi dettaglio.
  • Per confrontare i campi che si trovano di un livello più in basso nella struttura JSON, utilizza le parentesi graffe { }. Se stai guardando strutture di eventi più grandi potrebbe essere utile un visualizzatore JSON.
  • La stringa da abbinare dall'evento JSON deve essere racchiusa tra parentesi quadre []. È possibile includere più valori tra parentesi quadre in modo che l'evento venga attivato quando uno dei valori è presente in un evento in arrivo. Ad esempio, per attivare un evento basato su ogni evento inviato da Amazon EC2 o Amazon DynamoDB, utilizza questo filtro:
{
 "source": [ "aws.ec2", "aws.dynamodb" ]
}

Nota: è necessario rimuovere tutte le parentesi quadre nell'evento JSON inviato dal servizio per assicurarsi che il modello di evento sia contrassegnato come valido. Ad esempio, per ricevere una notifica quando viene creato un record di tipo A per una zona ospitata Amazon Route 53 specifica, utilizza quanto segue.

Evento inviato da Route 53 a EventBridges (ricevuto da un argomento SNS o CloudWatch Logs):

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

Modello di filtro degli eventi da notificare quando viene creato un record di Tipo A per la tua zona ospitata:

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

Test del modello di evento

Test mediante la console EventBridge

È possibile testare il modello di evento durante la creazione della regola. Seleziona Test modello di evento per testare il tuo evento.

Test mediante AWS CLI

In AWS CLI, esegui il comando test-event-pattern. Per verificare che il modello di evento corrisponda, assicurarsi che il risultato sia true. In questo modo, puoi identificare gli eventi JSON inviati dal servizio AWS e facilitare il tuo modello di evento personalizzato per catturare eventi specifici.