Como posso criar um padrão de evento personalizado para uma regra do EventBridge?

Data da última atualização: 26/01/2022

Quero capturar determinados eventos para serviços da AWS com uma regra do Amazon EventBridge. No entanto, não consigo criar um padrão de evento personalizado que corresponda ao evento. Como posso criar um padrão de evento personalizado do EventBridge?

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

Os eventos são gerados pelos serviços da AWS em um formato JSON predefinido e enviados para o Amazon EventBridge. Você pode criar regras que usam padrões de eventos para filtrar eventos recebidos e, em seguida, acionar um destino.

Determine o formato JSON do evento de entrada

Há três métodos para determinar o formato JSON para um evento de entrada:

1.    Consulte esta lista de exemplos de eventos.

2.    Use um exemplo de evento integrado ao console do Amazon EventBridge. Para usar um evento de amostra, faça o seguinte:

Em Event matching pattern (Padrão de correspondência de eventos), selecione Pre-defined pattern by service (Padrão predefinido por serviço). Selecione um Service provider (Provedor de serviços) na lista suspensa. Selecione um Service name (Nome de serviço) na lista suspensa. Selecione um Event type (Tipo de evento) na lista suspensa. Selecione se o evento é para Any resource (Qualquer recurso) ou um Specific resource (Recurso específico). Selecione se o evento é para Any status (Qualquer status) ou um Specific status (Status específico). A caixa de texto Event pattern (Padrão de evento) é preenchida com o padrão de evento de amostra selecionado. Você pode copiar ou editar o padrão conforme necessário.

3.    Crie uma regra do EventBridge com um padrão de evento simples que corresponda a todos os eventos de um serviço específico. Em Define pattern (Definir padrão), escolha Event Pattern (Padrão de evento).

Observação: caracteres curingas não são permitidos no padrão de evento. Padrões de evento vazios também não são permitidos.

Por exemplo, para ver todos os eventos gerados pelo serviço Amazon Elastic Compute Cloud (Amazon EC2), use este filtro:

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

Anexe um destino à sua regra, com um tópico do SNS ou com o CloudWatch Logs. Como resultado, todos os eventos correspondentes serão recebidos por meio do tópico do SNS ou do CloudWatch Logs. Você recebe o evento JSON exato que foi enviado por um serviço específico da AWS. Com base nesses resultados, você pode criar um padrão de evento personalizado. Certifique-se de que você está usando a configuração padrão (Configure Input: Matched event) para o transformador de entrada da regra do EventBridge para que o evento de entrada seja encaminhado como está.

Crie um padrão de evento no mesmo formato JSON que o evento de entrada

As seguintes regras se aplicam à criação de um padrão de evento de correspondência válido:

  • Todos os campos que você não especificar em seu padrão de evento são correspondidos automaticamente. Por exemplo, se Detail (Detalhe) não estiver especificado no padrão de evento, o padrão de evento corresponderá a todos os eventos com qualquer detalhe.
  • Para corresponder campos que estão um nível abaixo na estrutura JSON, use chaves { }. Um visualizador JSON pode ser útil se você estiver observando estruturas de eventos maiores.
  • A string a ser correspondida do evento JSON deve estar entre colchetes [ ]. Você pode incluir vários valores entre colchetes para que o evento seja acionado quando um dos valores estiver presente em um evento de entrada. Por exemplo, para acionar um evento com base em cada evento enviado pelo Amazon EC2 ou pelo Amazon DynamoDB, use este filtro:
{
 "source": [ "aws.ec2", "aws.dynamodb" ]
}

Observação: você deve remover todos os colchetes no evento JSON enviado pelo serviço para garantir que o padrão de evento esteja marcado como válido. Por exemplo, para ser notificado quando um registro Tipo A for criado para uma zona hospedada específica do Amazon Route 53, use o exemplo a seguir.

Evento enviado pelo Route 53 para o EventBridge (recebido de um tópico do SNS ou do 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"
    }
}

Padrão de filtro de eventos a ser notificado quando um registro Tipo A for criado para sua zona hospedada:

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

Testar o padrão de eventos

Testar usando o console do EventBridge

Você pode testar o padrão de eventos ao criar sua regra. Selecione Test event pattern (Testar padrão de eventos) para testar seu evento.

Testar usando a AWS CLI

Na AWS CLI, execute o comando test-event-pattern. Para confirmar se o padrão do evento corresponde, certifique-se de que o resultado seja true (verdadeiro). Ao fazer isso, você pode identificar os eventos JSON enviados pelo serviço da AWS e facilitar a captura de eventos específicos pelo seu padrão de eventos personalizado.


Padrões de eventos do Amazon EventBridge

Creating Amazon EventBridge rules that react to events (“Criar regras do Amazon EventBridge que reagem a eventos”)

Tutorial: Create an Amazon EventBridge rule for AWS CloudTrail API calls (“Tutorial: Crie uma regra do Amazon EventBridge para chamadas de API do AWS CloudTrail”)

Amazon EventBridge - What's the difference between CloudWatch Events and EventBridge? (“Amazon EventBridge — Qual é a diferença entre o CloudWatch Events e o EventBridge?”) (vídeo)

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?