

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Suscripción a eventos en un bus de eventos personalizado
<a name="eb-custom-bus-subscribers"></a>

Un suscriptor es un recurso que indica qué eventos quieres y a dónde enviarlos. Lo creas con `CreateSubscriber` un nombre para el bus, los filtros y un objetivo. Observa ese autobús, conserva los eventos que coinciden con sus filtros y, si lo desea, transforma cada uno de ellos y lo envía exactamente a un objetivo. Para distribuir un evento en varios objetivos, cree un suscriptor para cada objetivo del mismo bus.

EventBridge aplica la creación o eliminación de un suscriptor a la vez en un bus determinado, independientemente de la cuenta a la que se llame. Si se usa un segundo bus `CreateSubscriber` o `DeleteSubscriber` en el mismo bus mientras hay uno en curso, se produce un error`ConcurrentModificationException`; inténtelo de nuevo. [Cuotas personalizadas de Event Bus](eb-quota.md#eb-custom-bus-quotas)Por lo tanto, las tarifas de creación y eliminación se aplican por autobús.

## Filtrar qué eventos llegan al objetivo
<a name="eb-custom-bus-subscribers-filter"></a>

`FilterConfiguration`contiene una lista de`Filters`. Cada filtro tiene una `Pattern` sintaxis de patrón de EventBridge eventos y una`Scope`. Puede tener como máximo un filtro por ámbito y entregar EventBridge un evento solo si coincide con todos los filtros de la lista. Un suscriptor sin un `FilterConfiguration` recibe todos los eventos del autobús.
+ `DATA`: coincide con la carga útil. Escribe el patrón comparándolo con la forma descrita en[Estructura del evento: datos, metadatos y metadatos del sistema](eb-custom-bus-addressing.md).
+ `METADATA`: coincide con los pares clave-valor con los que un conjunto productor`PutRawEvents`, solo coincidencias exactas.
+ `SYSTEM_METADATA`: coincide con los EventBridge conjuntos de campos, como `aws:Source` o. `EventGroupId`

Para obtener información sobre la sintaxis del patrón, las reglas de ámbito y los ejemplos, consulte[Filtrado de eventos para un suscriptor](eb-custom-bus-filtering.md).

## Transformar la carga útil
<a name="eb-custom-bus-subscribers-transform"></a>

`Transformer.Type`selecciona lo que recibe el objetivo. Un objetivo universal no lo usa; consulte[Objetivos universales para un bus de eventos personalizado](eb-custom-bus-universal-targets.md).
+ `RAW`, el valor predeterminado. Solo la carga útil.
+ `WITH_METADATA`. El evento completo:`Data`,`Metadata`, y`SystemMetadata`.
+ `JSONATA`. El resultado de la expresión JSonata en`JsonataConfiguration.Expression`, envuelto en `{% %}` delimitadores, con el evento disponible como. `$events`

EventBridge comprueba la sintaxis de una expresión al crear el suscriptor y la evalúa en el momento de la entrega. Una expresión que arroje, o que no produzca ningún valor, no entregará ese evento. Pruebe las expresiones comparándolas con eventos reales antes de depender de ellos. Para conocer lo que `$events` es válido, las funciones adicionales y los límites, consulte[Transformación de eventos con JSonata](eb-custom-bus-transform.md).

## Cumplir con un objetivo
<a name="eb-custom-bus-subscribers-deliver"></a>

`InvokeConfiguration`contiene el`TargetArn`, el `RoleArn` que EventBridge supone invocar el objetivo y, como máximo, un bloque de parámetros que coincide con el tipo de objetivo. La mayoría de los valores de los parámetros aceptan una expresión JSonata, por lo que un valor puede provenir del evento. En la siguiente tabla se enumeran los tipos de objetivos personalizados y sus bloques de parámetros; cada uno tiene su propia página en la parte inferior. [Objetivos para un suscriptor de Custom Event Bus](eb-custom-bus-targets.md)


| Target | Bloque de parámetros | 
| --- | --- | 
| Cola de Amazon SQS | SqsParameters | 
| Función de Lambda | LambdaParameters | 
| Flujo de Kinesis | KinesisParameters | 
| Máquina de estado de Step Functions | StepFunctionsParameters | 
| Tema de Amazon SNS | SnsParameters | 
| Punto final HTTP o destino de API | HttpParameters | 
| Flujo de Firehose | FirehoseParameters | 

El objetivo también puede ser un bus de eventos personalizado o un bus de eventos personalizado: defina el ARN del bus como`TargetArn`. En el caso de un objetivo FIFO, como una cola FIFO de Amazon SQS, defina el identificador de deduplicación propio del objetivo en el bloque de parámetros, por ejemplo`SqsParameters.MessageDeduplicationId`, en un valor por mensaje derivado del evento con una expresión JSonata. Una constante hace que el objetivo descarte todos los mensajes después del primero.

Un objetivo * universal * invoca una acción de la AWS API directamente, sin ninguna función intermedia. Su ARN tiene el formulario`arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}`, por ejemplo`arn:aws:events:::aws-sdk:dynamodb:putItem`, y `UniversalTargetParameters.Input` contiene la solicitud como JSON o como una expresión JSonata que la produce. Para conocer las reglas de nomenclatura, el procesamiento por lotes y el comportamiento ante errores, consulte. [Objetivos universales para un bus de eventos personalizado](eb-custom-bus-universal-targets.md)

Al crear el suscriptor, EventBridge resuelve el tipo de destino a partir del ARN y comprueba tres cosas: que el bloque de parámetros coincida con el tipo de destino, que el ARN pertenezca a su cuenta y que cada expresión se analice. Si el objetivo existe, si el rol puede alcanzarlo y si la API del objetivo acepta los valores, se comprueba en el momento de la entrega, por lo que debes confirmar la primera entrega en el destino.

## Reintentos y colas de mensajes sin respuesta
<a name="eb-custom-bus-subscribers-retry"></a>

`RetryPolicy`establece durante cuánto tiempo se EventBridge reintenta una entrega fallida (de forma predeterminada, 5 intentos en 300 segundos) y asigna un `OnFailureConfiguration.Arn` nombre a la cola de Amazon SQS que recibe un registro por cada evento que ha agotado sus reintentos. Configure ambos cuando cree el suscriptor. Para conocer los límites, el formato de grabación y cómo reconducir, consulta[Políticas de reintentos y colas de mensajes muertos](eb-custom-bus-retry.md).

## La función de entrega
<a name="eb-custom-bus-subscribers-role"></a>

El rol en `RoleArn` debe pertenecer a tu cuenta y confiar en el director del `events.amazonaws.com` servicio. La persona que llama necesita `iam:PassRole` el rol para crear el suscriptor o EventBridge rechaza la solicitud antes de comprobar el ARN de destino. La política de permisos del rol necesita dos concesiones.
+ La acción que requiere el objetivo, por ejemplo, `sqs:SendMessage` en una cola, `lambda:InvokeFunction` en una función, `sns:Publish` en un tema o `kinesis:PutRecords` en una transmisión.
+ `sqs:SendMessage`en la cola de cartas muertas. `OnFailureConfiguration.Arn` Sin él, una entrega fallida no tiene dónde registrarse, y esos eventos se pierden sin señal.

La siguiente política de confianza EventBridge permite asumir el rol.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { "Service": "events.amazonaws.com" },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

La siguiente política de permisos se envía a una cola de Amazon SQS y las cartas muertas a una segunda cola.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "InvokeTheTarget",
            "Effect": "Allow",
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders"
        },
        {
            "Sid": "WriteToTheDeadLetterQueue",
            "Effect": "Allow",
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq"
        }
    ]
}
```

## Ejemplo: entregar pedidos grandes a una cola
<a name="eb-custom-bus-subscribers-example"></a>

El siguiente comando crea un suscriptor que entrega los pedidos de más de 500 pedidos a una cola de Amazon SQS, para los eventos publicados en ella`PutEvents`, y envía los pedidos fallidos a una cola de espera.

```
aws eventsv2 create-subscriber \
    --name large-orders \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --filter-configuration '{
        "Filters": [
            { "Scope": "DATA", "Pattern": "{\"detail\":{\"total\":[{\"numeric\":[\">\",500]}]}}" }
        ]
    }' \
    --invoke-configuration '{
        "TargetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders",
        "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole"
    }' \
    --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq" }'
```

## Solución de problemas: publicaste y no llegó nada al objetivo
<a name="eb-custom-bus-subscribers-nothing-arrived"></a>

La respuesta de publicación solo indica que el autobús ha aceptado y almacenado el evento; nunca confirma la entrega. Realice las siguientes comprobaciones en orden.

Síntoma  
La llamada de publicación devolvió el HTTP 200 sin ninguna entrada fallida y el objetivo no recibió nada después de varios minutos.

Causa  
Una de estas cinco cosas, por orden de frecuencia: se sigue intentando realizar la entrega; el suscriptor es `STOPPED` o se ha revocado; el del suscriptor `StartingPosition` es `LATEST` y el evento se publicó antes de que el suscriptor existiera; el filtro está escrito para la otra API de publicación y no coincide con nada; o el rol de entrega no puede alcanzar el objetivo o la cola de mensajes muertos. `TargetInvocations`te indica la mitad del problema que tienes. Los puntos de datos activados `TargetInvocations` sin ninguno activado `EventsDelivered` significan que las entregas se han intentado y han fallado. Si no hay puntos de datos `TargetInvocations` activados mientras los `FilterEvaluated` tiene significa que no se ha intentado realizar ninguna entrega; compruebe que el suscriptor sí lo está y `RUNNING` compruébelo. `EventTransformationFailures`

Solución  

1. Lee el suscriptor. `State`debe estar `RUNNING` y `Revoked` debe estar ausente; aparece solo cuando es verdadero. La nota `StartingPosition` y los filtros.

   ```
   aws eventsv2 describe-subscriber \
       --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLE1234567890abcdef
   ```

1. Lee las métricas del suscriptor en`AWS/EventsV2`. `FilterEvaluated`con cero significa que ningún evento llegó a este suscriptor: el productor publicó en otro bus o antes de que el suscriptor existiera con`LATEST`. `FilterEvaluated`por encima de cero con `FilterMatched` cero significa que el filtro no coincide con nada; consulte[Estructura del evento: datos, metadatos y metadatos del sistema](eb-custom-bus-addressing.md). Cuando `FilterMatched` tiene puntos de datos y `EventsDelivered` no los tiene, las entregas fallan y la métrica que registre el resultado depende del suscriptor: `EventsDropped` cuando no está configurada ninguna cola de mensajes muertos, `OnFailureDestinationDelivered` cuándo el evento llegó a la cola y `OnFailureDestinationFailed` cuándo no.

1. Activa los registros y reprodúcelos. `LogConfiguration.Level``INFO`Configúralo en y `IncludePayload` como`FULL`, transfiere la entrega de un registro, vuelve a publicarlo y lee los `EVENT_DELIVERY_ATTEMPT` registros. Cada uno contiene el código y el mensaje de error propios del destinatario`details.target_input`, así como qué es lo que se EventBridge envió y no lo que se pretendía enviar. Consulte [Observabilidad del bus de eventos personalizado: métricas, registros y CloudTrail](eb-custom-bus-observability.md).

1. Si el filtro es el sospechoso, añada un suscriptor de diagnóstico en el mismo bus sin filtro y una cola de su propiedad como objetivo. `Transformer.Type` `WITH_METADATA` Entrega cada evento exactamente como lo EventBridge ve, tal y como `Data` lo ve `Metadata` y`SystemMetadata`. Luego, simplifica el filtro una condición a la vez; la última condición que elimines es la causa.

Verificación  
Publica un evento que debería coincidir y otro que no. El primero llega al objetivo y se `EventsDelivered` incrementa en uno; el segundo no llega y se `FilterEvaluated` incrementa mientras no `FilterMatched` lo hace.

**nota**  
Las métricas de un suscriptor están disponibles para el propietario del autobús y para el propietario del suscriptor; sus registros solo se entregan al propietario del suscriptor.