

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tipos de conteúdo compatíveis: JSON, Avro, Protobuf e bytes brutos
<a name="eb-custom-bus-open-formats"></a>

`PutRawEvents`aceita qualquer byte. Cada entrada `SystemMetadata.ContentType` informa EventBridge quais são os bytes, e esse valor decide se EventBridge desserializa a carga antes de filtrar e entregar o evento. Para Avro e Protobuf, EventBridge desserializa a carga em relação a um registro de esquema que você nomeia na solicitação, para que os assinantes filtrem, transformem e recebam o evento como JSON. Para bytes opacos, EventBridge entrega a carga útil intocada.


| `ContentType` | O que EventBridge acontece com a carga útil | Registro de esquemas | 
| --- | --- | --- | 
| application/json | Filtra e transforma o conteúdo JSON | Não usado | 
| application/avro | Desserializa o binário Avro para JSON, depois filtra e transforma nesse JSON | Obrigatório | 
| application/protobuf | Desserializa o binário Protobuf para JSON, depois filtra e transforma nesse JSON | Obrigatório | 
| application/octet-stream | Não desserializa nem inspeciona a carga. Entrega os bytes conforme enviados | Não usado | 

## Como EventBridge desserializa uma carga
<a name="eb-custom-bus-open-formats-how"></a>

Quando uma entrada `ContentType` é `application/avro` ou`application/protobuf`, EventBridge executa as seguintes etapas para essa entrada.

1. EventBridge lê o identificador do esquema que o serializador do registro escreveu nos bytes da carga útil.

1. EventBridge busca o esquema correspondente do registro que você nomeou e desserializa a carga para JSON. `SchemaRegistryConfiguration.RegistryUri` Se o esquema não puder ser encontrado ou lido, ou se a carga não puder ser desserializada em relação a ele, a entrada falhará com um erro por entrada e as outras entradas na solicitação não serão afetadas.

1. Se um assinante definir filtros, os EventBridge avaliará em relação ao JSON desserializado.

1. EventBridge aplica a transformação do assinante ao JSON desserializado e entrega o JSON ao destino.

Você nomeia o registro em cada `PutRawEvents` solicitação, em`SchemaRegistryConfiguration.RegistryUri`. A configuração pertence à solicitação, não ao barramento, e a EventBridge ignora para entradas JSON na mesma solicitação. EventBridge lê o registro com as credenciais do chamador, portanto, a identidade que publica precisa de acesso de leitura ao registro.

Depois de desserializar, o evento se comporta como qualquer evento JSON publicado com. `PutRawEvents` Um filtro com um escopo de `DATA` corresponde aos campos do registro desserializado por seus nomes de esquema, um transformador JSOnata os aborda sob `$events.Data` e um destino recebe JSON. EventBridge também define três chaves na entrega`SystemMetadata`.
+ `aws:SchemaId`: o identificador do esquema EventBridge desserializado com; um UUID para AWS Glue, um inteiro para Confluent.
+ `aws:RegistryType`: o registro que decodificou o evento, `Glue` ou`Confluent`. Eventos publicados com `PutEvents` never carry it.
+ `ContentType`: o tipo de conteúdo da entrada publicada, por exemplo`application/avro`.

## Escolhendo como EventBridge entrega sua carga
<a name="eb-custom-bus-open-formats-delivery"></a>

`ContentType`seleciona um dos dois caminhos de entrega.
+ **Desserialize para JSON. ** `ContentType`Definido como `application/avro` ou`application/protobuf`. EventBridge desserializa a carga útil em relação ao seu registro de esquema e os assinantes filtram`DATA`, transformam com JSOnata e recebem JSON. Use esse caminho quando quiser roteamento e remodelação baseados em conteúdo de eventos codificados por esquema.
+ **Entregue bytes intocados. ** `ContentType`Definido como`application/octet-stream`. EventBridge não desserializa nem inspeciona a carga, nenhum registro de esquema está envolvido e o assinante recebe os bytes exatos que você enviou. Use esse caminho quando você mesmo desserializa a carga no destino ou quando o conteúdo é um formato EventBridge que não desserializa.

## Desserializando com o AWS Registro do esquema Glue
<a name="eb-custom-bus-open-formats-glue"></a>

`RegistryUri`Defina para o registro ARN, do formulário`arn:aws:glue:{{region}}:{{account-id}}:registry/{{name}}`. Codifique a carga com o serializador AWS Glue Schema Registry para seu idioma antes de publicar; o serializador incorpora a referência de esquema usada para resolver e desserializar o evento. EventBridge 

EventBridge lê o esquema como o chamador da publicação, portanto, conceda à identidade de publicação acesso de leitura ao registro e seus esquemas. A política a seguir concede a permissão mínima, com escopo para um 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 os bytes codificados pelo esquema com o ARN do registro Glue em. `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" }
        }
    ]'
```

Em seguida, um assinante filtra o registro desserializado. Se o esquema Avro tiver um campo chamado`orderId`, o filtro a seguir corresponderá a uma ordem.

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

## Desserializando com um Confluent Schema Registry
<a name="eb-custom-bus-open-formats-confluent"></a>

`RegistryUri`Defina como o URL HTTPS do registro. Um registro HTTPS também exige `SchemaRegistryConfiguration.ConfluentPublicRegistryConfiguration.ConnectionArn` o ARN de uma EventBridge conexão que contenha a chave de API do registro ou as credenciais do OAuth. A conexão deve pertencer à conta chamadora; uma conexão entre contas é rejeitada. Crie a conexão antes da primeira publicação. Codifique a carga com o serializador Confluent para seu idioma antes de publicar; o serializador incorpora a referência de esquema usada para resolver e desserializar o evento. EventBridge 

EventBridge lê as credenciais do registro por meio da conexão que você nomeou. Conceda permissão à identidade de publicação para ler as credenciais dessa conexão.

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

Se o segredo da conexão for criptografado com uma AWS KMS chave gerenciada pelo cliente, `kms:Decrypt` conceda também essa chave.

Publique os bytes codificados pelo esquema com o URL do Confluent e o ARN da conexão.

```
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" }
        }
    ]'
```

### Opções de autenticação de conexão
<a name="eb-custom-bus-open-formats-confluent-auth"></a>

Configure a conexão com o tipo de autenticação que o registro do Confluent espera. EventBridge lê somente os cabeçalhos de autenticação que a conexão produz; ela nunca vê o segredo bruto e atualiza os tokens OAuth automaticamente.

**Chave de API. ** O Confluent Schema Registry normalmente usa a autenticação HTTP Basic com a chave da API do registro do esquema como nome de usuário e o segredo da API como senha.

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

**Credenciais do cliente OAuth. ** EventBridge busca e atualiza o token. Você deve incluir `grant_type=client_credentials` como parâmetro de corpo; EventBridge não o adiciona para você.

```
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 armazena qualquer uma das credenciais em um segredo gerenciado do Secrets Manager (`events!connection/...`), que a conexão lê em seu nome.

## Entregando bytes sem desserializar
<a name="eb-custom-bus-open-formats-passthrough"></a>

Para EventBridge entregar uma carga exatamente como foi enviada, defina a entrada como. `SystemMetadata.ContentType` `application/octet-stream` Esse é um campo em cada entrada, não um cabeçalho HTTP. EventBridge não desserializa nem inspeciona os bytes, e nenhum registro de esquema está envolvido; portanto, qualquer formato funciona, incluindo Avro ou Protobuf, que você mesmo desserializa no destino. Como o conteúdo é opaco, um `DATA` filtro não pode corresponder a ele. Roteie esses eventos com filtros ativados`METADATA`, usando as teclas definidas no `Metadata` mapa da entrada ou ativadas`SYSTEM_METADATA`. Content-based a desduplicação ainda funciona e faz o hash dos bytes exatamente como você os enviou. Em um transformador, a carga aparece como uma string Base64; consulte. [Transformando eventos com JSonata](eb-custom-bus-transform.md)

## Filtrando e transformando eventos desserializados
<a name="eb-custom-bus-open-formats-filtering"></a>

Depois de EventBridge desserializar um evento para JSON, a carga útil flui pelo pipeline normal. Um filtro com um escopo de `DATA` combina os campos desserializados por seus nomes de esquema, e um transformador JSOnata os aborda em. `$events.Data` Um evento publicado como Avro ou Protobuf obtém o mesmo roteamento baseado em conteúdo e remodelação por assinante de um evento publicado como JSON simples. Escreva padrões de filtro no JSON desserializado, tendo em mente duas regras de conversão.
+ **O Avro ** desserializa para o JSON padrão. A conversão é unidirecional: o JSON não pode ser convertido novamente em um objeto Avro.
+ **O Protobuf ** desserializa para JSON com os nomes de campo definidos em seu esquema, em vez de convertê-los em camel case, como as ferramentas Protobuf normalmente fazem. Corresponde aos nomes dos campos do esquema.

## Desduplicação de eventos em vários formatos
<a name="eb-custom-bus-open-formats-dedup"></a>

EventBridge oferece suporte a dois modos de desduplicação: ID-based, em que você fornece um `DeduplicationId` na entrada e baseado em conteúdo, em que EventBridge calcula um SHA-256 hash do conteúdo do evento. Para eventos desserializados, a desduplicação baseada em conteúdo faz o hash dos bytes de transferência originais do Avro ou do Protobuf, não do JSON desserializado. Dois eventos são duplicados somente quando suas cargas originais são idênticas em bytes. Portanto, o mesmo evento lógico publicado em formatos diferentes não é desduplicado: os bytes Avro, os bytes do Protobuf e o JSON bruto diferem na rede, mesmo quando são desserializados para os mesmos dados. Consulte [Ordenando e desduplicando eventos em um barramento de eventos personalizado](eb-custom-bus-ordering.md).

## Erros
<a name="eb-custom-bus-open-formats-errors"></a>
+ Uma entrada Avro ou Protobuf publicada sem `SchemaRegistryConfiguration` falhas como um erro por entrada com um `ErrorCode` of `VALIDATION_ERROR` e uma mensagem informando. `SchemaRegistryConfiguration is required` As outras entradas na solicitação não são afetadas.
+ Uma pessoa `ConnectionArn` que não nomeia uma conexão utilizável ou que pertence a outra conta falha na entrada com `VALIDATION_ERROR` uma mensagem que nomeia o registro.
+ Um esquema que não pode ser encontrado ou lido, ou uma carga útil que não pode ser desserializada contra ele, falha nessa entrada com. `VALIDATION_ERROR` Esse erro não pode ser repetido; corrija a solicitação ou o acesso ao registro do chamador antes de republicá-lo.
+ Um registro que não pode ser acessado falha na solicitação com`SchemaRegistryUnavailableException`. No caminho OAuth do Confluent, isso pode ocorrer enquanto o token de acesso ao registro está sendo atualizado. Esse erro é transitório; repita a solicitação com backoff.

Para obter resultados por entrada e orientações gerais sobre novas tentativas, consulte. [Publicação de eventos em um ônibus de eventos personalizado](eb-custom-bus-publish.md)