¿Cómo puedo crear un patrón de eventos personalizado para una regla de EventBridge?

6 minutos de lectura
0

Quiero capturar ciertos eventos para los servicios de AWS con una regla de Amazon EventBridge. Sin embargo, no puedo crear un patrón de eventos personalizado que coincida con el evento. ¿Cómo puedo crear un patrón de eventos personalizado de EventBridge?

Resolución

Nota: Si recibe errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI) asegúrese de que utiliza la versión más reciente de AWS CLI.

EventBridge acepta eventos de servicios de AWS, socios de EventBridge y eventos personalizados. En este artículo se describen los eventos de JSON que se originan en los servicios de AWS. Puedes crear reglas de EventBridge con patrones de eventos para filtrar los eventos entrantes. De esta forma, la regla de EventBridge solo hace coincidir los eventos deseados y los reenvía a los destinos.

Determinar el formato JSON del evento entrante

Hay tres métodos para determinar el formato JSON de un evento entrante:

  1. Abra la consola de EventBridge.
  2. En el panel de navegación, en Developer resources (Recursos para desarrolladores), seleccione Sandbox (entorno aislado).
  3. Desplácese hasta la sección Sample event (Evento de ejemplo) y, luego, seleccione AWS events (eventos de AWS).
  4. En el menú Sample events (Eventos de ejemplo), seleccione EC2 Instance State-change Notification (Notificación de cambio de estado de la instancia de EC2). Al hacerlo se completa la ventana con el primer evento de ejemplo. Para un tipo de evento determinado, es posible que haya varios ejemplos disponibles.
  • Cree una regla de EventBridge con un patrón de eventos sencillo que coincida con todos los eventos de un servicio determinado de AWS. Por ejemplo, este patrón de eventos coincide con todos los eventos de Amazon Elastic Compute Cloud (Amazon EC2):
{
 "source": [ "aws.ec2" ]
}

Nota: No se permiten los caracteres comodín ni los eventos vacíos en el patrón de eventos.

Luego, asocie un destino de SNS o un grupo de registro de CloudWatch a la regla para capturar los eventos entrantes. El destino debe tener la opción Configure target input (Configurar entrada de destino) establecida en Matched events (Eventos coincidentes) para que el JSON que emite el servicio se reciba correctamente.

Crear un patrón de eventos en el mismo formato JSON que el evento entrante

Las siguientes reglas se aplican para la creación de un patrón de eventos coincidente válido:

  • Los campos que no especifique en el patrón de eventos se comparan automáticamente. Por ejemplo, si no se especifica Detail (Detalle) en el patrón de eventos, entonces el patrón de eventos coincidirá con todos los eventos con cualquier detalle.
  • Para hacer coincidir los campos que están un nivel por debajo en la estructura JSON, utilice llaves { }. Un lector de JSON podría ser útil si analiza estructuras de eventos más grandes.
  • La cadena que debe coincidir con el evento JSON debe estar entre corchetes [ ]. Puede incluir varios valores entre corchetes para que el evento se invoque cuando cualquiera de los valores esté presente en un evento entrante. Por ejemplo, para invocar un evento en función de cada evento que envíe Amazon EC2 o Amazon DynamoDB, utilice este filtro:
{
 "source": [ "aws.ec2", "aws.dynamodb" ]
}

Paso 1: Obtenga el evento entrante mediante un destino de SNS/CloudWatch.

En este ejemplo se muestra un evento de Route 53 emitido a EventBridge. La llamada a la API ChangeResourceRecordSets representa la creación de un registro A en una zona alojada de Amazon Route 53. Un tema de Amazon Simple Notification Service (Amazon SNS) o un destino del grupo de registro de Amazon CloudWatch captura el siguiente 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"
  }
}

Paso 2: Cree el patrón de eventos correspondiente.

Este ejemplo de patrón de eventos filtra varios campos. Por ejemplo, eventName, hostedZoneld, action y type. Los eventos coincidentes deben contener todos los campos y los valores correspondientes. El patrón aísla los registros A creados en una zona alojada específica.

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

Evaluar el patrón de eventos

Evaluar con la consola de EventBridge

Aproveche el entorno aislado de EventBridge: 

  1. En la sección Sample event (Evento de ejemplo), seleccione o ingrese un evento de muestra.
  2. En la sección Event pattern (Patrón de eventos), brinda un patrón de eventos. Para ello, puede crear un patrón de eventos mediante los menús del Formulario de patrones de eventos o al ingresar un patrón de eventos personalizado con los patrones personalizados (editor de JSON).
  3. Una vez completas ambas secciones, seleccione Test pattern (Probar patrón) para confirmar que el patrón de eventos coincide con el evento de prueba determinado.

Evaluar con la AWS CLI

En AWS CLI, ejecute el comando test-event-pattern. Para confirmar que el patrón de eventos coincide, asegúrese de que el resultado sea true (verdadero). De esta manera, puede identificar los eventos JSON enviados por el servicio de AWS y ayudar a su patrón de eventos personalizado a capturar eventos específicos.


Información relacionada

Patrones de eventos de Amazon EventBridge

Creación de reglas de Amazon EventBridge que reaccionen a eventos

Tutorial: Registrar llamadas a la API de AWS mediante EventBridge

Amazon EventBridge - What's the difference between CloudWatch Events and EventBridge? (¿Cuál es la diferencia entre CloudWatch Events y EventBridge?) (video)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años