

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.

# Objetivos universales para un bus de eventos personalizado
<a name="eb-custom-bus-universal-targets"></a>

Un objetivo * universal * invoca una acción de la AWS API directamente de un suscriptor, sin ninguna función intermedia. En lugar de asignar el nombre de destino a una cola, un tema o una función, asignas un nombre al servicio y a la acción de la API y escribes la solicitud de API que se EventBridge envía, ya sea como una expresión de JSON fija o de Jsonata que genera la solicitud a partir del evento. Un suscriptor puede escribir un elemento en una tabla de DynamoDB, colocar un objeto en un bucket de Amazon S3, publicar en un tema de Amazon SNS o iniciar una ejecución de Step Functions sin una función de Lambda en la ruta.

## El ARN de destino
<a name="eb-custom-bus-universal-targets-arn"></a>

Un objetivo universal `TargetArn` tiene una forma fija sin región ni cuenta:

```
arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}
```
+ {{service}}es el identificador del servicio del AWS SDK, que no siempre es el nombre conocido del servicio. Por ejemplo, Step Functions no `sfn` `states` lo es. Ejemplos que funcionan:`sqs`,`sns`,`s3`,`dynamodb`,`bedrockagentcore`.
+ {{apiAction}}es el nombre de la acción de la API en CamelCase con la primera letra en minúscula:, not. `putItem` `PutItem` EventBridge busca el nombre exactamente como lo escribiste en su índice de acciones, que está en CamelCase, por lo que es rechazado `CreateSubscriber` con el mensaje La API no `PutItem` PutItem es válida para * el servicio dynamodb. * El mismo mensaje significa que la acción no existe para ese servicio.

Por ejemplo, `arn:aws:events:::aws-sdk:dynamodb:putItem` invoca DynamoDB e `arn:aws:events:::aws-sdk:sns:publish` invoca `PutItem` Amazon SNS. `Publish`

## Acciones que no son compatibles
<a name="eb-custom-bus-universal-targets-unsupported"></a>

Hay dos tipos de acciones que no pueden ser el objetivo de un suscriptor y las `CreateSubscriber` rechaza con un mensaje que dice que la API o todo el servicio no son compatibles.
+ Acciones que leen en lugar de cambiar de estado, como aquellas cuyos nombres comienzan por `get``list`, o`describe`. Un evento contiene algo que ocurrió, por lo que una acción objetivo debe cambiar de estado. EventBridge mantiene una lista de los nombres de las acciones y servicios bloqueados y puede agregarlos, por ejemplo, cuando una acción no se comporta como debería comportarse un objetivo, por lo que una acción que se ha aceptado una vez no está garantizada para siempre; trate el mensaje en el momento de la creación como la autoridad.
+ Las acciones de EventBridge publicación, y`eventbridge:putEvents`. `eventbridge:putPartnerEvents` Para enviar eventos a otro bus de eventos, defina el ARN del bus como`TargetArn`; tanto Custom Event Bus como Custom Event Bus - Classic se admiten como objetivos por derecho propio. Consulte [Objetivo del autobús del evento: autobús a autobús](eb-custom-bus-target-bus.md).

## Parameters
<a name="eb-custom-bus-universal-targets-parameters"></a>

Se requiere `InvokeConfiguration.UniversalTargetParameters` un objetivo universal. `CreateSubscriber`rechaza a un suscriptor que lo omite o que proporciona un bloque de parámetros diferente, como`SqsParameters`. El mensaje dice que `UniversalTargetParameters` se espera. Da forma a la solicitud`Input`; un suscriptor de destino universal no utiliza la del suscriptor`Transformer`, así que introduce cualquier transformación de JSonata. `Input`

`Input` (obligatorio)  
La solicitud de API, como cadena JSON o como expresión JSonata incluida, que produce la solicitud. `{% %}` Utilice los nombres de los miembros de la propia referencia de la API de destino; en el caso de Amazon SQS, es `SendMessage` decir y. `QueueUrl` `MessageBody` Hasta 262.144 caracteres.  
Al crear el suscriptor, `Input` se comprueba que un JSON fijo coincide con los campos que requiere la API, y el campo que falta se rechaza por su nombre. Solo `Input` se comprueba la sintaxis de un JSonata, ya que su resultado depende del evento, por lo que, en el momento de la entrega, aparece una solicitud que la API de destino rechaza.

`InvocationTimeoutSeconds`  
Cuánto tiempo EventBridge espera una llamada a la API, de 1 a 30 segundos. El valor predeterminado es 30. Debe ser un entero literal; aquí no se aceptan expresiones JSonata.

El rol de entrega en `RoleArn` necesita la acción de IAM para la API que invoques, por ejemplo`dynamodb:PutItem`, y está `sqs:SendMessage` en la cola de correo muerto. Para ver la política de confianza del rol y el resto de sus permisos, consulte. [Control de acceso para el bus de eventos personalizado](eb-custom-bus-access.md)

## El procesamiento por lotes y la matriz `$events`
<a name="eb-custom-bus-universal-targets-batching"></a>

EventBridge realiza una llamada a la API por lote, no una por evento. `BatchConfiguration`establece el lote: `MaxBatchSize` de 1 a 500 y `MaxBatchWindowInSeconds` de 0 a 300. Un lote se cierra cuando alcanza el tamaño o cuando transcurre la ventana, lo que ocurra primero.

En un JSonata`Input`, `$events` es el lote: una matriz de los eventos que contiene. Con un tamaño de lote de 1, se `$events.Data.orderId` obtiene el valor de un evento. En el caso de un lote más grande, direccione la matriz de forma explícita (por ejemplo`$join`, con `$map` y) o la expresión generará una matriz en la que la API espera una cadena y se produce un error en la entrega.

`MaxBatchSize`Establézcalo en 1 y en 0 `MaxBatchWindowInSeconds` para realizar una llamada a la API para cada evento. Hágalo siempre que el JSON `Input` sea fijo, ya que una solicitud fija es idéntica para todos los eventos del lote y el lote produce una sola llamada.

## Ejemplo: un elemento de DynamoDB por evento
<a name="eb-custom-bus-universal-targets-example"></a>

El siguiente suscriptor escribe un elemento en una tabla de DynamoDB para cada evento publicado con `PutRawEvents` y toma la clave de partición del campo del evento. `orderId` Las necesidades del rol de entrega están `dynamodb:PutItem` sobre la mesa.

```
aws eventsv2 create-subscriber \
    --name orders-to-dynamodb \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --invoke-configuration '{
        "TargetArn": "arn:aws:events:::aws-sdk:dynamodb:putItem",
        "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole",
        "UniversalTargetParameters": {
            "Input": "{% { \"TableName\": \"orders\", \"Item\": { \"pk\": { \"S\": $events.Data.orderId }, \"total\": { \"N\": $string($events.Data.total) } } } %}"
        }
    }' \
    --batch-configuration MaxBatchSize=1,MaxBatchWindowInSeconds=0 \
    --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:orders-to-dynamodb-dlq" }'
```

Para un evento publicado con`PutEvents`, los mismos campos están en`detail`:`$events.Data.detail.orderId`. Consulte [Estructura del evento: datos, metadatos y metadatos del sistema](eb-custom-bus-addressing.md).

## Cuando falla la llamada a la API
<a name="eb-custom-bus-universal-targets-failures"></a>

Al crear el suscriptor, EventBridge comprueba la forma del ARN, que la acción existe y no está bloqueada, que un valor fijo `Input` contiene los campos obligatorios de la acción y, en el caso de un JSonata`Input`, que la expresión se analiza. No comprueba que el recurso mencionado en la solicitud exista ni que el rol de entrega pueda invocar la acción. Estos errores se producen en el momento de la entrega y cada error de entrega se vuelve a intentar desde el suscriptor (de forma predeterminada`RetryPolicy`, hasta 5 intentos en 300 segundos). Cuando se alcanza un límite, EventBridge escribe un registro en la cola de mensajes no enviados cuyo `errorCode` nombre sea el último error. Los códigos que un objetivo universal produce con mayor frecuencia:
+ `CUSTOMER_VALIDATION`: la API de destino rechazó la solicitud, por ejemplo, falta un campo obligatorio o un valor fuera del rango. El registro contiene el propio mensaje de error de la API de destino.
+ `ACCESS_DENIED`: no EventBridge pudo asumir la función de entrega o la función no puede invocar la acción en el recurso. El registro indica cuál, en un EventBridge mensaje en el que se nombra la función o el recurso.
+ `RESOURCE_NOT_FOUND`: la tabla, el tema u otro recurso mencionado en la solicitud no existe.
+ `INPUT_TRANSFORMATION_FAILURE`: la expresión JSonata `Input` arrojó un error o no produjo ningún valor.
+ `THROTTLING`: la API de destino limitó la llamada. `REQUEST_TOO_LARGE`: la solicitud superó el límite de tamaño de la acción; es inferior. `MaxBatchSize` `EXECUTION_TIMEOUT`: la llamada no se devolvió dentro del tiempo de espera.

Para ver la lista completa de códigos de error, el mensaje que contiene cada uno y cómo reconducir, consulta. [Políticas de reintentos y colas de mensajes muertos](eb-custom-bus-retry.md) Active los registros de suscriptores para ver cada intento y la solicitud exacta enviada; consulte[Observabilidad del bus de eventos personalizado: métricas, registros y CloudTrail](eb-custom-bus-observability.md).