

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.

# Tipos de contenido compatibles: JSON, Avro, Protobuf y bytes sin procesar
<a name="eb-custom-bus-open-formats"></a>

`PutRawEvents`acepta cualquier byte. Cada entrada `SystemMetadata.ContentType` indica EventBridge qué son los bytes y ese valor decide si EventBridge deserializa la carga útil antes de filtrar y entregar el evento. En el caso de Avro y Protobuf, EventBridge deserializa la carga útil comparándola con un registro de esquema que se indica en la solicitud, de modo que los suscriptores filtran, transforman y reciben el evento como JSON. En el caso de los bytes opacos, entrega la carga útil intacta. EventBridge


| `ContentType` | ¿Qué EventBridge hace con la carga útil | Schema Registry | 
| --- | --- | --- | 
| application/json | Filtra y transforma el contenido de JSON | No se utiliza | 
| application/avro | Deserializa el binario de Avro en JSON y, a continuación, filtra y transforma en ese JSON | Obligatorio | 
| application/protobuf | Deserializa el binario de Protobuf en JSON y, a continuación, filtra y transforma en ese JSON | Obligatorio | 
| application/octet-stream | No deserializa ni inspecciona la carga útil. Entrega los bytes tal como se enviaron | No se utiliza | 

## ¿Cómo EventBridge deserializa una carga útil
<a name="eb-custom-bus-open-formats-how"></a>

Cuando el valor de una entrada `ContentType` es `application/avro` o`application/protobuf`, EventBridge realiza los siguientes pasos para esa entrada.

1. EventBridge lee el identificador de esquema que el serializador del registro escribió en los bytes de la carga útil.

1. EventBridge obtiene el esquema correspondiente del registro en el que has nombrado y deserializa la `SchemaRegistryConfiguration.RegistryUri` carga útil en JSON. Si no se puede encontrar o leer el esquema, o no se puede deserializar la carga útil con respecto a él, la entrada falla y produce un error por entrada y las demás entradas de la solicitud no se ven afectadas.

1. Si un suscriptor define filtros, los EventBridge evalúa comparándolos con el JSON deserializado.

1. EventBridge aplica la transformación del suscriptor al JSON deserializado y lo entrega al destino.

Usted asigna un nombre al registro en cada `PutRawEvents` solicitud, en. `SchemaRegistryConfiguration.RegistryUri` La configuración pertenece a la solicitud, no al bus, y la EventBridge ignora en el caso de las entradas JSON de la misma solicitud. EventBridge lee el registro con las credenciales de la persona que llama, por lo que la identidad que publica necesita acceso de lectura al registro.

Tras la deserialización, el evento se comporta como cualquier evento JSON con el que se haya publicado. `PutRawEvents` Un filtro que hace `DATA` coincidir los campos del registro deserializado según sus nombres de esquema, un transformador JSonata los direcciona y un destino recibe JSON. `$events.Data` EventBridge también establece tres claves en la entregada. `SystemMetadata`
+ `aws:SchemaId`: el identificador del esquema con el que se EventBridge deserializa; un UUID para AWS Glue y un entero para Confluent.
+ `aws:RegistryType`: el registro que decodificó el evento, o. `Glue` `Confluent` Los eventos publicados con `PutEvents` nunca lo llevan.
+ `ContentType`: el tipo de contenido de la entrada publicada, por ejemplo`application/avro`.

## Elegir cómo EventBridge entregar tu carga
<a name="eb-custom-bus-open-formats-delivery"></a>

`ContentType`selecciona una de las dos rutas de entrega.
+ **Deserializar a JSON. ** `ContentType`Establézcalo en `application/avro` o`application/protobuf`. EventBridge deserializa la carga útil comparándola con tu registro de esquemas y los suscriptores la filtran, la `DATA` transforman con JSonata y reciben JSON. Usa esta ruta cuando quieras enrutar y remodelar eventos codificados mediante esquemas basados en el contenido.
+ **Entregue los bytes intactos. ** `ContentType`Definido en`application/octet-stream`. EventBridge no deserializa ni inspecciona la carga útil, no interviene ningún registro de esquemas y el suscriptor recibe los bytes exactos que usted envió. Usa esta ruta cuando deserialices la carga útil tú mismo en el destino, o cuando el contenido sea un formato que no se deserialice. EventBridge 

## Deserializar con el AWS Registro de esquemas de pegamento
<a name="eb-custom-bus-open-formats-glue"></a>

`RegistryUri`Establezca el ARN de registro del formulario`arn:aws:glue:{{region}}:{{account-id}}:registry/{{name}}`. Codifique la carga útil con el serializador de AWS Glue Schema Registry para su idioma antes de publicarla; el serializador incorpora la referencia del esquema que EventBridge se utiliza para resolver y deserializar el evento.

EventBridge lee el esquema como el autor de la publicación, por lo que debe conceder a la identidad de publicación acceso de lectura al registro y a sus esquemas. La siguiente política otorga el permiso mínimo, limitado a un registro.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:GetSchemaVersion",
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:registry/orders",
                "arn:aws:glue:us-east-1:111122223333:schema/orders/*"
            ]
        }
    ]
}
```

Publique los bytes codificados en el esquema con el ARN del registro de Glue en. `RegistryUri`

```
aws eventsv2 put-raw-events \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --schema-registry-configuration RegistryUri=arn:aws:glue:us-east-1:111122223333:registry/orders \
    --entries '[
        {
            "Data": "{{base64-encoded-avro-bytes}}",
            "SystemMetadata": { "ContentType": "application/avro", "EventGroupId": "order-1001" }
        }
    ]'
```

A continuación, un suscriptor filtra el registro deserializado. Si el esquema Avro tiene un campo denominado`orderId`, el siguiente filtro coincide con un orden.

```
{ "Scope": "DATA", "Pattern": "{\"orderId\":[\"1001\"]}" }
```

## Deserialización con un registro de esquemas confluentes
<a name="eb-custom-bus-open-formats-confluent"></a>

`RegistryUri`Establézcalo en la URL HTTPS del registro. Un registro HTTPS también requiere el `SchemaRegistryConfiguration.ConfluentPublicRegistryConfiguration.ConnectionArn` ARN de una EventBridge conexión que contenga la clave de API o las credenciales de OAuth del registro. La conexión debe pertenecer a la cuenta que realiza la llamada; se rechaza la conexión entre cuentas. Crea la conexión antes de la primera publicación. Codifique la carga útil con el serializador Confluent para su idioma antes de publicarla; el serializador incorpora la referencia del esquema que EventBridge se utiliza para resolver y deserializar el evento.

EventBridge lee las credenciales de registro a través de la conexión que usted nombre. Conceda a la identidad de publicación el permiso para leer las credenciales de esa conexión.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "events:RetrieveConnectionCredentials",
            "Resource": "arn:aws:events:us-east-1:111122223333:connection/confluent-registry/*"
        },
        {
            "Effect": "Allow",
            "Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"],
            "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:events!connection/confluent-registry/*",
            "Condition": { "Bool": { "aws:ViaAWSService": "true" } }
        }
    ]
}
```

Si el secreto de la conexión está cifrado con una AWS KMS clave gestionada por el cliente, `kms:Decrypt` concédala también.

Publique los bytes codificados en el esquema con la URL simultánea y el ARN de la conexión.

```
aws eventsv2 put-raw-events \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --schema-registry-configuration '{
        "RegistryUri": "https://psrc-example.us-east-1.aws.confluent.cloud",
        "ConfluentPublicRegistryConfiguration": {
            "ConnectionArn": "arn:aws:events:us-east-1:111122223333:connection/confluent-registry/EXAMPLE-1234-5678-abcd"
        }
    }' \
    --entries '[
        {
            "Data": "{{base64-encoded-protobuf-bytes}}",
            "SystemMetadata": { "ContentType": "application/protobuf" }
        }
    ]'
```

### Opciones de autenticación de conexión
<a name="eb-custom-bus-open-formats-confluent-auth"></a>

Configure la conexión con el tipo de autenticación que espera el registro de Confluent. EventBridge lee solo los encabezados de autenticación que produce la conexión; nunca ve el secreto sin procesar y actualiza los tokens de OAuth automáticamente.

**Clave de API. ** Confluent Schema Registry suele utilizar la autenticación HTTP Basic con la clave de API del registro de esquemas como nombre de usuario y el secreto de API como contraseña.

```
aws events create-connection \
    --name confluent-registry \
    --authorization-type API_KEY \
    --auth-parameters '{
        "ApiKeyAuthParameters": {
            "ApiKeyName": "Authorization",
            "ApiKeyValue": "Basic {{base64(srApiKey:srApiSecret)}}"
        }
    }'
```

**Credenciales de cliente de OAuth. ** EventBridge recupera y actualiza el token. Debe incluirlo `grant_type=client_credentials` como parámetro corporal; EventBridge no lo añade automáticamente.

```
aws events create-connection \
    --name confluent-registry-oauth \
    --authorization-type OAUTH_CLIENT_CREDENTIALS \
    --auth-parameters '{
        "OAuthParameters": {
            "AuthorizationEndpoint": "https://{{idp-domain}}/oauth/token",
            "HttpMethod": "POST",
            "ClientParameters": {
                "ClientID": "{{oauth-client-id}}",
                "ClientSecret": "{{oauth-client-secret}}"
            },
            "OAuthHttpParameters": {
                "BodyParameters": [
                    { "Key": "grant_type", "Value": "client_credentials", "IsValueSecret": false }
                ]
            }
        }
    }'
```

EventBridge almacena cualquiera de las credenciales en un secreto gestionado de Secrets Manager (`events!connection/...`), que la conexión lee en tu nombre.

## Entrega bytes sin deserializarlos
<a name="eb-custom-bus-open-formats-passthrough"></a>

Para que EventBridge entregue una carga útil exactamente como se envió, defina la entrada en. `SystemMetadata.ContentType` `application/octet-stream` Se trata de un campo en cada entrada, no de un encabezado HTTP. EventBridge no deserializa ni inspecciona los bytes y no implica ningún registro de esquemas, por lo que cualquier formato funciona, incluidos Avro o Protobuf, que tú mismo deserializas en el destino. Como el contenido es opaco, ningún filtro puede igualarlo. `DATA` Dirige estos eventos con los filtros activados`METADATA`, con las teclas que hayas establecido en el `Metadata` mapa de la entrada o activadas`SYSTEM_METADATA`. Content-based la deduplicación sigue funcionando y hace un hash de los bytes exactamente como los enviaste. En un transformador, la carga útil aparece como una cadena en Base64; consulte. [Transformación de eventos con JSonata](eb-custom-bus-transform.md)

## Filtrar y transformar eventos deserializados
<a name="eb-custom-bus-open-formats-filtering"></a>

Una vez EventBridge deserializa un evento en JSON, la carga útil fluye a través de la canalización normal. Un filtro con un alcance de hace `DATA` coincidir los campos deserializados según sus nombres de esquema, y un transformador JSonata los direcciona bajo este parámetro. `$events.Data` Un evento publicado como Avro o Protobuf obtiene el mismo enrutamiento basado en el contenido y la misma remodelación por suscriptor que un evento publicado como JSON simple. Escribe patrones de filtro comparándolos con el JSON deserializado, teniendo en cuenta dos reglas de conversión.
+ **Avro ** deserializa a JSON estándar. La conversión es unidireccional: el JSON no se puede volver a convertir en un objeto Avro.
+ **Protobuf se ** deserializa a JSON con los nombres de campo definidos en tu esquema, en lugar de convertirlos en mayúsculas y minúsculas, como suelen hacer las herramientas de Protobuf. Haga coincidir los nombres de los campos del esquema.

## Deduplicación de eventos en varios formatos
<a name="eb-custom-bus-open-formats-dedup"></a>

EventBridge admite dos modos de deduplicación: uno `DeduplicationId` en la entrada ID-based, y otro basado en el contenido, en el que EventBridge calcula un SHA-256 hash del contenido del evento. En el caso de los eventos deserializados, la deduplicación basada en el contenido convierte en hash los bytes de cable originales de Avro o Protobuf, no el JSON deserializado. Dos eventos se duplican solo cuando sus cargas útiles originales son idénticas en bytes. Por lo tanto, el mismo evento lógico publicado en diferentes formatos no se deduplica: los bytes de Avro, los bytes de Protobuf y los de JSON sin procesar difieren en la red, incluso cuando se deserializan en los mismos datos. Consulte [Pedido y deduplicación de eventos en un bus de eventos personalizado](eb-custom-bus-ordering.md).

## Errores
<a name="eb-custom-bus-open-formats-errors"></a>
+ Una entrada de Avro o Protobuf publicada sin `SchemaRegistryConfiguration` errores es un error por entrada con un «de» y un mensaje que dice: `ErrorCode` `VALIDATION_ERROR` `SchemaRegistryConfiguration is required` Las demás entradas de la solicitud no se ven afectadas.
+ Si no nombra una conexión utilizable o que pertenece a otra cuenta, no se abre la entrada `VALIDATION_ERROR` y aparece un mensaje en el que se indica el nombre del registro. `ConnectionArn`
+ Un esquema que no se puede encontrar ni leer, o una carga útil que no se puede deserializar con respecto a él, falla esa entrada con. `VALIDATION_ERROR` Este error no se puede volver a intentar; corrija la solicitud o el acceso al registro de la persona que llama antes de volver a publicarlo.
+ Un registro al que no se puede acceder falla en la solicitud. `SchemaRegistryUnavailableException` En la ruta OAuth combinada, esto puede ocurrir mientras se actualiza el token de acceso al registro. Este error es transitorio; vuelve a intentar la solicitud con una opción de retroceso.

Para ver los resultados por entrada y las instrucciones de reintento en general, consulte. [Publicación de eventos en un bus de eventos personalizado](eb-custom-bus-publish.md)