

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Types de contenu pris en charge : JSON, Avro, Protobuf et octets bruts
<a name="eb-custom-bus-open-formats"></a>

`PutRawEvents`accepte tous les octets. Chaque entrée `SystemMetadata.ContentType` indique EventBridge quels sont les octets, et cette valeur détermine si la charge utile est EventBridge désérialisée avant qu'elle ne filtre et ne diffuse l'événement. Pour Avro et Protobuf, EventBridge désérialise la charge utile par rapport à un registre de schémas que vous nommez sur la demande, afin que les abonnés filtrent, transforment et reçoivent l'événement au format JSON. Pour les octets opaques, EventBridge fournit la charge utile intacte.


| `ContentType` | Qu'en EventBridge est-il de la charge utile ? | Registre de schémas | 
| --- | --- | --- | 
| application/json | Filtre et transforme le contenu JSON | Non utilisé | 
| application/avro | Désérialise le binaire Avro en JSON, puis filtre et transforme ce JSON | Obligatoire | 
| application/protobuf | Désérialise le binaire Protobuf en JSON, puis filtre et transforme ce JSON | Obligatoire | 
| application/octet-stream | Ne désérialise pas et n'inspecte pas la charge utile. Fournit les octets tels qu'ils ont été envoyés | Non utilisé | 

## Comment EventBridge désérialise une charge utile
<a name="eb-custom-bus-open-formats-how"></a>

Lorsqu'une entrée `ContentType` vaut `application/avro` ou`application/protobuf`, EventBridge exécute les étapes suivantes pour cette entrée.

1. EventBridge lit l'identifiant de schéma que le sérialiseur du registre a écrit dans les octets de la charge utile.

1. EventBridge récupère le schéma correspondant dans `SchemaRegistryConfiguration.RegistryUri` le registre que vous nommez et désérialise la charge utile au format JSON. Si le schéma est introuvable ou lu, ou si la charge utile ne peut pas être désérialisée par rapport à celui-ci, l'entrée échoue avec une erreur par entrée et les autres entrées de la demande ne sont pas affectées.

1. Si un abonné définit des filtres, les EventBridge évalue par rapport au JSON désérialisé.

1. EventBridge applique la transformation de l'abonné au JSON désérialisé et transmet le JSON à la cible.

Vous nommez le registre sur chaque `PutRawEvents` demande, en`SchemaRegistryConfiguration.RegistryUri`. Le paramètre appartient à la demande, pas au bus, et l' EventBridge ignore pour les entrées JSON de la même demande. EventBridge lit le registre avec les informations d'identification de l'appelant, de sorte que l'identité qui publie nécessite un accès en lecture au registre.

Après la désérialisation, l'événement se comporte comme n'importe quel événement JSON publié avec. `PutRawEvents` Un filtre dont l'étendue comprend les champs de `DATA` correspondance de l'enregistrement désérialisé en fonction de leur nom de schéma, un transformateur JSonata les adresse ci-dessous et une cible reçoit `$events.Data` du JSON. EventBridge intègre également trois clés dans la livraison`SystemMetadata`.
+ `aws:SchemaId`: l'identifiant du schéma EventBridge désérialisé avec ; un UUID pour AWS Glue, un entier pour Confluent.
+ `aws:RegistryType`: le registre qui a décodé l'événement, `Glue` ou`Confluent`. Événements publiés avec `PutEvents` Never Carry it.
+ `ContentType`: le type de contenu de l'entrée publiée, par exemple`application/avro`.

## Choisir le mode de EventBridge livraison de votre charge utile
<a name="eb-custom-bus-open-formats-delivery"></a>

`ContentType`sélectionne l'un des deux modes de livraison.
+ **Désérialisez au format JSON. ** `ContentType`Réglez sur `application/avro` ou`application/protobuf`. EventBridge désérialise la charge utile par rapport à votre registre de schémas, et les abonnés filtrent`DATA`, transforment avec JSonata et reçoivent du JSON. Utilisez ce chemin lorsque vous souhaitez un routage basé sur le contenu et un remodelage des événements codés selon le schéma.
+ **Fournissez des octets intacts. ** Réglez `ContentType` sur`application/octet-stream`. EventBridge ne désérialise pas et n'inspecte pas la charge utile, aucun registre de schéma n'est impliqué et l'abonné reçoit exactement les octets que vous avez envoyés. Utilisez ce chemin lorsque vous désérialisez vous-même la charge utile sur la cible, ou lorsque le contenu est un format qui ne se désérialise EventBridge pas.

## Désérialisation avec le AWS Registre de schémas Glue
<a name="eb-custom-bus-open-formats-glue"></a>

Définissez `RegistryUri` l'ARN du registre, du formulaire`arn:aws:glue:{{region}}:{{account-id}}:registry/{{name}}`. Encodez la charge utile avec le sérialiseur AWS Glue Schema Registry pour votre langue avant de publier ; le sérialiseur intègre la référence de schéma EventBridge utilisée pour résoudre et désérialiser l'événement.

EventBridge lit le schéma en tant qu'appelant de publication, accordez donc à l'identité de publication un accès en lecture au registre et à ses schémas. La politique suivante accorde l'autorisation minimale, limitée à un registre.

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

Publiez les octets codés selon le schéma avec l'ARN du registre Glue dans. `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" }
        }
    ]'
```

Un abonné filtre ensuite l'enregistrement désérialisé. Si le schéma Avro comporte un champ nommé`orderId`, le filtre suivant correspond à un ordre.

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

## Désérialisation à l'aide d'un registre de schémas Confluent
<a name="eb-custom-bus-open-formats-confluent"></a>

Définissez `RegistryUri` sur l'URL HTTPS du registre. Un registre HTTPS nécessite `SchemaRegistryConfiguration.ConfluentPublicRegistryConfiguration.ConnectionArn` également l'ARN d'une EventBridge connexion contenant la clé API du registre ou les informations d'identification OAuth. La connexion doit appartenir au compte appelant ; une connexion entre comptes est rejetée. Créez la connexion avant la première publication. Encodez la charge utile avec le sérialiseur Confluent pour votre langue avant de publier ; le sérialiseur intègre la référence de schéma utilisée pour résoudre et désérialiser l'événement. EventBridge 

EventBridge lit les informations d'identification du registre via la connexion que vous nommez. Accordez à l'identité de publication l'autorisation de lire les informations d'identification de cette connexion.

```
{
    "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 le secret de connexion est chiffré à l'aide d'une AWS KMS clé gérée par le client, `kms:Decrypt` accordez également cette clé.

Publiez les octets codés selon le schéma avec l'URL Confluent et l'ARN de connexion.

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

### Options d'authentification de connexion
<a name="eb-custom-bus-open-formats-confluent-auth"></a>

Configurez la connexion avec le type d'authentification attendu par le registre Confluent. EventBridge lit uniquement les en-têtes d'authentification produits par la connexion ; il ne voit jamais le secret brut et actualise automatiquement les jetons OAuth.

**Clé API. ** Confluent Schema Registry utilise généralement l'authentification HTTP Basic avec la clé API du registre de schémas comme nom d'utilisateur et le secret API comme mot de passe.

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

**Informations d'identification du client OAuth. ** EventBridge récupère et actualise le jeton. Vous devez l'inclure `grant_type=client_credentials` en tant que paramètre corporel ; EventBridge ne l'ajoute pas pour vous.

```
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 stocke l'une ou l'autre des informations d'identification dans un secret géré de Secrets Manager (`events!connection/...`), que la connexion lit en votre nom.

## Livraison d'octets sans désérialisation
<a name="eb-custom-bus-open-formats-passthrough"></a>

Pour que la charge utile soit EventBridge livrée exactement telle qu'elle a été envoyée, définissez l'entrée `SystemMetadata.ContentType` sur`application/octet-stream`. Il s'agit d'un champ dans chaque entrée, et non d'un en-tête HTTP. EventBridge ne désérialise pas et n'inspecte pas les octets, et aucun registre de schéma n'est impliqué, donc tous les formats fonctionnent, y compris Avro ou Protobuf que vous désérialisez vous-même sur la cible. Le contenu étant opaque, aucun `DATA` filtre ne peut y correspondre. Organisez ces événements en activant les filtres`METADATA`, en utilisant les touches que vous avez définies sur la `Metadata` carte de l'entrée, ou en activant cette option`SYSTEM_METADATA`. Content-based la déduplication fonctionne toujours et permet de hacher les octets exactement comme vous les avez envoyés. Dans un transformateur, la charge utile apparaît sous la forme d'une chaîne Base64 ; voir. [Transformer les événements avec JSonata](eb-custom-bus-transform.md)

## Filtrer et transformer les événements désérialisés
<a name="eb-custom-bus-open-formats-filtering"></a>

Une fois qu'un événement a été EventBridge désérialisé au format JSON, la charge utile passe par le pipeline normal. Un filtre dont la portée `DATA` correspond aux champs désérialisés par leur nom de schéma, et un transformateur JSonata les adresse ci-dessous. `$events.Data` Un événement publié au format Avro ou Protobuf bénéficie du même routage basé sur le contenu et du même remodelage par abonné qu'un événement publié au format JSON simple. Écrivez des modèles de filtre par rapport au JSON désérialisé, en gardant à l'esprit deux règles de conversion.
+ **Avro ** désérialise au format JSON standard. La conversion est unidirectionnelle : le JSON ne peut pas être reconverti en objet Avro.
+ **Protobuf ** désérialise en JSON avec les noms de champs définis dans votre schéma, plutôt que de les convertir en camelcase comme le font généralement les outils Protobuf. Faites correspondre les noms des champs du schéma.

## Déduplication des événements dans tous les formats
<a name="eb-custom-bus-open-formats-dedup"></a>

EventBridge prend en charge deux modes de déduplication : ID-based, où vous fournissez un `DeduplicationId` sur l'entrée, et basé sur le contenu, où EventBridge calcule un SHA-256 hachage du contenu de l'événement. Pour les événements désérialisés, la déduplication basée sur le contenu permet de hacher les octets filaires Avro ou Protobuf d'origine, et non le JSON désérialisé. Deux événements sont dupliqués uniquement lorsque leurs charges utiles d'origine sont identiques au même octet. Le même événement logique publié dans différents formats n'est donc pas dédupliqué : les octets Avro, les octets Protobuf et le JSON brut diffèrent sur le fil, même lorsqu'ils sont désérialisés avec les mêmes données. Consultez [Commander et dédupliquer des événements sur un bus d'événements personnalisé](eb-custom-bus-ordering.md).

## Erreurs
<a name="eb-custom-bus-open-formats-errors"></a>
+ Une entrée Avro ou Protobuf publiée sans `SchemaRegistryConfiguration` échoue en tant qu'erreur par entrée avec la mention « `ErrorCode` of » `VALIDATION_ERROR` et un message indiquant. `SchemaRegistryConfiguration is required` Les autres entrées de la demande ne sont pas affectées.
+ Une connexion `ConnectionArn` qui ne nomme pas une connexion utilisable, ou qui appartient à un autre compte, échoue à saisir `VALIDATION_ERROR` et à envoyer un message indiquant le nom du registre.
+ Un schéma qui ne peut être trouvé ou lu, ou une charge utile qui ne peut pas être désérialisée par rapport à celui-ci, échoue avec cette entrée. `VALIDATION_ERROR` Cette erreur n'est pas réessayable ; corrigez la demande ou l'accès au registre de l'appelant avant de republier.
+ Un registre qui n'est pas joignable échoue à la demande`SchemaRegistryUnavailableException`. Sur le chemin Confluent OAuth, cela peut se produire lors de l'actualisation du jeton d'accès au registre. Cette erreur est passagère ; réessayez la demande avec backoff.

Pour les résultats par entrée et les instructions générales relatives aux nouvelles tentatives, voir. [Publication d'événements dans un bus d'événements personnalisé](eb-custom-bus-publish.md)