

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.

# Installation de SerDe bibliothèques
<a name="schema-registry-gs-serde"></a>

Les SerDe bibliothèques fournissent un cadre pour la sérialisation et la désérialisation des données. 

Vous allez installer le sérialiseur open source pour vos applications produisant des données (collectivement les « sérialiseurs »). Le sérialiseur gère la sérialisation, la compression et l'interaction avec le registre de schémas. Le sérialiseur extrait automatiquement le schéma d'un enregistrement en cours d'écriture vers une destination compatible avec le registre de schémas, telle qu'Amazon MSK. De même, vous allez installer le désérialiseur open source sur vos applications consommant des données.

# Implémentation Java
<a name="schema-registry-gs-serde-java"></a>

**Note**  
Prérequis : avant d'effectuer les étapes suivantes, vous devez avoir un Amazon Managed Streaming pour Apache Kafka (Amazon MSK) ou un cluster Apache Kafka en cours d'exécution. Vos applications producteur et consommateur doivent utiliser Java 8 ou une version supérieure.

Pour installer les bibliothèques sur les applications producteur et consommateur :

1. Dans les fichiers pom.xml des applications producteur et consommateur, ajoutez cette dépendance via le code ci-dessous :

   ```
   <dependency>
       <groupId>software.amazon.glue</groupId>
       <artifactId>schema-registry-serde</artifactId>
       <version>1.1.5</version>
   </dependency>
   ```

   Vous pouvez également cloner le [référentiel Github du registre de schémas AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

1. Configurez vos applications producteur avec les propriétés requises suivantes :

   ```
   props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // Can replace StringSerializer.class.getName()) with any other key serializer that you may use
   props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaSerializer.class.getName());
   props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");
   properties.put(AWSSchemaRegistryConstants.DATA_FORMAT, "JSON"); // OR "AVRO"
   ```

   S'il n'existe aucun schéma existant, l'enregistrement automatique doit être activé (étape suivante). Si vous avez un schéma que vous souhaitez appliquer, remplacez « my-schema » par le nom de votre schéma. La valeur « registry-name » doit également être fournie si l'enregistrement automatique du schéma est désactivé. Si le schéma est créé sous la valeur « default-registry », le nom du registre peut être omis.

1. (Facultatif) Définissez l'une de ces propriétés de producteur facultatives. Pour une description détaillée des propriétés, consultez [le ReadMe fichier](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md).

   ```
   props.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true"); // If not passed, uses "false"
   props.put(AWSSchemaRegistryConstants.SCHEMA_NAME, "my-schema"); // If not passed, uses transport name (topic name in case of Kafka, or stream name in case of Kinesis Data Streams)
   props.put(AWSSchemaRegistryConstants.REGISTRY_NAME, "my-registry"); // If not passed, uses "default-registry"
   props.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000 (24 Hours)
   props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200
   props.put(AWSSchemaRegistryConstants.COMPATIBILITY_SETTING, Compatibility.FULL); // Pass a compatibility mode. If not passed, uses Compatibility.BACKWARD
   props.put(AWSSchemaRegistryConstants.DESCRIPTION, "This registry is used for several purposes."); // If not passed, constructs a description
   props.put(AWSSchemaRegistryConstants.COMPRESSION_TYPE, AWSSchemaRegistryConstants.COMPRESSION.ZLIB); // If not passed, records are sent uncompressed
   ```

   L'enregistrement automatique enregistre la version du schéma sous le registre par défaut (« default-registry »). Si une valeur `SCHEMA_NAME` n'est pas spécifiée à l'étape précédente, le nom de la rubrique est alors déduit comme étant `SCHEMA_NAME`. 

   Pour de plus amples informations sur les modes de compatibilité, veuillez consulter [Gestion des versions et compatibilité des schémas](schema-registry.md#schema-registry-compatibility).

1. Configurez vos applications consommateur avec les propriétés requises suivantes :

   ```
   props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
   props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaDeserializer.class.getName());
   props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2"); // Pass an Région AWS
   props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName()); // Only required for AVRO data format
   ```

1. (Facultatif) Définissez ces propriétés d'application consommateur facultatives. Pour une description détaillée des propriétés, consultez [le ReadMe fichier](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md).

   ```
   properties.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000
   props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200
   props.put(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, "com.amazonaws.services.schemaregistry.deserializers.external.ThirdPartyDeserializer"); // For migration fall back scenario
   ```

# Implémentation en C\$1
<a name="schema-registry-gs-serde-csharp"></a>

**Note**  
Prérequis : avant d'effectuer les étapes suivantes, vous devez avoir un Amazon Managed Streaming pour Apache Kafka (Amazon MSK) ou un cluster Apache Kafka en cours d'exécution. Vos producteurs et consommateurs doivent utiliser .NET 8.0 ou une version ultérieure.

## Installation
<a name="schema-registry-gs-serde-csharp-install"></a>

Pour les applications C\$1, installez le SerDe NuGet package AWS Glue Schema Registry en utilisant l'une des méthodes suivantes :

**CLI .NET :**  
Utilisez la commande suivante pour installer le package :

```
dotnet add package Aws.Glue.SchemaRegistry --version 1.0.0-<rid>
```

où `<rid>` cela pourrait être`1.0.0-linux-x64`, `1.0.0-linux-musl-x64` ou `1.0.0-linux-arm64`

**PackageReference (dans votre fichier .csproj) :**  
Ajoutez ce qui suit à votre fichier de projet :

```
<PackageReference Include="Aws.Glue.SchemaRegistry" Version="1.0.0-<rid>" />
```

où `<rid>` cela pourrait être`1.0.0-linux-x64`, `1.0.0-linux-musl-x64` ou `1.0.0-linux-arm64`

## Configuration du fichier de configuration
<a name="schema-registry-gs-serde-csharp-config"></a>

Créez un fichier de propriétés de configuration (par exemple,`gsr-config.properties`) avec les paramètres requis :

**Configuration minimale :**  
Voici un exemple de configuration minimale :

```
region=us-east-1
registry.name=default-registry
dataFormat=AVRO
schemaAutoRegistrationEnabled=true
```

## Utilisation de la bibliothèque cliente C\$1 Glue Schema pour Kafka SerDes
<a name="schema-registry-gs-serde-csharp-kafka"></a>

**Exemple d'utilisation du sérialiseur :**  
L'exemple suivant montre comment utiliser le sérialiseur :

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var protobufSerializer = new GlueSchemaRegistryKafkaSerializer(PROTOBUF_CONFIG_PATH);
var serialized = protobufSerializer.Serialize(message, message.Descriptor.FullName);
// send serialized bytes to Kafka using producer.Produce(serialized)
```

**Exemple d'utilisation du désérialiseur :**  
L'exemple suivant montre comment utiliser le désérialiseur :

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var dataConfig = new GlueSchemaRegistryDataFormatConfiguration(
    new Dictionary<string, dynamic>
    {
        {
            GlueSchemaRegistryConstants.ProtobufMessageDescriptor, message.Descriptor
        }
    }
);
var protobufDeserializer = new GlueSchemaRegistryKafkaDeserializer(PROTOBUF_CONFIG_PATH, dataConfig);

// read message from Kafka using serialized = consumer.Consume()
var deserializedObject = protobufDeserializer.Deserialize(message.Descriptor.FullName, serialized);
```

## Utilisation de la bibliothèque cliente C\$1 Glue Schema avec for KafkaFlow SerDes
<a name="schema-registry-gs-serde-csharp-kafkaflow"></a>

**Exemple d'utilisation du sérialiseur :**  
L'exemple suivant montre comment configurer KafkaFlow avec le sérialiseur :

```
services.AddKafka(kafka => kafka
    .UseConsoleLog()
    .AddCluster(cluster => cluster
        .WithBrokers(new[] { "localhost:9092" })
        .AddProducer<CustomerProducer>(producer => producer
            .DefaultTopic("customer-events")
            .AddMiddlewares(m => m
                .AddSerializer<GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>>(
                    () => new GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>("config/gsr-config.properties")
                )
            )
        )
    )
);
```

**Exemple d'utilisation du désérialiseur :**  
L'exemple suivant montre comment configurer KafkaFlow avec le désérialiseur :

```
.AddConsumer(consumer => consumer
    .Topic("customer-events")
    .WithGroupId("customer-group")
    .WithBufferSize(100)
    .WithWorkersCount(10)
    .AddMiddlewares(middlewares => middlewares
        .AddDeserializer<GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>>(
            () => new GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>("config/gsr-config.properties")
        )
        .AddTypedHandlers(h => h.AddHandler<CustomerHandler>())
    )
)
```

## Propriétés facultatives du producteur
<a name="schema-registry-gs-serde-csharp-optional"></a>

Vous pouvez étendre votre fichier de configuration avec des propriétés facultatives supplémentaires :

```
# Auto-registration (if not passed, uses "false")
schemaAutoRegistrationEnabled=true

# Schema name (if not passed, uses topic name)
schema.name=my-schema

# Registry name (if not passed, uses "default-registry")
registry.name=my-registry

# Cache settings
cacheTimeToLiveMillis=86400000
cacheSize=200

# Compatibility mode (if not passed, uses BACKWARD)
compatibility=FULL

# Registry description
description=This registry is used for several purposes.

# Compression (if not passed, records are sent uncompressed)
compressionType=ZLIB
```

## Formats de données pris en charge
<a name="schema-registry-gs-serde-supported-formats"></a>

Les implémentations Java et C\$1 prennent en charge les mêmes formats de données :
+ *AVRO : format* binaire Apache Avro
+ *JSON* : format de schéma JSON
+ *PROTOBUF : format des* tampons de protocole

## Remarques
<a name="schema-registry-gs-serde-csharp-notes"></a>
+ Pour commencer à utiliser la bibliothèque, rendez-vous sur [https://www.nuget. org/packages/AWS.Colle. SchemaRegistry](https://www.nuget.org/packages/AWS.Glue.SchemaRegistry)
+ Le code source est disponible à l'adresse suivante : [https://github.com/awslabs/aws-glue-schema-registry](https://github.com/awslabs/aws-glue-schema-registry)

# Création d'un registre
<a name="schema-registry-gs3"></a>

Vous pouvez utiliser le registre par défaut ou créer autant de nouveaux registres que nécessaire à l'aide de la AWS Glue console AWS Glue APIs or.

**AWS Glue APIs**  
Vous pouvez suivre ces étapes pour effectuer cette tâche à l'aide du AWS Glue APIs.

Pour utiliser le AWS CLI registre des AWS Glue schémas APIs, assurez-vous de mettre à jour votre version AWS CLI à la plus récente.

 Pour ajouter un nouveau registre, utilisez l'API [CreateRegistry action (Python : create\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateRegistry). Spécifiez `RegistryName` comme nom du registre à créer, avec une longueur maximale de 255, contenant uniquement des lettres, des chiffres, des traits d'union, des traits de soulignement, le symbole dollar ou le dièse. 

Spécifiez une valeur `Description` comme une chaîne d’une longueur maximale de 2 048 octets, correspondant au [modèle de chaîne à plusieurs lignes d’adresse URI](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-common.html#aws-glue-api-common-_string-patterns). 

Vous pouvez également spécifier une ou plusieurs `Tags` pour votre registre, sous forme de tableau de mappage de paires clé-valeur.

```
aws glue create-registry --registry-name registryName1 --description description
```

Lorsque votre registre est créé, il se voit attribuer un Amazon Resource Name (ARN), que vous pouvez consulter dans le `RegistryArn` de la réponse de l'API. Maintenant que vous avez créé un registre, créez un ou plusieurs schémas pour ce registre.

**Console AWS Glue **  
Pour ajouter un nouveau registre dans la console AWS Glue :

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. Dans le panneau de navigation, sous **Data catalog (Catalogue de données)**, choisissez **Schema registries (Registres de schémas)**.

1. Choisissez **Add registry (Ajouter un registre)**.

1. Saisissez un **nom du registre** à donner au registre, composé de lettres, de chiffres, de traits d'union et de traits de soulignement. Ce nom ne peut pas être modifié.

1. Saisissez une **description** (facultatif) pour le registre.

1. Si vous le souhaitez, appliquez une ou plusieurs balises à votre registre. Choisissez **Add new tag (Ajouter une nouvelle balise)** et spécifiez une **clé de balise**, et éventuellement une **valeur de balise**.

1. Choisissez **Add registry (Ajouter un registre)**.

![\[Exemple de création d'un registre.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/schema_reg_create_registry.png)


Lorsque votre registre est créé, un Amazon Resource Name (ARN) lui est attribué, que vous pouvez consulter en choisissant le registre dans la liste **Schema registries (Registres de schémas)**. Maintenant que vous avez créé un registre, créez un ou plusieurs schémas pour ce registre.

# Traiter un enregistrement spécifique (JAVA POJO) pour JSON
<a name="schema-registry-gs-json-java-pojo"></a>

Vous pouvez utiliser un ancien objet Java simple (POJO) et transmettre l'objet en tant qu'enregistrement. Ceci est similaire à la notion d'enregistrement spécifique dans AVRO. Ils [mbknor-jackson-jsonschema](https://github.com/mbknor/mbknor-jackson-jsonSchema)peuvent générer un schéma JSON pour le POJO transmis. Cette bibliothèque peut également injecter des informations supplémentaires dans le schéma JSON.

La bibliothèque de registre de schémas AWS Glue utilise le champ « ClassName » injecté dans le schéma pour fournir un nom de classe entièrement classifié. Le champ « ClassName » est utilisé par le désérialiseur pour désérialiser dans un objet de cette classe.

```
 Example class :

@JsonSchemaDescription("This is a car")
@JsonSchemaTitle("Simple Car Schema")
@Builder
@AllArgsConstructor
@EqualsAndHashCode
// Fully qualified class name to be added to an additionally injected property
// called className for deserializer to determine which class to deserialize
// the bytes into
@JsonSchemaInject(
        strings = {@JsonSchemaString(path = "className",
                value = "com.amazonaws.services.schemaregistry.integrationtests.generators.Car")}
)
// List of annotations to help infer JSON Schema are defined by https://github.com/mbknor/mbknor-jackson-jsonSchema
public class Car {
    @JsonProperty(required = true)
    private String make;

    @JsonProperty(required = true)
    private String model;

    @JsonSchemaDefault("true")
    @JsonProperty
    public boolean used;

    @JsonSchemaInject(ints = {@JsonSchemaInt(path = "multipleOf", value = 1000)})
    @Max(200000)
    @JsonProperty
    private int miles;

    @Min(2000)
    @JsonProperty
    private int year;

    @JsonProperty
    private Date purchaseDate;

    @JsonProperty
    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    private Date listedDate;

    @JsonProperty
    private String[] owners;

    @JsonProperty
    private Collection<Float> serviceChecks;

    // Empty constructor is required by Jackson to deserialize bytes
    // into an Object of this class
    public Car() {}
}
```

# Création d'un schéma
<a name="schema-registry-gs4"></a>

Vous pouvez créer un schéma à l'aide de la console AWS Glue APIs ou de la AWS Glue console. 

**AWS Glue APIs**  
Vous pouvez suivre ces étapes pour effectuer cette tâche à l'aide du AWS Glue APIs.

Pour ajouter un nouveau schéma, utilisez l'API [CreateSchema action (Python : créer\$1schéma)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateSchema).

Spécifiez une structure `RegistryId` pour indiquer un registre pour le schéma. Ou, omettez la valeur `RegistryId` pour utiliser le registre par défaut.

Spécifiez une valeur `SchemaName` composée de lettres, de chiffres, de traits d'union et de traits de soulignement, ainsi qu'une valeur `DataFormat` comme **AVRO** ou **JSON**. Une fois la valeur `DataFormat` définie sur un schéma, elle n'est pas modifiable.

Spécifiez un mode `Compatibility` :
+ *Backward (Descendant) (recommandé)* — L'application consommateur peut lire à la fois la version actuelle et précédente.
+ *Backward all (Descendant tout)* — L'application consommateur peut lire les versions actuelles et toutes les versions précédentes.
+ *Forward (Ascendant)* — L'application consommateur peut lire à la fois la version actuelle et la version ultérieure.
+ *Forward all (Ascendant tout)* — L'application consommateur peut lire à la fois les versions actuelles et les versions ultérieures.
+ *Full (Complet)* — Combinaison de Forward (Ascendant) et de Backward (Descendant).
+ *Full all (Complet tout)* — Combinaison de Backward all (Descendant tout) et de Forward all (Ascendant tout).
+ *None (Aucun)* — Aucune vérification de compatibilité n'est effectuée.
+ *Disabled (Désactivé)* — Empêche toute gestion des versions pour ce schéma.

Le cas échéant, spécifiez `Tags` pour votre schéma. 

Spécifiez une valeur `SchemaDefinition` pour définir le schéma au format de données Avro, JSON ou Protobuf. Veuillez consulter les exemples.

Pour le format de données Avro :

```
aws glue create-schema --registry-id RegistryName="registryName1" --schema-name testschema --compatibility NONE --data-format AVRO --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1" --schema-name testschema --compatibility NONE --data-format AVRO  --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

Pour le format de données JSON :

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

Pour le format de données Protobuf :

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

**Console AWS Glue **  
Pour ajouter un nouveau schéma à l'aide de la console AWS Glue :

1. Connectez-vous à la console AWS de gestion et ouvrez-la à l'AWS Glueadresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. Dans le panneau de navigation, sous **Data catalog (Catalogue de données)**, choisissez **Schemas (Schémas)**.

1. Choisissez **Add schema (Ajouter un schéma)**.

1. Saisissez un **nom de schéma**, composé de lettres, de chiffres, de traits d'union, de traits de soulignement, de symboles dollar ou de dièses. Ce nom ne peut pas être modifié.

1. Cliquez sur l'onglet **Registry (Registre)** où le schéma sera stocké à partir du menu déroulant. Le registre parent ne peut pas être modifié après la création.

1. Quitter le **format de données** en tant qu'*Apache Avro* ou *JSON*. Ce format s'applique à toutes les versions de ce schéma.

1. Choisissez un **mode de compatibilité**.
   + *Backward (Descendant) (recommandé)* — Le récepteur peut lire à la fois les versions actuelles et précédentes.
   + *Backward All (Descendant tout)* — Le récepteur peut lire les versions actuelles et toutes les versions précédentes.
   + *Forward (Ascendant)* — L'expéditeur peut écrire à la fois les versions actuelles et précédentes.
   + *Forward all (Ascendant tout)* — L'expéditeur peut écrire la version actuelle et toutes les versions précédentes.
   + *Full (Complet)* — Combinaison de Forward (Ascendant) et de Backward (Descendant).
   + *Full All (Complet tout)* — Combinaison de Backward All (Descendant tout) et de Forward All (Ascendant tout).
   + *None (Aucun)* — Aucune vérification de compatibilité n'est effectuée.
   + *Disabled (Désactivé)* — Empêche toute gestion des versions pour ce schéma.

1. Saisissez une **description** facultative pour le registre de 250 caractères maximum.  
![\[Exemple de création d'un schéma.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/schema_reg_create_schema.png)

1. Si vous le souhaitez, appliquez une ou plusieurs balises à votre schéma. Choisissez **Add new tag (Ajouter une nouvelle balise)** et spécifiez une **clé de balise**, et éventuellement une **valeur de balise**.

1. Dans la case **First schema version (Première version de schéma)**, saisissez ou collez votre schéma initial.

   Pour le format Avro, voir [Utilisation du format de données Avro](#schema-registry-avro)

   Pour le format JSON, voir [Utilisation du format de données JSON](#schema-registry-json)

1. Choisissez éventuellement **Add metadata (Ajouter des métadonnées)** pour ajouter des métadonnées de version afin d'annoter ou de classer votre version de schéma.

1. Choisissez **Create schema and version (Créer un schéma et une version)**.

![\[Exemple de création d'un schéma.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/schema_reg_create_schema2.png)


Le schéma est créé et apparaît dans la liste sous **Schemas (Schémas)**.

## Utilisation du format de données Avro
<a name="schema-registry-avro"></a>

Avro fournit des services de sérialisation et d'échange de données. Avro stocke la définition des données au format JSON, ce qui la rend facile à lire et à interpréter. Les données elles-mêmes sont stockées au format binaire.

Pour plus d'informations sur la définition d'un schéma Apache Avro, veuillez consulter la [spécification d'Apache Avro](http://avro.apache.org/docs/current/spec.html).

## Utilisation du format de données JSON
<a name="schema-registry-json"></a>

Les données peuvent être sérialisées au format JSON. Le [format de schéma JSON](https://json-schema.org/) définit la norme pour le format de schéma JSON.

# Mise à jour d'un schéma ou d'un registre
<a name="schema-registry-gs5"></a>

Une fois créés, vous pouvez modifier vos schémas, vos versions de schéma ou votre registre.

## Mise à jour d'un registre
<a name="schema-registry-gs5a"></a>

Vous pouvez mettre à jour un registre à l'aide de la console AWS Glue APIs ou de la AWS Glue console. Le nom d'un registre existant ne peut pas être modifié. Vous pouvez modifier la description d'un registre.

**AWS Glue APIs**  
Pour mettre à jour un registre existant, utilisez l'API [UpdateRegistry action (Python : update\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateRegistry).

Spécifiez une structure `RegistryId` pour indiquer le registre que vous souhaitez mettre à jour. Transmettez une `Description` pour modifier la description d'un registre.

```
aws glue update-registry --description updatedDescription --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
```

**Console AWS Glue **  
Pour mettre à jour un registre à l'aide de la console AWS Glue :

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. Dans le panneau de navigation, sous **Data catalog (Catalogue de données)**, choisissez **Schema registries (Registres de schémas)**.

1. Sélectionnez un registre dans la liste des registres, en cochant sa case.

1. Dans le menu **Action**, choisissez **Edit registry (Modifier un registre)**.

# Mise à jour d'un schéma
<a name="schema-registry-gs5b"></a>

Vous pouvez mettre à jour le paramètre de description ou de compatibilité pour un schéma.

Pour mettre à jour un schéma existant, utilisez l'API [UpdateSchema action (Python : update\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateSchema).

Spécifiez une structure `SchemaId` pour indiquer le schéma que vous souhaitez mettre à jour. `VersionNumber` ou `Compatibility` doit être fourni.

Exemple de code 11 :

```
aws glue update-schema --description testDescription --schema-id SchemaName="testSchema1",RegistryName="registryName1" --schema-version-number LatestVersion=true --compatibility NONE
```

```
aws glue update-schema --description testDescription --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/testSchema1" --schema-version-number LatestVersion=true --compatibility NONE
```

# Ajout d'une version de schéma
<a name="schema-registry-gs5c"></a>

Lorsque vous ajoutez une version de schéma, vous devez comparer les versions pour vous assurer que le nouveau schéma sera accepté.

Pour ajouter une nouvelle version à un schéma existant, utilisez l'API [RegisterSchemaVersion action (Python : register\$1schema\$1version)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-RegisterSchemaVersion).

Spécifiez une structure `SchemaId` pour indiquer le schéma pour lequel vous souhaitez ajouter une version, ainsi qu'une valeur `SchemaDefinition` pour définir le schéma.

Exemple de code 12 :

```
aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaArn="arn:aws:glue:us-east-1:901234567890:schema/registryName/testschema"
```

```
aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaName="testschema",RegistryName="testregistry"
```

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. Dans le panneau de navigation, sous **Data catalog (Catalogue de données)**, choisissez **Schemas (Schémas)**.

1. Sélectionnez le schéma dans la liste des schémas, en cochant sa case.

1. Sélectionnez un ou plusieurs schémas dans la liste, en cochant les cases.

1. Dans le menu **Action**, choisissez **Register new version (Enregistrer une nouvelle version)**.

1. Dans **New version (Nouvelle version)**, saisissez ou collez votre nouveau schéma.

1. Choisissez **Compare with previous version (Comparer avec la version précédente)** pour voir les différences avec la version de schéma précédente.

1. Choisissez éventuellement **Add metadata (Ajouter des métadonnées)** pour ajouter des métadonnées de version afin d'annoter ou de classer votre version de schéma. Saisissez une **clé** et une **valeur** facultative.

1. Choisissez **Register version (Version de registre)**.

![\[Ajout d'une version de schéma.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/schema_reg_add_schema_version.png)


La version du ou des schémas s'affiche dans la liste des versions. Si la version a changé le mode de compatibilité, la version sera marquée comme point de contrôle.

## Exemple de comparaison d'une version de schéma
<a name="schema-registry-gs5c1"></a>

Lorsque vous choisissez **Compare with previous version (Comparer avec la version précédente)**, vous verrez les versions précédentes et les nouvelles versions affichées ensemble. Les informations modifiées seront mises en évidence comme suit :
+ *Jaune* : indique les informations modifiées.
+ *Vert* : indique le contenu ajouté à la dernière version.
+ *Rouge* : indique le contenu supprimé dans la dernière version.

Vous pouvez également comparer les versions antérieures.

![\[Exemple de comparaison d'une version de schéma.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/schema_reg_version_comparison.png)


# Suppression d'un schéma ou d'un registre
<a name="schema-registry-gs7"></a>

La suppression d'un schéma, d'une version de schéma ou d'un registre est une action permanente qui ne peut pas être annulée.

## Suppression d'un schéma
<a name="schema-registry-gs7a"></a>

Vous souhaiterez peut-être supprimer un schéma lorsqu'il ne sera plus utilisé dans un registre, à l'aide de l' AWS Management Console API ou de l'[DeleteSchema action (Python : supprimer\$1schéma)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema)API.

La suppression d'un ou plusieurs schémas est une action permanente qui ne peut pas être annulée. Assurez-vous que le ou les schémas ne sont plus nécessaires.

Pour supprimer un schéma du registre, appelez l'API [DeleteSchema action (Python : supprimer\$1schéma)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema), en spécifiant la structure `SchemaId` pour identifier le schéma.

Par exemple :

```
aws glue delete-schema --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/schemaname"
```

```
aws glue delete-schema --schema-id SchemaName="TestSchema6-deleteschemabyname",RegistryName="default-registry"
```

**Console AWS Glue **  
Pour supprimer un schéma de la console AWS Glue :

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. Dans le panneau de navigation, sous **Data catalog (Catalogue de données)**, choisissez **Schema registries (Registres de schémas)**.

1. Choisissez le registre qui contient votre schéma dans la liste des registres.

1. Sélectionnez un ou plusieurs schémas dans la liste, en cochant les cases.

1. Dans le menu **Action**, sélectionnez **Delete schema (Supprimer un schéma)**.

1. Saisissez le texte **Delete** dans le champ pour confirmer la suppression.

1. Choisissez **Delete** (Supprimer).

Le ou les schémas que vous avez spécifiés sont supprimés du registre.

## Suppression d'une version de schéma
<a name="schema-registry-gs7b"></a>

Au fur et à mesure que les schémas s'accumulent dans le registre, vous souhaiterez peut-être supprimer les versions de schéma indésirables à l'aide de l' AWS Management Console API ou de l'[DeleteSchemaVersions action (Python : delete\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchemaVersions)API. La suppression d'une ou de plusieurs versions de schéma est une action permanente qui ne peut pas être annulée. Assurez-vous que les versions de schéma ne sont plus nécessaires.

Lorsque vous supprimez des versions de schéma, veuillez tenir compte des contraintes suivantes :
+ Vous ne pouvez pas supprimer une version comportant un point de contrôle.
+ La gamme de versions contiguës ne peut pas dépasser 25.
+ La version de schéma la plus récente ne doit pas être dans un état en attente.

Spécifiez la structure `SchemaId` pour identifier le schéma et spécifiez `Versions` comme une plage de versions à supprimer. Pour plus d'informations sur la spécification d'une version ou d'une plage de versions, veuillez consulter [DeleteRegistry action (Python : supprimer\$1registre)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). Les versions de schéma que vous avez spécifiées sont supprimées du registre.

En appelant l'API [ListSchemaVersions action (Python : list\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-ListSchemaVersions) après cet appel, vous obtiendrez la liste de l'état des versions supprimées.

Par exemple :

```
aws glue delete-schema-versions --schema-id SchemaName="TestSchema6",RegistryName="default-registry" --versions "1-1"
```

```
aws glue delete-schema-versions --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/default-registry/TestSchema6-NON-Existent" --versions "1-1"
```

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. Dans le panneau de navigation, sous **Data catalog (Catalogue de données)**, choisissez **Schema registries (Registres de schémas)**.

1. Choisissez le registre qui contient votre schéma dans la liste des registres.

1. Sélectionnez un ou plusieurs schémas dans la liste, en cochant les cases.

1. Dans le menu **Action**, sélectionnez **Delete schema (Supprimer un schéma)**.

1. Saisissez le texte **Delete** dans le champ pour confirmer la suppression.

1. Sélectionnez **Delete (Supprimer)**.

Les versions de schéma que vous avez spécifiées sont supprimées du registre.

# Suppression d'un registre
<a name="schema-registry-gs7c"></a>

Vous pouvez supprimer un registre lorsque les schémas qu'il contient ne doivent plus être organisés sous ce registre. Vous devrez réaffecter ces schémas à un autre registre.

La suppression d'un ou de plusieurs registres est une action permanente qui ne peut pas être annulée. Assurez-vous que le ou les registres ne sont plus requis.

Le registre par défaut peut être supprimé à l'aide de la AWS CLI.

**API AWS Glue**  
Pour supprimer l'intégralité du registre, y compris le schéma et toutes ses versions, appelez l'API [DeleteRegistry action (Python : supprimer\$1registre)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). Spécifiez une structure `RegistryId` pour identifier le registre.

Par exemple :

```
aws glue delete-registry --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
```

```
aws glue delete-registry --registry-id RegistryName="TestRegistry-deletebyname"
```

Pour obtenir le statut de l'opération de suppression, vous pouvez appeler l'API `GetRegistry` après l'appel asynchrone.

**Console AWS Glue **  
Pour supprimer un registre de la console AWS Glue :

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. Dans le panneau de navigation, sous **Data catalog (Catalogue de données)**, choisissez **Schema registries (Registres de schémas)**.

1. Sélectionnez un registre dans la liste en cochant une case.

1. Dans le menu **Action**, choisissez **Delete registry (Supprimer un registre)**.

1. Saisissez le texte **Delete** dans le champ pour confirmer la suppression.

1. Sélectionnez **Delete (Supprimer)**.

Les registres que vous avez sélectionnés sont supprimés de AWS Glue.

## Exemples d'IAM pour les sérialiseurs
<a name="schema-registry-gs1"></a>

**Note**  
AWS les politiques gérées accordent les autorisations nécessaires pour les cas d'utilisation courants. Pour plus d'informations sur l'utilisation des politiques gérées pour gérer le registre de schéma, veuillez consulter [AWS politiques gérées (prédéfinies) pour AWS Glue](security-iam-awsmanpol.md#access-policy-examples-aws-managed). 

Pour les sérialiseurs, vous devez créer une politique minimale similaire à celle ci-dessous pour vous donner la possibilité de trouver le `schemaVersionId` pour une définition de schéma donnée. Notez que vous devez disposer des autorisations de lecture sur le registre afin de lire les schémas dans le registre. Vous pouvez limiter les registres qui peuvent être lus à l'aide de la clause `Resource`.

Exemple de code 13 :

```
{
    "Sid" : "GetSchemaByDefinition",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaByDefinition"
    ],
        "Resource" : ["arn:aws:glue:us-east-2:012345678:registry/registryname-1",
                      "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-1",
                      "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-2"
                     ]
}
```

En outre, vous pouvez également autoriser les applications producteur à créer des schémas et versions en incluant les méthodes supplémentaires suivantes. Notez que vous devriez être en mesure d'inspecter le registre afin de vérifier add/remove/evolve les schémas qu'il contient. Vous pouvez limiter les registres qui peuvent être inspectés à l'aide de la clause `Resource`.

Exemple de code 14 :

```
{
    "Sid" : "RegisterSchemaWithMetadata",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaByDefinition",
        "glue:CreateSchema",
        "glue:RegisterSchemaVersion",
        "glue:PutSchemaVersionMetadata",
    ],
    "Resource" : ["arn:aws:glue:aws-region:123456789012:registry/registryname-1",
                  "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-1",
                  "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-2"
                 ]
}
```

## Exemples d'IAM pour les désérialiseurs
<a name="schema-registry-gs1b"></a>

Pour les désérialiseurs (côté application consommateur), vous devez créer une politique similaire à celle ci-dessous pour autoriser le désérialiseur à récupérer le schéma à partir du registre de schéma pour la désérialisation. Notez que vous devriez être en mesure d'inspecter le registre afin d'extraire les schémas qu'il contient.

Exemple de code 15 :

```
{
    "Sid" : "GetSchemaVersion",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaVersion"
    ],
    "Resource" : ["*"]
}
```

## Connectivité privée à l'aide de AWS PrivateLink
<a name="schema-registry-gs-private"></a>

Vous pouvez l'utiliser AWS PrivateLink pour connecter le VPC de votre producteur de données AWS Glue en définissant un point de terminaison VPC d'interface pour. AWS Glue Lorsque vous utilisez un point de terminaison de VPC, la communication entre votre VPC et AWS Glue est gérée au sein du réseau AWS . Pour plus d'informations, veuillez consulter [Utilisation d'AWS Glue avec les points de terminaison d'un VPC](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoint.html).

# Accès aux CloudWatch métriques d'Amazon
<a name="schema-registry-gs-monitoring"></a>

Les CloudWatch statistiques Amazon sont disponibles dans le cadre CloudWatch de l'offre gratuite. Vous pouvez accéder à ces métriques dans la CloudWatch console. Les indicateurs au niveau de l'API incluent CreateSchema (succès et latence) GetSchemaByDefinition, (succès et latence), GetSchemaVersion (succès et latence), RegisterSchemaVersion (succès et latence), PutSchemaVersionMetadata (succès et latence). Les métriques au niveau des ressources incluent le registre. ThrottledByLimit, SchemaVersion. ThrottledByLimit, SchemaVersion .Taille.

# Exemple de CloudFormation modèle pour le registre de schémas
<a name="schema-registry-integrations-cfn"></a>

Voici un exemple de modèle pour créer des ressources de registre de schémas dans CloudFormation. Pour créer cette pile dans votre compte, copiez le modèle ci-dessus dans un fichier `SampleTemplate.yaml` et exécutez la commande suivante :

```
aws cloudformation create-stack --stack-name ABCSchemaRegistryStack --template-body "'cat SampleTemplate.yaml'"
```

Cet exemple utilise `AWS::Glue::Registry` pour créer un registre, `AWS::Glue::Schema` pour créer un schéma, `AWS::Glue::SchemaVersion` pour créer une version de schéma et `AWS::Glue::SchemaVersionMetadata` pour renseigner les métadonnées de version de schéma. 

```
Description: "A sample CloudFormation template for creating Schema Registry resources."
Resources:
  ABCRegistry:
    Type: "AWS::Glue::Registry"
    Properties:
      Name: "ABCSchemaRegistry"
      Description: "ABC Corp. Schema Registry"
      Tags:
        Project: "Foo"
  ABCSchema:
    Type: "AWS::Glue::Schema"
    Properties:
      Registry:
        Arn: !Ref ABCRegistry
      Name: "TestSchema"
      Compatibility: "NONE"
      DataFormat: "AVRO"
      SchemaDefinition: >
        {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]}
      Tags:
        Project: "Foo"
  SecondSchemaVersion:
    Type: "AWS::Glue::SchemaVersion"
    Properties:
      Schema:
        SchemaArn: !Ref ABCSchema
      SchemaDefinition: >
        {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"status","type":"string", "default":"ON"}, {"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]}
  FirstSchemaVersionMetadata:
    Type: "AWS::Glue::SchemaVersionMetadata"
    Properties:
      SchemaVersionId: !GetAtt ABCSchema.InitialSchemaVersionId
      Key: "Application"
      Value: "Kinesis"
  SecondSchemaVersionMetadata:
    Type: "AWS::Glue::SchemaVersionMetadata"
    Properties:
      SchemaVersionId: !Ref SecondSchemaVersion
      Key: "Application"
      Value: "Kinesis"
```