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

6 minuto de leitura
0

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 que está usando a versão mais recente da AWS CLI.

O EventBridge aceita eventos dos serviços da AWS, parceiros do EventBridge e eventos personalizados. Este artigo discute eventos JSON originados dos serviços da AWS. Você pode criar regras do EventBridge com padrões de eventos para filtrar eventos recebidos. Dessa forma, a regra do EventBridge combina somente os eventos desejados e os encaminha para os alvos.

Determine o formato JSON do evento de entrada

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

  1. Abra o console do EventBridge.
  2. No painel de navegação, em Developer resources (Recursos do desenvolvedor), selecione Sandbox (Área restrita para testes).
  3. Role até a seção Sample event (Evento de amostra) e selecione AWS events (Eventos da AWS).
  4. No menu Sample events (Eventos de amostra), selecione EC2 Instance State-change Notification (Notificação de alteração de estado de instância do EC2). Isso preenche a janela com o primeiro evento de amostra. Para um determinado tipo de evento, várias amostras podem estar disponíveis.
  • Crie uma regra do EventBridge com um padrão de evento simples que corresponda a todos os eventos de um determinado serviço da AWS. Por exemplo, esse padrão de evento corresponde a todos os eventos do Amazon Elastic Compute Cloud (Amazon EC2):
{
 "source": [ "aws.ec2" ]
}

Observação: curingas e eventos vazios não são permitidos no padrão de eventos.

Em seguida, associe um destino do SNS ou um Grupo de logs do CloudWatch à regra para capturar eventos de entrada. O destino deve ter a opção Configure target input (Configurar entrada de destino) definida como Matched events (Eventos correspondentes) para que o JSON emitido pelo serviço seja recebido corretamente.

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 invocado quando um dos valores estiver presente em um evento de entrada. Por exemplo, para invocar um evento com base em cada evento enviado pelo Amazon EC2 ou pelo Amazon DynamoDB, use este filtro:
{
 "source": [ "aws.ec2", "aws.dynamodb" ]
}

Etapa 1: Obter o evento de entrada usando o destino do SNS /CloudWatch

Este exemplo mostra um evento do Route 53 emitido para o EventBridge. A chamada da API ChangeResourceRecordSets representa a criação de um registro A em uma zona hospedada do Amazon Route 53. Um tópico do Amazon Simple Notification Service (Amazon SNS) ou um destino de Grupo de logs do Amazon CloudWatch captura o seguinte evento:

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

Etapa 2: Criar o EventPattern correspondente

Este exemplo de padrão de evento é filtrado em vários campos. Por exemplo, eventName, hostedZoneld, action e type. Os eventos correspondentes devem conter todos os respectivos campos e valores. O padrão isola os registros A criados contra uma zona hospedada específica.

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

Aproveite o EventBridge Sandbox: 

  1. Na seção Sample event (Evento de amostra), selecione ou insira um evento de amostra.
  2. Na seção Event pattern (Padrão do evento), forneça um padrão de evento. Você pode fazer isso criando um padrão de evento nos menus do formulário de Padrão de evento ou inserindo um padrão de evento personalizado com os Padrões personalizados (editor JSON).
  3. Depois que as duas seções forem preenchidas, selecione Test pattern (Testar padrão) para confirmar se o padrão de evento corresponde ao evento de amostra fornecido.

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 ajudar a captura de eventos específicos pelo seu padrão de eventos personalizado.


Informações relacionadas

Padrões de eventos do Amazon EventBridge

Como criar regras do Amazon EventBridge que reagem a eventos

Tutorial: registrar chamadas de API da AWS usando o EventBridge

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)

AWS OFICIAL
AWS OFICIALAtualizada há um ano