

# Registro de esquemas do AWS Glue
<a name="schema-registry"></a>

**nota**  
O registro de esquemas do AWS Glue não é compatível nas seguintes regiões no console do AWS Glue: Oriente Médio (EAU).

Com o registro de esquemas do AWS Glue, você pode descobrir, controlar e evoluir centralmente esquemas de fluxo de dados. O *esquema* define a estrutura e o formato de um registro de dados. Com o registro de esquemas do AWS Glue, você pode gerenciar e aplicar esquemas em suas aplicações de fluxo de dados usando integrações convenientes com o Apache Kafka, [Amazon Managed Streaming for Apache Kafka](https://aws.amazon.com/msk/), [Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/), [Amazon Managed Service for Apache Flink](https://aws.amazon.com/kinesis/data-analytics/) e [AWS Lambda](https://aws.amazon.com/lambda/).

O Schema Registry é compatível com o formato de dados AVRO (v1.11.4), o formato de dados JSON com [formato JSON Schema](https://json-schema.org/) para o esquema (especificações Draft-04, Draft-06 e Draft-07) com validação do esquema JSON usando a [biblioteca do Everit](https://github.com/everit-org/json-schema), Protocol Buffers (Protobuf) versões proto2 e proto3 não compatíveis com `extensions` e `groups`, e compatíveis com a linguagem Java, e outros formatos de dados e linguagens a serem incluídos em breve. Os recursos com suporte incluem compatibilidade, fornecimento de esquema via metadados, registro automático de esquemas, compatibilidade com o IAM e compactação ZLIB opcional para reduzir o armazenamento e a transferência de dados. O registro de esquemas do O registro de esquemas é uma solução sem servidor e de uso gratuito.

O uso de um esquema como um contrato de formato de dados entre produtores e consumidores leva a uma melhor governança e maior qualidade dos dados, e ainda permite que os consumidores de dados sejam resilientes a alterações upstream compatíveis.

O registro de esquemas permite que sistemas diferentes compartilhem um esquema para serialização e desserialização. Por exemplo, suponha que você tenha um produtor e consumidor de dados. O produtor conhece o esquema quando publica os dados. O registro de esquemas fornece um serializador e desserializador para determinados sistemas, como Amazon MSK ou Apache Kafka. 

 Para obter mais informações, consulte [Como o registro de esquemas funciona](schema-registry-works.md).

**Topics**
+ [Esquemas](#schema-registry-schemas)
+ [Registros](#schema-registry-registries)
+ [Versionamento e compatibilidade de esquema](#schema-registry-compatibility)
+ [Bibliotecas Serde de código aberto](#schema-registry-serde-libraries)
+ [Cotas do registro do esquemas](#schema-registry-quotas)
+ [Como o registro de esquemas funciona](schema-registry-works.md)
+ [Conceitos básicos do registro de esquemas](schema-registry-gs.md)

## Esquemas
<a name="schema-registry-schemas"></a>

O *esquema* define a estrutura e o formato de um registro de dados. Um esquema é uma especificação versionada para publicação, consumo ou datastore confiáveis.

Neste esquema de exemplo para Avro, o formato e a estrutura são definidos pelo layout e nomes de campo, e o formato dos nomes de campo é definido pelos tipos de dados (por exemplo,`string`, `int`).

```
{
    "type": "record",
    "namespace": "ABC_Organization",
    "name": "Employee",
    "fields": [
        {
            "name": "Name",
            "type": "string"
        },
        {
            "name": "Age",
            "type": "int"
        },
        {
            "name": "address",
            "type": {
                "type": "record",
                "name": "addressRecord",
                "fields": [
                    {
                        "name": "street",
                        "type": "string"
                    },
                    {
                        "name": "zipcode",
                        "type": "int" 
                    }
                ]
            }
        }
    ]
}
```

Neste exemplo de esquema JSON Draft-07 para JSON, o formato é definido pela [organização do esquema JSON](https://json-schema.org/).

```
{
	"$id": "https://example.com/person.schema.json",
	"$schema": "http://json-schema.org/draft-07/schema#",
	"title": "Person",
	"type": "object",
	"properties": {
		"firstName": {
			"type": "string",
			"description": "The person's first name."
		},
		"lastName": {
			"type": "string",
			"description": "The person's last name."
		},
		"age": {
			"description": "Age in years which must be equal to or greater than zero.",
			"type": "integer",
			"minimum": 0
		}
	}
}
```

Neste exemplo para Protobuf, o formato é definido pela [versão 2 da linguagem Protocol Buffers (proto2)](https://developers.google.com/protocol-buffers/docs/reference/proto2-spec).

```
syntax = "proto2";

package tutorial;

option java_multiple_files = true;
option java_package = "com.example.tutorial.protos";
option java_outer_classname = "AddressBookProtos";

message Person {
  optional string name = 1;
  optional int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    optional string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phones = 4;
}

message AddressBook {
  repeated Person people = 1;
}
```

## Registros
<a name="schema-registry-registries"></a>

Um *registro* é um contêiner lógico de esquemas. Os registros permitem que você organize seus esquemas, bem como gerencie o controle de acesso para suas aplicações. Um registro tem um nome do recurso da Amazon (ARN) para permitir que você organize e defina diferentes permissões de acesso para operações de esquema dentro do registro.

Você pode usar o registro padrão ou criar quantos novos registros forem necessários.


**AWS GlueHierarquia do registro de esquemas do**  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 

## Versionamento e compatibilidade de esquema
<a name="schema-registry-compatibility"></a>

Cada esquema pode ter várias versões. O versionamento é regido por uma regra de compatibilidade aplicada em um esquema. As solicitações para registrar novas versões do esquema são verificadas quanto a essa regra pelo registro de esquemas antes de serem bem-sucedidas. 

Uma versão de esquema que está marcada como um ponto de verificação é usada para determinar a compatibilidade em registrar novas versões de um esquema. Quando um esquema é criado pela primeira vez, o ponto de verificação padrão é a primeira versão. À medida que o esquema evolui com mais versões, você pode usar a CLI/SDK para alterar o ponto de verificação para uma versão de um esquema usando a API `UpdateSchema` que adere a um conjunto de restrições. No console, editar a definição do esquema ou o modo de compatibilidade alterará o ponto de verificação para a versão mais recente por padrão. 

Os modos de compatibilidade permitem controlar como os esquemas podem ou não evoluir ao longo do tempo. Esses modos formam o contrato entre aplicações que produzem e consomem dados. Quando uma nova versão de um esquema é enviada para o registro, a regra de compatibilidade aplicada ao nome do esquema é usada para determinar se a nova versão pode ser aceita. Existem oito modos de compatibilidade: NONE (Nenhum), DISABLED (Desabilitado), BACKWARD (Anterior), BACKWARD\$1ALL (Todas as anteriores), FORWARD (Próxima), FORWARD\$1ALL (Todas as próximas), FULL (Completo), FULL\$1ALL (Completo total).

No formato de dados Avro, os campos podem ser opcionais ou obrigatórios. Um campo opcional é aquele em que o `Type` inclui nulo. Campos obrigatórios não possuem nulo como o `Type`.

No formato de dados Protobuf, os campos podem ser opcionais (inclusive repetidos) ou obrigatórios na sintaxe proto2, enquanto todos os campos são opcionais (inclusive repetidos) na sintaxe proto3. Todas as regras de compatibilidade são determinadas com base no entendimento das especificações de Protocol Buffers, bem como na orientação da [Documentação do Google Protocol Buffers](https://developers.google.com/protocol-buffers/docs/overview#updating).
+ *NONE* (Nenhum): nenhum modo de compatibilidade se aplica. Você pode usar essa opção em cenários de desenvolvimento ou se não souber os modos de compatibilidade que deseja aplicar aos esquemas. Qualquer nova versão adicionada será aceita sem ser submetida a uma verificação de compatibilidade.
+ *DISABLED* (Desabilitado): essa opção de compatibilidade impede o versionamento de um esquema específico. Nenhuma nova versão pode ser adicionada.
+ *BACKWARD* (Anterior): essa opção de compatibilidade é recomendada, pois permite que os consumidores de dados leiam a versão atual e anterior do esquema. Você pode usar essa opção para verificar a compatibilidade com a versão anterior do esquema ao excluir campos ou adicionar campos opcionais. Um caso de uso típico para BACKWARD (Anterior) é quando sua aplicação é criada para o esquema mais recente.

**AVRO**  
Por exemplo, suponha que você tenha um esquema definido pelo nome (obrigatório), sobrenome (obrigatório), e-mail (obrigatório) e número de telefone (opcional).

  Se a próxima versão do esquema removesse o campo de e-mail obrigatório, isso seria registrado com êxito. A compatibilidade BACKWARD (Anterior) requer que os consumidores sejam capazes de ler a versão atual e anterior do esquema. Seus consumidores poderão ler o novo esquema, pois o campo de e-mail extra de mensagens antigas será ignorado.

  Se você tivesse uma nova versão de esquema proposta que adicionasse um campo obrigatório, por exemplo, CEP, isso não seria registrado com êxito com a compatibilidade BACKWARD (Anterior). Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois elas não teriam o campo CEP necessário. No entanto, se o campo CEP fosse definido como opcional no novo esquema, a versão proposta seria registrada com sucesso, pois os consumidores poderiam ler o esquema antigo sem o campo de CEP opcional.

**JSON**  
Por exemplo, suponha que você tenha uma versão do esquema definida pelo nome (opcional), sobrenome (opcional), e-mail (opcional) e número de telefone (opcional).

  Se a próxima versão do esquema adicionasse a propriedade de número de telefone opcional, isso seria registrado com êxito, desde que a versão do esquema original não permitisse nenhuma propriedade adicional definindo o campo `additionalProperties` como false. A compatibilidade BACKWARD (Anterior) requer que os consumidores sejam capazes de ler a versão atual e anterior do esquema. Seus consumidores poderão ler dados produzidos com o esquema original onde a propriedade de número de telefone não existe.

  Se você tiver uma nova versão de esquema proposta que adiciona a propriedade de número de telefone opcional, isso não é registrado com êxito com a compatibilidade BACKWARD (Anterior) quando a versão original do esquema define o campo `additionalProperties` como true, ou seja, permitindo qualquer propriedade adicional. Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois não podem ler dados com a propriedade número de telefone em um tipo diferente, por exemplo string em vez de número.

**PROTOBUF**  
Por exemplo, suponha que você tenha uma versão do esquema definida por uma Mensagem `Person` com campos `first name` (obrigatório), `last name` (obrigatório), `email` (obrigatório) e `phone number` (opcional) sob sintaxe proto2.

  Semelhante a cenários AVRO, se a próxima versão do esquema removesse o campo de `email` obrigatório, isso seria registrado com êxito. A compatibilidade BACKWARD (Anterior) requer que os consumidores sejam capazes de ler a versão atual e anterior do esquema. Seus consumidores poderão ler o novo esquema, pois o campo de `email` extra de mensagens antigas será ignorado.

  Se você tivesse uma nova versão de esquema proposta que adicionasse um campo obrigatório, por exemplo, `zip code`, isso não seria registrado com êxito com a compatibilidade BACKWARD (Anterior). Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois elas não teriam o campo `zip code` necessário. No entanto, se o campo `zip code` fosse definido como opcional no novo esquema, a versão proposta seria registrada com sucesso, pois os consumidores poderiam ler o esquema antigo sem o campo de `zip code` opcional.

  No caso de um caso de uso gRPC, adicionar novo serviço RPC ou método RPC é uma alteração compatível com versões anteriores. Por exemplo, suponha que você tenha uma versão do esquema definida por um serviço RPC `MyService` com dois métodos RPC `Foo` e `Bar`.

  Se a próxima versão do esquema adicionar um novo método RPC chamado `Baz`, isso seria registrado com sucesso. Seus consumidores poderão ler dados produzidos com o esquema original de acordo com a compatibilidade BACKWARD pois o método RPC recém-adicionado `Baz` é opcional. 

  Se você tivesse uma nova versão de esquema proposta que removesse o método PRC existente `Foo`, isso não seria registrado com êxito com a compatibilidade BACKWARD. Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois não conseguem entender e ler dados com o método RPC `Foo` inexistente em uma aplicação gRPC.
+ *BACKWARD\$1ALL* (Todas as anteriores): essa opção de compatibilidade é recomendada, pois permite que os consumidores de dados leiam a versão atual e todas as anteriores do esquema. Você pode usar essa opção para verificar a compatibilidade com todas as versões anteriores do esquema ao excluir campos ou adicionar campos opcionais.
+ *FORWARD* (Próxima): essa opção de compatibilidade permite que os receptores de dados leiam a versão atual e as versões subsequentes do esquema, mas não necessariamente versões mais recentes. Você pode usar essa opção para verificar a compatibilidade com a última versão do esquema ao adicionar campos ou excluir campos opcionais. Um caso de uso típico para FORWARD (Próxima) é quando sua aplicação é criada para um esquema anterior e deve ser capaz de processar um esquema mais recente.

**AVRO**  
Por exemplo, suponha que você tenha uma versão do esquema definida pelo nome (obrigatório), sobrenome (obrigatório) e e-mail (opcional).

  Se você tivesse uma nova versão do esquema que adicionasse um campo obrigatório, por exemplo, número de telefone, isso seria registrado com sucesso. A compatibilidade FORWARD (Próxima) requer que os consumidores sejam capazes de ler dados produzidos com o novo esquema usando ainda a versão anterior.

  Se você tivesse uma nova versão de esquema proposta que excluísse o campo de nome obrigatório, isso não seria registrado com êxito com a compatibilidade FORWARD (Posterior). Seus consumidores na versão anterior não seriam capazes de ler os esquemas propostos, pois eles não teriam o campo de nome obrigatório. No entanto, se o campo de nome fosse originalmente opcional, então o novo esquema proposto seria registrado com sucesso, pois os consumidores poderiam ler dados com base no novo esquema que não tem o campo de nome opcional.

**JSON**  
Por exemplo, suponha que você tenha uma versão do esquema definida pelo nome (opcional), sobrenome (opcional), e-mail (opcional) e número de telefone (opcional).

  Se a próxima versão do esquema removesse a propriedade de número de telefone opcional, isso seria registrado com êxito, desde que a versão do esquema original não permitisse nenhuma propriedade adicional definindo o campo `additionalProperties` como false. A compatibilidade FORWARD (Próxima) requer que os consumidores sejam capazes de ler dados produzidos com o novo esquema usando ainda a versão anterior.

  Se você tiver uma versão de esquema proposta que exclui a propriedade número de telefone opcional, isso não é registrado com êxito com a compatibilidade FORWARD (Próxima) quando a nova versão do esquema define o campo `additionalProperties` como true, ou seja, permitindo qualquer propriedade adicional. Seus consumidores na versão anterior não conseguiriam ler mensagens antigas antes da alteração do esquema, pois não poderiam ler dados com a propriedade número de telefone em um tipo diferente, por exemplo string em vez de número.

**PROTOBUF**  
Por exemplo, suponha que você tenha uma versão do esquema definida por uma Mensagem `Person` com campos `first name` (obrigatório), `last name` (obrigatório) e `email` (opcional) sob sintaxe proto2.

  Semelhante a cenários AVRO, se você tivesse uma nova versão do esquema que adicionasse um campo obrigatório, por exemplo, `phone number`, isso seria registrado com sucesso. A compatibilidade FORWARD (Próxima) requer que os consumidores sejam capazes de ler dados produzidos com o novo esquema usando ainda a versão anterior.

  Se você tivesse uma nova versão de esquema proposta que excluísse o campo de `first name`, isso não seria registrado com êxito com a compatibilidade FORWARD. Seus consumidores na versão anterior não seriam capazes de ler os esquemas propostos, pois eles não teriam o campo de `first name` obrigatório. No entanto, se o campo de `first name` fosse originalmente opcional, então o novo esquema proposto seria registrado com sucesso, pois os consumidores poderiam ler dados com base no novo esquema que não tem o campo de `first name` opcional.

  No caso de um caso de uso gRPC, remover um serviço RPC ou método RPC é uma alteração compatível com o encaminhamento. Por exemplo, suponha que você tenha uma versão do esquema definida por um serviço RPC `MyService` com dois métodos RPC `Foo` e `Bar`. 

  Se a próxima versão do esquema excluir o método RPC existente chamado `Foo`, isso seria registrado com sucesso de acordo com a compatibilidade FORWARD, pois os consumidores podem ler dados produzidos com o novo esquema usando a versão anterior. Se você tivesse uma nova versão de esquema proposta que adicionasse o método RPC `Baz`, isso não seria registrado com êxito com a compatibilidade FORWARD. Seus consumidores na versão anterior não seriam capazes de ler os esquemas propostos, pois eles não teriam o método RPC ausente `Baz`.
+ *FORWARD\$1ALL* (Todas as próximas): essa opção de compatibilidade permite que os consumidores leiam dados escritos por produtores de qualquer novo esquema registrado. Você pode usar essa opção quando precisar adicionar campos ou excluir campos opcionais e verificar a compatibilidade com todas as versões anteriores do esquema.
+ *FULL* (Completo): essa opção de compatibilidade permite que os consumidores leiam dados gravados por produtores usando a versão anterior ou seguinte do esquema, mas não versões anteriores ou posteriores. Você pode usar essa opção para verificar a compatibilidade com a última versão do esquema ao adicionar ou remover campos opcionais.
+ *FULL\$1ALL* (Completo total): essa opção de compatibilidade permite que os receptores de dados leiam dados gravados por produtores usando todas as versões de esquema anteriores. Você pode usar essa opção para verificar a compatibilidade com todas as versões anteriores do esquema ao adicionar ou remover campos opcionais.

## Bibliotecas Serde de código aberto
<a name="schema-registry-serde-libraries"></a>

AWSA fornece bibliotecas Serde de código aberto como um framework para serialização e desserialização de dados. O design de código aberto dessas bibliotecas permite que aplicações e frameworks comuns de código aberto ofereçam suporte a elas em seus projetos.

Para obter mais detalhes sobre como as bibliotecas Serde funcionam, consulte [Como o registro de esquemas funciona](schema-registry-works.md).

## Cotas do registro do esquemas
<a name="schema-registry-quotas"></a>

As cotas, também conhecidas como limites na AWS, são os valores máximos para recursos, ações e itens na sua conta da AWS. A seguir estão os limites flexíveis para o registro de esquemas no AWS Glue.

**Pares de chave-valor de metadados de versão de esquema**  
Você pode ter até dez pares de chave-valor por SchemaVersion por região da AWS.

Você pode visualizar ou definir os pares de metadados de chave-valor usando o [Ação QuerySchemaVersionMetadata (Python: query\$1schema\$1version\$1metadata)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-QuerySchemaVersionMetadata) ou APIs do [Ação PutSchemaVersionMetadata (Python: put\$1schema\$1version\$1metadata)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-PutSchemaVersionMetadata).

A seguir estão os limites rígidos para o registro de esquemas no AWS Glue.

**Registros**  
É possível ter até 100 registros por região da AWS para esta conta.

**SchemaVersion**  
É possível ter até 10.000 versões de esquema por região da AWS para esta conta.

Cada novo esquema cria uma nova versão do esquema, portanto você poderá, teoricamente, ter até 10.000 esquemas por conta por região, se cada esquema tiver apenas uma versão.

**Cargas úteis de esquema**  
Há um limite de tamanho de 170 KB para cargas úteis de esquema.

# Como o registro de esquemas funciona
<a name="schema-registry-works"></a>

Esta seção descreve como os processos de serialização e desserialização no registro de esquemas funcionam.

1. Registrar um esquema: se o esquema ainda não existir no registro, ele pode ser registrado com um nome de esquema igual ao nome do destino (por exemplo, test\$1topic, test\$1stream, prod\$1firehose) ou o produtor pode fornecer um nome personalizado para ele. Os produtores também podem adicionar pares de chave-valor ao esquema como metadados, como a fonte: msk\$1kafka\$1topic\$1a ou aplicar tags da AWS para esquemas na criação do esquema. Depois que um esquema é registrado, o registro de esquemas retorna o ID da versão do esquema para o serializador. Se o esquema existir, mas o serializador estiver usando uma nova versão que não existe, o registro de esquemas verificará a referência do esquema a uma regra de compatibilidade, para garantir que a nova versão seja compatível antes de registrá-la como uma nova versão.

   Existem dois métodos de registro de um esquema: manual e automático. Você pode registrar um esquema manualmente por meio do console do AWS Glue ou CLI/SDK.

   Quando o registro automático é ativado nas configurações do serializador, o registro automático do esquema é realizado. Se `REGISTRY_NAME` não for fornecido nas configurações do produtor, o registro automático registrará a nova versão do esquema no registro padrão (default-registry). Consulte [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md) para obter informações sobre como especificar a propriedade de registro automático.

1. O serializador valida registros de dados em relação ao esquema: quando a aplicação que produz os dados registra seu esquema, o serializador do registro de esquemas valida que o registro sendo produzido pela aplicação é estruturado com os campos e os tipos de dados correspondentes a um esquema registrado. Se o esquema do registro não corresponder a um esquema registrado, o serializador retornará uma exceção e a aplicação falhará em entregar o registro ao destino. 

   Se nenhum esquema existir e o nome do esquema não for fornecido por meio das configurações do produtor, o esquema será criado com o mesmo nome que o nome do tópico (se Apache Kafka ou Amazon MSK) ou nome da transmissão (se Kinesis Data Streams).

   Cada registro tem uma definição de esquema e dados. A definição de esquema é consultada em relação aos esquemas e versões existentes no registro de esquemas.

   Por padrão, os produtores armazenam em cache as definições de esquema e IDs de versão de esquemas dos esquemas registrados. Se a definição da versão do esquema de um registro não corresponder ao que está disponível no cache, o produtor tentará validar o esquema com o registro de esquemas. Se a versão do esquema for válida, seu ID de versão e definição serão armazenados em cache localmente no produtor.

   Você pode ajustar o período de cache padrão (24 horas) dentro das propriedades opcionais do produtor na etapa n.º 3 de [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md).

1. Serializar e entregar registros: se o registro estiver em conformidade com o esquema, o serializador decorará cada registro com o ID da versão do esquema, serializará o registro com base no formato de dados selecionado (AVRO, JSON ou Protobuf. Outros formatos em breve), compactará o registro (configuração opcional do produtor) e o entregará ao destino.

1. Os consumidores desserializam os dados: os consumidores que leem esses dados usam a biblioteca de desserialização do registro de esquemas, que analisa o ID da versão do esquema na carga útil do registro.

1. O desserializador pode solicitar o esquema do registro do esquemas: se esta for a primeira vez que o desserializador viu registros com um ID de versão do esquema específico, o desserializador, usando o ID da versão do esquema, solicitará o esquema do registro do esquemas e o armazenará localmente no consumidor. Se o registro de esquemas não puder desserializar o registro, o consumidor poderá registrar em log os dados do registro e seguir em frente, ou interromper a aplicação.

1. O desserializador usa o esquema para desserializar o registro: quando o desserializador recupera o ID da versão do esquema do registro do esquemas, ele descompacta o registro (se o registro enviado pelo produtor for compactado) e usa o esquema para o desserializar. Então, a aplicação processa o registro.

**nota**  
Criptografia: seus clientes se comunicam com o registro de esquemas por meio de chamadas de API que criptografam dados em trânsito usando criptografia TLS em HTTPS. Os esquemas armazenados no registro de esquemas são sempre criptografados em repouso usando uma chave do AWS Key Management Service (AWS KMS) gerenciada por um serviço.

**nota**  
Autorização do usuário: o registro de esquemas é compatível com políticas do IAM baseadas em identidade.

# Conceitos básicos do registro de esquemas
<a name="schema-registry-gs"></a>

As seções a seguir fornecem uma visão geral e orientações sobre como configurar e usar o registro de esquemas. Para obter informações sobre conceitos e componentes do registro de esquemas, consulte [Registro de esquemas do AWS Glue](schema-registry.md).

**Topics**
+ [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md)
+ [Integração com o registro de esquemas do AWS Glue](schema-registry-integrations.md)
+ [Migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue](schema-registry-integrations-migration.md)

# Instalar as bibliotecas SerDe
<a name="schema-registry-gs-serde"></a>

As bibliotecas SerDe fornecem um framework para serialização e desserialização de dados. 

Você instalará o serializador de código aberto para suas aplicações que produzem dados (coletivamente os “serializadores”). O serializador manipula serialização, compactação e interação com o registro de esquemas. O serializador extrai automaticamente o esquema de um registro sendo gravado em um destino compatível com o registro de esquemas, como o Amazon MSK. Da mesma forma, você instalará o desserializador de código aberto em suas aplicações que consomem dados.

# Implementação de Java
<a name="schema-registry-gs-serde-java"></a>

**nota**  
Pré-requisitos: antes de concluir as etapas a seguir, é necessário ter um cluster do Amazon Managed Streaming for Apache Kafka (Amazon MSK) ou do Apache Kafka em execução. Seus produtores e consumidores precisam estar em execução em Java 8 ou superior.

Para instalar as bibliotecas em produtores e consumidores:

1. Dentro dos arquivos pom.xml, tanto dos produtores quanto dos consumidores, adicione essa dependência com o código abaixo:

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

   Como alternativa, você pode clonar o [repositório do registro de esquemas do AWS Glue do GitHub](https://github.com/awslabs/aws-glue-schema-registry).

1. Configure seus produtores com estas propriedades obrigatórias:

   ```
   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"
   ```

   Se não houver esquemas existentes, o registro automático precisará ser ativado (próxima etapa). Se você tiver um esquema que gostaria de aplicar, substitua “my-schema” (meu esquema) pelo nome do seu esquema. Além disso, o “registry-name” (nome do registro) deve ser fornecido se o registro automático do esquema estiver desativado. Se o esquema é criado sob o “default-registry” (registro padrão), o nome do registro pode ser omitido.

1. (Opcional) defina qualquer uma destas propriedades opcionais do produtor. Para obter descrições detalhadas das propriedades, consulte [o arquivo ReadMe](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
   ```

   O registro automático registra a versão do esquema no registro padrão (“default-registry”). Se um `SCHEMA_NAME` não for especificado na etapa anterior, então o nome do tópico será inferido como `SCHEMA_NAME`. 

   Consulte [Versionamento e compatibilidade de esquema](schema-registry.md#schema-registry-compatibility), para obter mais informações sobre os modos de compatibilidade.

1. Configure seus consumidores com estas propriedades obrigatórias:

   ```
   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 Região da AWS
   props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName()); // Only required for AVRO data format
   ```

1. (Opcional) defina essas propriedades opcionais do consumidor. Para obter descrições detalhadas das propriedades, consulte [o arquivo ReadMe](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
   ```

# Implementação de C\$1
<a name="schema-registry-gs-serde-csharp"></a>

**nota**  
Pré-requisitos: antes de concluir as etapas a seguir, é necessário ter um cluster do Amazon Managed Streaming for Apache Kafka (Amazon MSK) ou do Apache Kafka em execução. Seus produtores e consumidores precisam estar em execução em .NET 8.0 ou superior.

## Instalação
<a name="schema-registry-gs-serde-csharp-install"></a>

Para aplicativos C\$1, instale o pacote AWS Glue Schema Registry SerDe NuGet usando um dos métodos a seguir:

**.NET CLI:**  
Para instalar o pacote, execute o comando a seguir:

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

onde `<rid>` poderia ser `1.0.0-linux-x64`, `1.0.0-linux-musl-x64` ou `1.0.0-linux-arm64`

**PackageReference (em seu arquivo .csproj):**  
Adicione o seguinte ao seu arqruivo de projeto:

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

onde `<rid>` poderia ser `1.0.0-linux-x64`, `1.0.0-linux-musl-x64` ou `1.0.0-linux-arm64`

## Definição do arquivo de configuração
<a name="schema-registry-gs-serde-csharp-config"></a>

Crie um arquivo de propriedades de configuração (por exemplo, `gsr-config.properties`) com as configurações necessárias:

**Configuração mínima:**  
A seguir você verá um exemplo de configuração mínima:

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

## Usando a biblioteca cliente C\$1 Glue Schema para Kafka SerDes
<a name="schema-registry-gs-serde-csharp-kafka"></a>

**Uso do serializador de amostra:**  
O exemplo a seguir mostra como usar o serializador:

```
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)
```

**Uso do desserializador de amostra:**  
O exemplo a seguir mostra como usar o desserializador:

```
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);
```

## Usando a biblioteca cliente C\$1 Glue Schema para KafkaFlow para SerDes
<a name="schema-registry-gs-serde-csharp-kafkaflow"></a>

**Uso do serializador de amostra:**  
O exemplo a seguir mostra como configurar o KafkaFlow com o serializador:

```
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")
                )
            )
        )
    )
);
```

**Uso do desserializador de amostra:**  
O exemplo a seguir mostra como configurar o KafkaFlow com o desserializador:

```
.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>())
    )
)
```

## Propriedades opcionais do produtor
<a name="schema-registry-gs-serde-csharp-optional"></a>

Você pode estender seu arquivo de configuração com propriedades opcionais adicionais:

```
# 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
```

## Formatos de dados suportados
<a name="schema-registry-gs-serde-supported-formats"></a>

As implementações Java e C\$1 são compatíveis com os mesmos formatos de dados:
+ *AVRO*: formato binário Apache Avro
+ *JSON*: formato do esquema JSON
+ *PROTOBUF*: formato Protocol Buffers

## Observações
<a name="schema-registry-gs-serde-csharp-notes"></a>
+ Para começar a usar a biblioteca, visite [https://www.nuget.org/packages/AWS.Glue.SchemaRegistry](https://www.nuget.org/packages/AWS.Glue.SchemaRegistry)
+ O código-fonte está disponível em: [https://github.com/awslabs/aws-glue-schema-registry](https://github.com/awslabs/aws-glue-schema-registry)

# Criar um registro
<a name="schema-registry-gs3"></a>

Você pode usar o registro padrão ou criar quantos novos registros forem necessários usando as APIS do AWS Glue ou o console do AWS Glue.

**AWS GlueAPIs do**  
Você pode usar estas etapas para executar essa tarefa usando as APIs do AWS Glue.

Para usar a AWS CLI para APIs do registro de esquemas do AWS Glue, certifique-se de atualizar a AWS CLI para a versão mais recente.

 Para adicionar um novo registro, use a API do [Ação CreateRegistry (Python: create\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateRegistry). Especifique `RegistryName` como o nome do registro a ser criado, com um comprimento máximo de 255, contendo apenas letras, números, hífens, sublinhados, cifrões ou marcas de hash. 

Especifique `Description` como uma string com não mais do que 2.048 bytes de comprimento, correspondente ao [padrão de string com várias linhas de endereço URI](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-common.html#aws-glue-api-common-_string-patterns). 

Como alternativa, especifique um ou mais `Tags` para seu registro, como uma matriz de mapa de pares de chave-valor.

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

Quando seu registro é criado, ele recebe um nome do recurso da Amazon (ARN), que você pode visualizar no `RegistryArn` da resposta da API. Agora que você criou um registro, crie um ou mais esquemas para esse registro.

**AWS GlueConsole do**  
Para adicionar um novo registro no console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha **Add registry** (Adicionar registro).

1. Digite um **Registry name** (Nome de registro) para o registro composto por letras, números, hifens ou sublinhados. Esse nome não pode ser alterado.

1. Digite uma **Description** (Descrição) (opcional) para o registro.

1. Opcionalmente, aplique uma ou mais tags ao registro. Escolha **Add new tag** (Adicionar nova tag), especifique um **Tag key** (Chave de tag) e, opcionalmente, um **Tag value** (Valor da tag).

1. Escolha **Add registry** (Adicionar registro).

![\[Exemplo de criação de um registro.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_create_registry.png)


Quando seu registro é criado, ele recebe um nome do recurso da Amazon (ARN), que você pode visualizar escolhendo o registro na lista em **Schema registries** (Registros de esquemas). Agora que você criou um registro, crie um ou mais esquemas para esse registro.

# Lidar com um registro específico (JAVA POJO) para JSON
<a name="schema-registry-gs-json-java-pojo"></a>

Você pode usar um plain old Java object (POJO) e transmitir o objeto como um registro. Isso é semelhante à noção de um registro específico no AVRO. O [mbknor-jackson-jsonschema](https://github.com/mbknor/mbknor-jackson-jsonSchema) pode gerar um esquema JSON para o POJO transmitido. Essa biblioteca também pode injetar informações adicionais no esquema JSON.

A biblioteca do registro de esquemas do AWS Glue usa o campo “className” injetado no esquema para fornecer um nome de classe totalmente classificado. O campo “className” é usado pelo desserializador para desserializar em um objeto dessa 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() {}
}
```

# Criar um esquema
<a name="schema-registry-gs4"></a>

Você pode criar um esquema usando as APIs do AWS Glue ou o console do AWS Glue. 

**AWS GlueAPIs do**  
Você pode usar estas etapas para executar essa tarefa usando as APIs do AWS Glue.

Para adicionar um novo esquema, use a API [Ação CreateSchema (Python: create\$1esquema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateSchema).

Especifique uma estrutura `RegistryId` para indicar um registro para o esquema. Ou omita o `RegistryId` para usar o registro padrão.

Especifique um `SchemaName` consistindo em letras, números, hifens ou sublinhados e `DataFormat` como **AVRO** ou **JSON**. O `DataFormat`, uma vez definido em um esquema, não pode ser alterado.

Especifique um modo de `Compatibility`:
+ *Backward (Anterior) (recomendado)*: o consumidor pode ler a versão atual e a anterior.
+ *Backward all (Todas as anteriores)*: o consumidor pode ler a versão atual e todas as anteriores.
+ *Forward (Próxima)*: o consumidor pode ler a versão atual e a subsequente.
+ *Forward all (Todas as próximas)*: o consumidor pode ler a versão atual e todas as subsequentes.
+ *Full (Completo)*: combinação de Backward e Forward.
+ *Full all (Completo total)*: combinação de Backward all e Forward all.
+ *None (Nenhum)*: nenhuma verificação de compatibilidade é realizada.
+ *Disabled (Desabilitado)*: impede qualquer versionamento para esse esquema.

Opcionalmente, especifique `Tags` para seu esquema. 

Especifique uma `SchemaDefinition` para definir o esquema no formato de dados Avro, JSON ou Protobuf. Consulte os exemplos.

Para o formato de dados 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\"} ]}"
```

Para o formato de dados 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\"}}}"
```

Para o formato de dados 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;}"
```

**AWS GlueConsole do**  
Para adicionar um novo esquema usando o console do AWS Glue:

1. Faça login no Console de Gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Schema** (Esquema).

1. Escolha **Add schema** (Adicionar esquema).

1. Digite um **Schema name** (Nome do esquema), consistindo em letras, números, hifens, sublinhados, cifrões ou marcas de hash. Esse nome não pode ser alterado.

1. Escolha o **Registry** (Registro) em que o esquema será armazenado no menu suspenso. O registro pai não pode ser alterado após a criação.

1. Deixe **Data format** (Formato de dados) como *Apache Avro* ou *JSON*. Esse formato se aplica a todas as versões desse esquema.

1. Escolha um **Compatibility mode** (Modo de compatibilidade).
   + *Backward (Anterior) (recomendado)*: o receptor pode ler a versão atual e a anterior.
   + *Backward all (Todas as anteriores)*: o receptor pode ler a versão atual e todas as anteriores.
   + *Forward (Próxima)*: o remetente pode gravar a versão atual e a anterior.
   + *Forward all (Todas as próximas)*: o remetente pode gravar a versão atual e todas as anteriores.
   + *Full (Completo)*: combinação de Backward e Forward.
   + *Full all (Completo total)*: combinação de Backward All e Forward All.
   + *None (Nenhum)*: nenhuma verificação de compatibilidade é realizada.
   + *Disabled (Desabilitado)*: impede qualquer versionamento para esse esquema.

1. Insira uma **Description** (Descrição) opcional de até 250 caracteres para o registro.  
![\[Exemplo de criação de um esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_create_schema.png)

1. Opcionalmente, aplique uma ou mais tags ao esquema. Escolha **Add new tag** (Adicionar nova tag), especifique um **Tag key** (Chave de tag) e, opcionalmente, um **Tag value** (Valor da tag).

1. Na caixa **First schema version** (Primeira versão do esquema), insira ou cole o esquema inicial.

   Para o formato Avro, consulte [Trabalhar com o formato de dados Avro](#schema-registry-avro)

   Para o formato JSON, consulte [Trabalhar com o formato de dados JSON](#schema-registry-json)

1. Opcionalmente, escolha **Add metadata** (Adicionar metadados) para adicionar metadados de versão para anotar ou classificar a versão do esquema.

1. Selecione **Create schema and version** (Criar esquema e versão).

![\[Exemplo de criação de um esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_create_schema2.png)


O esquema é criado e aparece na lista em **Schemas** (Esquemas).

## Trabalhar com o formato de dados Avro
<a name="schema-registry-avro"></a>

O Avro fornece serviços de serialização e troca de dados. O Avro armazena a definição de dados no formato JSON facilitando a leitura e interpretação. Os dados em si são armazenados em formato binário.

Para obter informações sobre como definir um esquema do Apache Avro, consulte a [especificação do Apache Avro](http://avro.apache.org/docs/current/spec.html).

## Trabalhar com o formato de dados JSON
<a name="schema-registry-json"></a>

Os dados podem ser serializados com o formato JSON. O [formato do esquema JSON](https://json-schema.org/) define o padrão para o formato de esquema JSON.

# Atualizar um esquema ou registro
<a name="schema-registry-gs5"></a>

Uma vez criados, você pode editar seus esquemas, versões de esquema ou registro.

## Atualizar um registro
<a name="schema-registry-gs5a"></a>

Você pode atualizar um registro usando as APIs do AWS Glue ou o console do AWS Glue. O nome de um registro existente não pode ser editado. Você pode editar a descrição de um registro.

**AWS GlueAPIs do**  
Para atualizar um registro existente, use a API [Ação UpdateRegistry (Python: update\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateRegistry).

Especifique uma estrutura `RegistryId` para indicar o registro que você deseja atualizar. Informe uma `Description` para alterar a descrição de um registro.

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

**AWS GlueConsole do**  
Para atualizar um registro usando o console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha um registro na lista de registros, marcando a caixa correspondente.

1. No menu **Action** (Ação), escolha **Edit registry** (Editar registro).

# Atualizar um esquema
<a name="schema-registry-gs5b"></a>

Você pode atualizar a descrição ou a configuração de compatibilidade de um esquema.

Para atualizar um esquema existente, use a API [Ação UpdateSchema (Python: update\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateSchema).

Especifique uma estrutura `SchemaId` para indicar o esquema que você deseja atualizar. Um de `VersionNumber` ou `Compatibility` tem de ser fornecido.

Exemplo de código 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
```

# Adicionar uma versão de esquema
<a name="schema-registry-gs5c"></a>

Quando você adiciona uma versão de esquema, precisa comparar as versões para se certificar de que o novo esquema será aceito.

Para adicionar uma nova versão a um esquema existente, use a API [Ação RegisterSchemaVersion (Python: register\$1schema\$1version)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-RegisterSchemaVersion).

Especifique um estrutura `SchemaId` para indicar o esquema no qual você deseja adicionar uma versão e uma `SchemaDefinition` para definir o esquema.

Exemplo de código 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. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Schema** (Esquema).

1. Escolha o esquema na lista de esquemas, marcando a caixa correspondente.

1. Escolha um ou mais esquemas na lista, marcando as caixas.

1. No menu **Action** (Ação), escolha **Register new version** (Registrar nova versão).

1. Na caixa **New version** (Nova versão), insira ou cole seu novo esquema.

1. Escolha **Compare with previous version** (Comparar com a versão anterior) para ver as diferenças em relação à versão anterior do esquema.

1. Opcionalmente, escolha **Add metadata** (Adicionar metadados) para adicionar metadados de versão para anotar ou classificar a versão do esquema. Digite a **Key** (Chave) e o **Value** (Valor) opcional.

1. Escolha **Register version** (Registrar versão).

![\[Adicionar uma versão de esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_add_schema_version.png)


As versões dos esquemas aparecem na lista de versões. Se a versão alterou o modo de compatibilidade, ela será marcada como um ponto de verificação.

## Exemplo de comparação de versões de esquema
<a name="schema-registry-gs5c1"></a>

Quando você escolher **Compare with previous version** (Comparar com a versão anterior), você verá a versão nova e a anterior exibidas juntas. As informações alteradas serão destacadas da seguinte forma:
+ *Amarelo*: indica informações alteradas.
+ *Verde*: indica o conteúdo adicionado na versão mais recente.
+ *Vermelho*: indica o conteúdo removido da versão mais recente.

Você também pode comparar com versões anteriores.

![\[Exemplo de comparação de versões de esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_version_comparison.png)


# Excluir um esquema ou registro
<a name="schema-registry-gs7"></a>

Excluir um esquema, uma versão de esquema ou um registro são ações permanentes que não podem ser desfeitas.

## Excluir um esquema
<a name="schema-registry-gs7a"></a>

Você pode querer excluir um esquema quando ele não for mais usado dentro de um registro usando o Console de gerenciamento da AWS ou a API [Ação DeleteSchema (Python: delete\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema).

Excluir um ou mais esquemas é uma ação permanente que não pode ser desfeita. Certifique-se de que o esquema ou esquemas não são mais necessários.

Para excluir um esquema do registro, chame a API [Ação DeleteSchema (Python: delete\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema), especificando a estrutura `SchemaId` para identificar o esquema.

Por exemplo:

```
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"
```

**AWS GlueConsole do**  
Para excluir um esquema com o console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha o registro que contém o esquema na lista de registros.

1. Escolha um ou mais esquemas na lista, marcando as caixas.

1. No menu **Actions** (Ações), escolha **Delete schema** (Excluir esquema).

1. Insira o texto **Delete** no campo para confirmar a exclusão.

1. Selecione a opção **Excluir**.

Os esquemas especificados são excluídos do registro.

## Excluir uma versão de esquema
<a name="schema-registry-gs7b"></a>

À medida que os esquemas se acumulam no registro, você pode querer excluir versões de esquema indesejadas usando o Console de gerenciamento da AWS ou a API [Ação DeleteSchemaVersions (Python: delete\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchemaVersions). Excluir uma ou mais versões de esquema é uma ação permanente que não pode ser desfeita. Certifique-se de que as versões de esquema não são mais necessárias.

Ao excluir versões de esquema, observe as seguintes restrições:
+ Você não pode excluir uma versão marcada como ponto de verificação.
+ O intervalo de versões contíguas não pode ser superior a 25.
+ A versão mais recente do esquema não deve estar em estado pendente.

Especifique a estrutura `SchemaId` para identificar o esquema e especifique `Versions` como um intervalo de versões a serem excluídas. Para obter mais informações sobre como especificar uma versão ou intervalo de versões, consulte [Ação DeleteRegistry (Python: delete\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). As versões de esquema especificadas são excluídas do registro.

Chamar a API [Ação ListSchemaVersions (Python: list\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-ListSchemaVersions) após essa chamada listará o status das versões excluídas.

Por exemplo:

```
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. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha o registro que contém o esquema na lista de registros.

1. Escolha um ou mais esquemas na lista, marcando as caixas.

1. No menu **Actions** (Ações), escolha **Delete schema** (Excluir esquema).

1. Insira o texto **Delete** no campo para confirmar a exclusão.

1. Escolha **Excluir**.

As versões de esquema especificadas são excluídas do registro.

# Excluir um registro
<a name="schema-registry-gs7c"></a>

Você pode querer excluir um registro quando os esquemas que ele contém não devem mais ser organizados nele. Você precisará reatribuir esses esquemas a outro registro.

Excluir um ou mais registros é uma ação permanente que não pode ser desfeita. Certifique-se de que o registro ou registros não são mais necessários.

O registro padrão pode ser excluído usando a AWS CLI.

**AWS GlueAPI**  
Para excluir todo o registro, incluindo o esquema e todas as suas versões, chame a API [Ação DeleteRegistry (Python: delete\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). Especifique uma estrutura `RegistryId` para identificar o registro.

Por exemplo:

```
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"
```

Para obter o status da operação de exclusão, é possível chamar a API `GetRegistry` após a chamada assíncrona.

**AWS GlueConsole do**  
Para excluir um registro do console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha um registro na lista, marcando uma caixa.

1. No menu **Action** (Ação), escolha **Delete registry** (Excluir registro).

1. Insira o texto **Delete** no campo para confirmar a exclusão.

1. Selecione a opção **Excluir**.

Os registros que você selecionou são excluídos do AWS Glue.

## Exemplos do IAM para serializadores
<a name="schema-registry-gs1"></a>

**nota**  
AWSAs políticas gerenciadas pela concedem as permissões necessárias para casos de uso comuns. Para obter informações sobre como usar políticas gerenciadas para gerenciar o registro do esquema, consulte [AWS Políticas gerenciadas pela (predefinidas) para o AWS Glue](security-iam-awsmanpol.md#access-policy-examples-aws-managed). 

Para serializadores, você deve criar uma política mínima semelhante à abaixo, para lhe dar a capacidade de encontrar o `schemaVersionId` para uma determinada definição de esquema. Observe que você deve ter permissões de leitura no registro para ler os esquemas no registro. Você pode limitar os registros que podem ser lidos usando a cláusula `Resource`.

Exemplo de código 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"
                     ]
}
```

Além disso, você também pode permitir que os produtores criem novos esquemas e versões ao incluir os seguintes métodos extras. Observe que você deve ser capaz de inspecionar o registro para adicionar/remover/evoluir os esquemas dentro dele. Você pode limitar os registros que podem ser inspecionados usando a cláusula `Resource`.

Exemplo de código 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"
                 ]
}
```

## Exemplos do IAM para desserializadores
<a name="schema-registry-gs1b"></a>

Para desserializadores (lado do consumidor), você deve criar uma política semelhante à abaixo para permitir que o desserializador busque o esquema do registro de esquemas para desserialização. Observe que você deve ser capaz de inspecionar o registro a fim de buscar os esquemas dentro dele.

Exemplo de código 15:

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

## Conectividade privada usando AWS PrivateLink
<a name="schema-registry-gs-private"></a>

Você pode usar o AWS PrivateLink para conectar a VPC do produtor de dados ao AWS Glue definindo um endpoint da VPC de interface para o AWS Glue. Quando você usa um endpoint da VPC de interface, a comunicação entre sua VPC e o AWS Glue é realizada inteiramente dentro da rede da AWS. Para obter mais informações, consulte [Usar o AWS Glue com endpoints da VPC](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoint.html).

# Acessar métricas do Amazon CloudWatch
<a name="schema-registry-gs-monitoring"></a>

As métricas do Amazon CloudWatch estão disponíveis como parte do nível gratuito do CloudWatch. Também é possível visualizá-las no console do CloudWatch. As métricas de nível de API incluem CreateSchema (sucesso e latência), GetSchemaByDefinition (sucesso e latência), GetSchemaVersion (sucesso e latência), RegisterSchemaVersion (sucesso e latência) e PutSchemaVersionMetadata (sucesso e latência). As métricas de nível de recurso incluem Registry.ThrottledByLimit, SchemaVersion.ThrottledByLimit e SchemaVersion.Size.

# Exemplo de modelo do CloudFormation para o registro de esquemas
<a name="schema-registry-integrations-cfn"></a>

Veja a seguir um modelo de exemplo para criar recursos do registro de esquemas no CloudFormation. Para criar essa pilha em sua conta, copie o modelo acima em um arquivo `SampleTemplate.yaml` e execute o seguinte comando:

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

Este exemplo usa `AWS::Glue::Registry` para criar um registro, `AWS::Glue::Schema` para criar um esquema, `AWS::Glue::SchemaVersion` para criar uma versão de esquema e `AWS::Glue::SchemaVersionMetadata` para preencher os metadados da versão do esquema. 

```
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"
```

# Integração com o registro de esquemas do AWS Glue
<a name="schema-registry-integrations"></a>

Estas seções descrevem integrações com o registro de esquemas do AWS Glue. Os exemplos nesta seção mostram um esquema com formato de dados AVRO. Para obter mais exemplos, incluindo esquemas com formato de dados JSON, consulte os testes de integração e as informações no arquivo ReadMe no [repositório de código aberto do registro de esquemas do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

**Topics**
+ [Caso de uso: conectar registro de esquemas ao Amazon MSK ou Apache Kafka](#schema-registry-integrations-amazon-msk)
+ [Caso de uso: integração do Amazon Kinesis Data Streams ao registro de esquemas do AWS Glue](#schema-registry-integrations-kds)
+ [Caso de uso: Amazon Managed Service for Apache Flink](#schema-registry-integrations-kinesis-data-analytics-apache-flink)
+ [Caso de uso: integração com o AWS Lambda](#schema-registry-integrations-aws-lambda)
+ [Caso de uso: AWS Glue Data Catalog](#schema-registry-integrations-aws-glue-data-catalog)
+ [Caso de uso: transmissão no AWS Glue](#schema-registry-integrations-aws-glue-streaming)
+ [Caso de uso: Apache Kafka Streams](#schema-registry-integrations-apache-kafka-streams)

## Caso de uso: conectar registro de esquemas ao Amazon MSK ou Apache Kafka
<a name="schema-registry-integrations-amazon-msk"></a>

Vamos supor que você está gravando dados em um tópico do Apache Kafka. Você pode seguir estas etapas para começar.

1. Crie um cluster do Amazon Managed Streaming for Apache Kafka (Amazon MSK) ou do Apache Kafka com pelo menos um tópico. Se estiver criando um cluster do Amazon MSK, você pode usar o Console de gerenciamento da AWS. Para obter mais informações: [Conceitos básicos do uso do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) no *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*.

1. Siga o passo [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md) acima.

1. Para criar registros de esquemas, esquemas ou versões de esquema, siga as instruções na seção [Conceitos básicos do registro de esquemas](schema-registry-gs.md) deste documento.

1. Inicie seus produtores e consumidores para usar o registro de esquemas para gravar e ler registros de/para o tópico do Amazon MSK ou Apache Kafka. Um exemplo de código de produtor e consumidor pode ser encontrado no [arquivo ReadMe](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md) das bibliotecas Serde. A biblioteca do registro de esquemas no produtor serializará automaticamente o registro e decorará o registro com um ID de versão do esquema.

1. Se o esquema desse registro tiver sido inserido, ou se o registro automático estiver ativado, o esquema será registrado no registro do esquemas.

1. O consumidor lendo do tópico do Amazon MSK ou Apache Kafka, usando a biblioteca do registro de esquemas do AWS Glue, pesquisará automaticamente o esquema no registro do esquemas.

## Caso de uso: integração do Amazon Kinesis Data Streams ao registro de esquemas do AWS Glue
<a name="schema-registry-integrations-kds"></a>

Essa integração requer que você tenha um fluxo de dados existente do Amazon Kinesis. Para obter mais informações, consulte [Conceitos básicos do Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/getting-started.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

Há duas maneiras de interagir com os dados em um fluxo de dados do Kinesis.
+ Por meio das bibliotecas do Kinesis Producer Library (KPL) e Kinesis Client Library (KCL) em Java. Suporte a várias linguagens não é fornecido.
+ Por maio das APIs `PutRecords`, `PutRecord` e `GetRecords` do Kinesis Data Streams disponíveis no AWS SDK para Java.

Se você usa atualmente as bibliotecas KPL/KCL, recomendamos continuar usando esse método. Há versões atualizadas da KCL e KPL com o registro de esquemas integrado, como mostrado nos exemplos. Caso contrário, você pode usar o código de exemplo para utilizar o registro do esquemas do AWS Glue se estiver usando as APIs do KDS diretamente.

A integração do registro de esquemas só está disponível com a KPL v0.14.2 ou posterior e com a KCL v2.3 ou posterior. A integração do registro de esquemas com JSON só está disponível com a KPL v0.14.8 ou posterior e com a KCL v2.3.6 ou posterior.

### Interagir com dados usando o Kinesis SDK V2
<a name="schema-registry-integrations-kds-sdk-v2"></a>

Esta seção descreve a interação com o Kinesis usando o Kinesis SDK V2

```
// Example JSON Record, you can construct a AVRO record also
private static final JsonDataWithSchema record = JsonDataWithSchema.builder(schemaString, payloadString);
private static final DataFormat dataFormat = DataFormat.JSON;

//Configurations for Schema Registry
GlueSchemaRegistryConfiguration gsrConfig = new GlueSchemaRegistryConfiguration("us-east-1");

GlueSchemaRegistrySerializer glueSchemaRegistrySerializer =
        new GlueSchemaRegistrySerializerImpl(awsCredentialsProvider, gsrConfig);
GlueSchemaRegistryDataFormatSerializer dataFormatSerializer =
        new GlueSchemaRegistrySerializerFactory().getInstance(dataFormat, gsrConfig);

Schema gsrSchema =
        new Schema(dataFormatSerializer.getSchemaDefinition(record), dataFormat.name(), "MySchema");

byte[] serializedBytes = dataFormatSerializer.serialize(record);

byte[] gsrEncodedBytes = glueSchemaRegistrySerializer.encode(streamName, gsrSchema, serializedBytes);

PutRecordRequest putRecordRequest = PutRecordRequest.builder()
        .streamName(streamName)
        .partitionKey("partitionKey")
        .data(SdkBytes.fromByteArray(gsrEncodedBytes))
        .build();
shardId = kinesisClient.putRecord(putRecordRequest)
        .get()
        .shardId();

GlueSchemaRegistryDeserializer glueSchemaRegistryDeserializer = new GlueSchemaRegistryDeserializerImpl(awsCredentialsProvider, gsrConfig);

GlueSchemaRegistryDataFormatDeserializer gsrDataFormatDeserializer =
        glueSchemaRegistryDeserializerFactory.getInstance(dataFormat, gsrConfig);

GetShardIteratorRequest getShardIteratorRequest = GetShardIteratorRequest.builder()
        .streamName(streamName)
        .shardId(shardId)
        .shardIteratorType(ShardIteratorType.TRIM_HORIZON)
        .build();

String shardIterator = kinesisClient.getShardIterator(getShardIteratorRequest)
        .get()
        .shardIterator();

GetRecordsRequest getRecordRequest = GetRecordsRequest.builder()
        .shardIterator(shardIterator)
        .build();
GetRecordsResponse recordsResponse = kinesisClient.getRecords(getRecordRequest)
        .get();

List<Object> consumerRecords = new ArrayList<>();
List<Record> recordsFromKinesis = recordsResponse.records();

for (int i = 0; i < recordsFromKinesis.size(); i++) {
    byte[] consumedBytes = recordsFromKinesis.get(i)
            .data()
            .asByteArray();

    Schema gsrSchema = glueSchemaRegistryDeserializer.getSchema(consumedBytes);
    Object decodedRecord = gsrDataFormatDeserializer.deserialize(ByteBuffer.wrap(consumedBytes),
                                                                    gsrSchema.getSchemaDefinition());
    consumerRecords.add(decodedRecord);
}
```

### Interagir com dados usando as bibliotecas KPL/KCL
<a name="schema-registry-integrations-kds-libraries"></a>

Esta seção descreve a integração do Kinesis Data Streams com o registro de esquemas usando as bibliotecas KPL/KCL. Para obter mais informações sobre o uso da KPL/KCL, consulte [Desenvolver produtores usando a biblioteca de produtor do Amazon Kinesis](https://docs.aws.amazon.com/streams/latest/dev/developing-producers-with-kpl.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

#### Configurar o registro de esquemas na KPL
<a name="schema-registry-integrations-kds-libraries-kpl"></a>

1. Configure a definição do esquema para os dados, o formato de dados e o nome do esquema criados no registro de esquemas do AWS Glue.

1. Opcionalmente, configure o objeto `GlueSchemaRegistryConfiguration`.

1. Transmita o objeto de esquema para `addUserRecord API`.

   ```
   private static final String SCHEMA_DEFINITION = "{"namespace": "example.avro",\n"
   + " "type": "record",\n"
   + " "name": "User",\n"
   + " "fields": [\n"
   + " {"name": "name", "type": "string"},\n"
   + " {"name": "favorite_number", "type": ["int", "null"]},\n"
   + " {"name": "favorite_color", "type": ["string", "null"]}\n"
   + " ]\n"
   + "}";
   
   KinesisProducerConfiguration config = new KinesisProducerConfiguration();
   config.setRegion("us-west-1")
   
   //[Optional] configuration for Schema Registry.
   
   GlueSchemaRegistryConfiguration schemaRegistryConfig =
   new GlueSchemaRegistryConfiguration("us-west-1");
   
   schemaRegistryConfig.setCompression(true);
   
   config.setGlueSchemaRegistryConfiguration(schemaRegistryConfig);
   
   ///Optional configuration ends.
   
   final KinesisProducer producer =
         new KinesisProducer(config);
   
   final ByteBuffer data = getDataToSend();
   
   com.amazonaws.services.schemaregistry.common.Schema gsrSchema =
       new Schema(SCHEMA_DEFINITION, DataFormat.AVRO.toString(), "demoSchema");
   
   ListenableFuture<UserRecordResult> f = producer.addUserRecord(
   config.getStreamName(), TIMESTAMP, Utils.randomExplicitHashKey(), data, gsrSchema);
   
   private static ByteBuffer getDataToSend() {
         org.apache.avro.Schema avroSchema =
           new org.apache.avro.Schema.Parser().parse(SCHEMA_DEFINITION);
   
         GenericRecord user = new GenericData.Record(avroSchema);
         user.put("name", "Emily");
         user.put("favorite_number", 32);
         user.put("favorite_color", "green");
   
         ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
         Encoder encoder = EncoderFactory.get().directBinaryEncoder(outBytes, null);
         new GenericDatumWriter<>(avroSchema).write(user, encoder);
         encoder.flush();
         return ByteBuffer.wrap(outBytes.toByteArray());
    }
   ```

#### Configurar a biblioteca do cliente Kinesis
<a name="schema-registry-integrations-kds-libraries-kcl"></a>

Você desenvolverá seu consumidor da biblioteca do cliente Kinesis em Java. Para obter mais informações, consulte [Desenvolver um consumidor da biblioteca do cliente Kinesis em Java](https://docs.aws.amazon.com/streams/latest/dev/kcl2-standard-consumer-java-example.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

1. Crie uma instância de `GlueSchemaRegistryDeserializer` transmitindo um objeto `GlueSchemaRegistryConfiguration`.

1. Transmita o `GlueSchemaRegistryDeserializer` para `retrievalConfig.glueSchemaRegistryDeserializer`.

1. Acesse o esquema de mensagens recebidas chamando `kinesisClientRecord.getSchema()`.

   ```
   GlueSchemaRegistryConfiguration schemaRegistryConfig =
       new GlueSchemaRegistryConfiguration(this.region.toString());
   
    GlueSchemaRegistryDeserializer glueSchemaRegistryDeserializer =
       new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), schemaRegistryConfig);
   
    RetrievalConfig retrievalConfig = configsBuilder.retrievalConfig().retrievalSpecificConfig(new PollingConfig(streamName, kinesisClient));
    retrievalConfig.glueSchemaRegistryDeserializer(glueSchemaRegistryDeserializer);
   
     Scheduler scheduler = new Scheduler(
               configsBuilder.checkpointConfig(),
               configsBuilder.coordinatorConfig(),
               configsBuilder.leaseManagementConfig(),
               configsBuilder.lifecycleConfig(),
               configsBuilder.metricsConfig(),
               configsBuilder.processorConfig(),
               retrievalConfig
           );
   
    public void processRecords(ProcessRecordsInput processRecordsInput) {
               MDC.put(SHARD_ID_MDC_KEY, shardId);
               try {
                   log.info("Processing {} record(s)",
                   processRecordsInput.records().size());
                   processRecordsInput.records()
                   .forEach(
                       r ->
                           log.info("Processed record pk: {} -- Seq: {} : data {} with schema: {}",
                           r.partitionKey(), r.sequenceNumber(), recordToAvroObj(r).toString(), r.getSchema()));
               } catch (Throwable t) {
                   log.error("Caught throwable while processing records. Aborting.");
                   Runtime.getRuntime().halt(1);
               } finally {
                   MDC.remove(SHARD_ID_MDC_KEY);
               }
    }
   
    private GenericRecord recordToAvroObj(KinesisClientRecord r) {
       byte[] data = new byte[r.data().remaining()];
       r.data().get(data, 0, data.length);
       org.apache.avro.Schema schema = new org.apache.avro.Schema.Parser().parse(r.schema().getSchemaDefinition());
       DatumReader datumReader = new GenericDatumReader<>(schema);
   
       BinaryDecoder binaryDecoder = DecoderFactory.get().binaryDecoder(data, 0, data.length, null);
       return (GenericRecord) datumReader.read(null, binaryDecoder);
    }
   ```

#### Interagir com dados usando as APIs do Kinesis Data Streams
<a name="schema-registry-integrations-kds-apis"></a>

Esta seção descreve a integração do Kinesis Data Streams com o registro de esquemas usando as APIs do Kinesis Data Streams.

1. Atualize estas dependências do Maven:

   ```
   <dependencyManagement>
           <dependencies>
               <dependency>
                   <groupId>com.amazonaws</groupId>
                   <artifactId>aws-java-sdk-bom</artifactId>
                   <version>1.11.884</version>
                   <type>pom</type>
                   <scope>import</scope>
               </dependency>
           </dependencies>
       </dependencyManagement>
   
       <dependencies>
           <dependency>
               <groupId>com.amazonaws</groupId>
               <artifactId>aws-java-sdk-kinesis</artifactId>
           </dependency>
   
           <dependency>
               <groupId>software.amazon.glue</groupId>
               <artifactId>schema-registry-serde</artifactId>
               <version>1.1.5</version>
           </dependency>
   
           <dependency>
               <groupId>com.fasterxml.jackson.dataformat</groupId>
               <artifactId>jackson-dataformat-cbor</artifactId>
               <version>2.11.3</version>
           </dependency>
       </dependencies>
   ```

1. No produtor, adicione as informações de cabeçalho do esquema usando a API `PutRecords` ou `PutRecord` no Kinesis Data Streams.

   ```
   //The following lines add a Schema Header to the record
           com.amazonaws.services.schemaregistry.common.Schema awsSchema =
               new com.amazonaws.services.schemaregistry.common.Schema(schemaDefinition, DataFormat.AVRO.name(),
                   schemaName);
           GlueSchemaRegistrySerializerImpl glueSchemaRegistrySerializer =
               new GlueSchemaRegistrySerializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(getConfigs()));
           byte[] recordWithSchemaHeader =
               glueSchemaRegistrySerializer.encode(streamName, awsSchema, recordAsBytes);
   ```

1. No produtor, use a API `PutRecords` ou `PutRecord` para colocar o registro no fluxo de dados.

1. No consumidor, remova o registro do esquema do cabeçalho e serialize um registro do esquema Avro.

   ```
   //The following lines remove Schema Header from record
           GlueSchemaRegistryDeserializerImpl glueSchemaRegistryDeserializer =
               new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), getConfigs());
           byte[] recordWithSchemaHeaderBytes = new byte[recordWithSchemaHeader.remaining()];
           recordWithSchemaHeader.get(recordWithSchemaHeaderBytes, 0, recordWithSchemaHeaderBytes.length);
           com.amazonaws.services.schemaregistry.common.Schema awsSchema =
               glueSchemaRegistryDeserializer.getSchema(recordWithSchemaHeaderBytes);
           byte[] record = glueSchemaRegistryDeserializer.getData(recordWithSchemaHeaderBytes);
   
           //The following lines serialize an AVRO schema record
           if (DataFormat.AVRO.name().equals(awsSchema.getDataFormat())) {
               Schema avroSchema = new org.apache.avro.Schema.Parser().parse(awsSchema.getSchemaDefinition());
               Object genericRecord = convertBytesToRecord(avroSchema, record);
               System.out.println(genericRecord);
           }
   ```

#### Interagir com dados usando as APIs do Kinesis Data Streams
<a name="schema-registry-integrations-kds-apis-reference"></a>

O código de exemplo a seguir usa as APIs `PutRecords` e `GetRecords`.

```
//Full sample code
import com.amazonaws.services.schemaregistry.deserializers.GlueSchemaRegistryDeserializerImpl;
import com.amazonaws.services.schemaregistry.serializers.GlueSchemaRegistrySerializerImpl;
import com.amazonaws.services.schemaregistry.utils.AVROUtils;
import com.amazonaws.services.schemaregistry.utils.AWSSchemaRegistryConstants;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.services.glue.model.DataFormat;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;


public class PutAndGetExampleWithEncodedData {
    static final String regionName = "us-east-2";
    static final String streamName = "testStream1";
    static final String schemaName = "User-Topic";
    static final String AVRO_USER_SCHEMA_FILE = "src/main/resources/user.avsc";
    KinesisApi kinesisApi = new KinesisApi();

    void runSampleForPutRecord() throws IOException {
        Object testRecord = getTestRecord();
        byte[] recordAsBytes = convertRecordToBytes(testRecord);
        String schemaDefinition = AVROUtils.getInstance().getSchemaDefinition(testRecord);

        //The following lines add a Schema Header to a record
        com.amazonaws.services.schemaregistry.common.Schema awsSchema =
            new com.amazonaws.services.schemaregistry.common.Schema(schemaDefinition, DataFormat.AVRO.name(),
                schemaName);
        GlueSchemaRegistrySerializerImpl glueSchemaRegistrySerializer =
            new GlueSchemaRegistrySerializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(regionName));
        byte[] recordWithSchemaHeader =
            glueSchemaRegistrySerializer.encode(streamName, awsSchema, recordAsBytes);

        //Use PutRecords api to pass a list of records
        kinesisApi.putRecords(Collections.singletonList(recordWithSchemaHeader), streamName, regionName);

        //OR
        //Use PutRecord api to pass single record
        //kinesisApi.putRecord(recordWithSchemaHeader, streamName, regionName);
    }

    byte[] runSampleForGetRecord() throws IOException {
        ByteBuffer recordWithSchemaHeader = kinesisApi.getRecords(streamName, regionName);

        //The following lines remove the schema registry header
        GlueSchemaRegistryDeserializerImpl glueSchemaRegistryDeserializer =
            new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(regionName));
        byte[] recordWithSchemaHeaderBytes = new byte[recordWithSchemaHeader.remaining()];
        recordWithSchemaHeader.get(recordWithSchemaHeaderBytes, 0, recordWithSchemaHeaderBytes.length);

        com.amazonaws.services.schemaregistry.common.Schema awsSchema =
            glueSchemaRegistryDeserializer.getSchema(recordWithSchemaHeaderBytes);

        byte[] record = glueSchemaRegistryDeserializer.getData(recordWithSchemaHeaderBytes);

        //The following lines serialize an AVRO schema record
        if (DataFormat.AVRO.name().equals(awsSchema.getDataFormat())) {
            Schema avroSchema = new org.apache.avro.Schema.Parser().parse(awsSchema.getSchemaDefinition());
            Object genericRecord = convertBytesToRecord(avroSchema, record);
            System.out.println(genericRecord);
        }

        return record;
    }

    private byte[] convertRecordToBytes(final Object record) throws IOException {
        ByteArrayOutputStream recordAsBytes = new ByteArrayOutputStream();
        Encoder encoder = EncoderFactory.get().directBinaryEncoder(recordAsBytes, null);
        GenericDatumWriter datumWriter = new GenericDatumWriter<>(AVROUtils.getInstance().getSchema(record));
        datumWriter.write(record, encoder);
        encoder.flush();
        return recordAsBytes.toByteArray();
    }

    private GenericRecord convertBytesToRecord(Schema avroSchema, byte[] record) throws IOException {
        final GenericDatumReader<GenericRecord> datumReader = new GenericDatumReader<>(avroSchema);
        Decoder decoder = DecoderFactory.get().binaryDecoder(record, null);
        GenericRecord genericRecord = datumReader.read(null, decoder);
        return genericRecord;
    }

    private Map<String, String> getMetadata() {
        Map<String, String> metadata = new HashMap<>();
        metadata.put("event-source-1", "topic1");
        metadata.put("event-source-2", "topic2");
        metadata.put("event-source-3", "topic3");
        metadata.put("event-source-4", "topic4");
        metadata.put("event-source-5", "topic5");
        return metadata;
    }

    private GlueSchemaRegistryConfiguration getConfigs() {
        GlueSchemaRegistryConfiguration configs = new GlueSchemaRegistryConfiguration(regionName);
        configs.setSchemaName(schemaName);
        configs.setAutoRegistration(true);
        configs.setMetadata(getMetadata());
        return configs;
    }

    private Object getTestRecord() throws IOException {
        GenericRecord genericRecord;
        Schema.Parser parser = new Schema.Parser();
        Schema avroSchema = parser.parse(new File(AVRO_USER_SCHEMA_FILE));

        genericRecord = new GenericData.Record(avroSchema);
        genericRecord.put("name", "testName");
        genericRecord.put("favorite_number", 99);
        genericRecord.put("favorite_color", "red");

        return genericRecord;
    }
}
```

## Caso de uso: Amazon Managed Service for Apache Flink
<a name="schema-registry-integrations-kinesis-data-analytics-apache-flink"></a>

O Apache Flink é um framework de código aberto popular e mecanismo de processamento distribuído para computações com estado sobre fluxos de dados vinculados e não vinculados. O Amazon Managed Service for Apache Flink é um serviço totalmente gerenciado da AWS que permite a criação e o gerenciamento de aplicações do Apache Flink para processar dados de transmissão.

O Apache Flink de código aberto fornece uma série de fontes e coletores. Por exemplo, origens de dados predefinidas incluem leitura de arquivos, diretórios e soquetes e ingestão de dados de coleções e iteradores. Os conectores Apache Flink DataStream fornecem código para o Apache Flink para realizar a interface com vários sistemas de terceiros, como Apache Kafka ou Kinesis, como fontes e/ou coletores.

Para obter mais informações, consulte o [Guia do desenvolvedor do Amazon Kinesis Data Analytics](https://docs.aws.amazon.com/kinesisanalytics/latest/java/what-is.html).

### Conector Apache Flink Kafka
<a name="schema-registry-integrations-kafka-connector"></a>

O Apache Flink fornece um conector de fluxo de dados Apache Kafka para leitura e gravação de dados em tópicos do Kafka com garantias do tipo exatamente uma. Consumidor Kafka do Flink, `FlinkKafkaConsumer`, fornece acesso à leitura de um ou mais tópicos do Kafka. O produtor Kafka do Apache Flink, `FlinkKafkaProducer`, permite gravar uma transmissão de registros para um ou mais tópicos do Kafka. Para obter mais informações, consulte [Conector do Apache Kafka](https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/kafka.html).

### Conector de fluxos do Kinesis do Apache Flink
<a name="schema-registry-integrations-kinesis-connector"></a>

O conector de transmissão de dados do Kinesis fornece acesso aos Amazon Kinesis Data Streams. O `FlinkKinesisConsumer` é uma origem de dados de transmissão paralelo do tipo exatamente uma vez que assina várias transmissões do Kinesis dentro da mesma região de produto da AWS e que pode manipular de forma transparente a refragmentação de transmissões enquanto o trabalho é executado. Cada subtarefa do consumidor é responsável por buscar registros de dados de vários fragmentos do Kinesis. O número de fragmentos obtidos por cada subtarefa será alterado à medida que os fragmentos forem fechados e criados pelo Kinesis. O `FlinkKinesisProducer` usa a Kinesis Producer Library (KPL) para colocar dados de uma transmissão do Apache Flink em uma transmissão do Kinesis. Para obter mais informações, consulte [Conector do Amazon Kinesis Streams](https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/connectors/kinesis.html).

Para obter mais informações, consulte o [repositório do GitHub de registro do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

### Integração com o Apache Flink
<a name="schema-registry-integrations-apache-flink-integrate"></a>

A biblioteca SerDes fornecida com o registro de esquemas se integra com o Apache Flink. Para trabalhar com o Apache Flink, é necessário implementar as interfaces [https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/util/serialization/SerializationSchema.java](https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/util/serialization/SerializationSchema.java) e [https://github.com/apache/flink/blob/8674b69964eae50cad024f2c5caf92a71bf21a09/flink-core/src/main/java/org/apache/flink/api/common/serialization/DeserializationSchema.java](https://github.com/apache/flink/blob/8674b69964eae50cad024f2c5caf92a71bf21a09/flink-core/src/main/java/org/apache/flink/api/common/serialization/DeserializationSchema.java) chamadas `GlueSchemaRegistryAvroSerializationSchema` e `GlueSchemaRegistryAvroDeserializationSchema`, que você pode vincular aos conectores do Apache Flink.

### Adicionar uma dependência do registro do esquemas do AWS Glue na aplicação do Apache Flink
<a name="schema-registry-integrations-kinesis-data-analytics-dependencies"></a>

Para configurar as dependências de integração para o registro de esquemas do AWS Glue na aplicação do Apache Flink:

1. Adicione a dependência ao arquivo `pom.xml`.

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

#### Integração do Kafka ou do Amazon MSK com o Apache Flink
<a name="schema-registry-integrations-kda-integrate-msk"></a>

Você pode usar o Managed Service for Apache Flink, com o Kafka como fonte ou com o Kafka como coletor.

**Kafka como uma fonte**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kafka como uma fonte.

![\[Kafka como uma fonte.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kafka-source.png)


**Kafka como um coletor**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kafka como uma coletor.

![\[Kafka como um coletor.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kafka-sink.png)


Para integrar o Kafka (ou o Amazon MSK) com o Managed Service for Apache Flink com o Kafka como uma fonte ou como um coletor, faça as alterações de código abaixo. Adicione os blocos de código em negrito ao seu respectivo código nas seções análogas.

Se o Kafka for a fonte, use o código de desserialização (bloco 2). Se o Kafka for o coletor, use o código serializador (bloco 3).

```
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

String topic = "topic";
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
properties.setProperty("group.id", "test");

// block 1
Map<String, Object> configs = new HashMap<>();
configs.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
configs.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
configs.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());

FlinkKafkaConsumer<GenericRecord> consumer = new FlinkKafkaConsumer<>(
    topic,
    // block 2
    GlueSchemaRegistryAvroDeserializationSchema.forGeneric(schema, configs),
    properties);

FlinkKafkaProducer<GenericRecord> producer = new FlinkKafkaProducer<>(
    topic,
    // block 3
    GlueSchemaRegistryAvroSerializationSchema.forGeneric(schema, topic, configs),
    properties);

DataStream<GenericRecord> stream = env.addSource(consumer);
stream.addSink(producer);
env.execute();
```

#### Integração do Kinesis Data Streams com o Apache Flink
<a name="schema-registry-integrations-integrate-kds"></a>

Você pode usar o Managed Service for Apache Flink com o Kinesis Data Streams como fonte ou como coletor.

**Kinesis Data Streams como uma fonte**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kinesis Data Streams como uma fonte.

![\[Kinesis Data Streams como uma fonte.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kinesis-source.png)


**Kinesis Data Streams como um coletor**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kinesis Data Streams como uma coletor.

![\[Kinesis Data Streams como um coletor.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kinesis-sink.png)


Para integrar o Kinesis Data Streams com o Managed Service for Apache Flink com o Kinesis Data Streams como uma origem ou como um coletor, faça as alterações de código abaixo. Adicione os blocos de código em negrito ao seu respectivo código nas seções análogas.

Se o Kinesis Data Streams for a fonte, use o código de desserialização (bloco 2). Se o Kinesis Data Streams for o coletor, use o código de serialização (bloco 3).

```
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

String streamName = "stream";
Properties consumerConfig = new Properties();
consumerConfig.put(AWSConfigConstants.AWS_REGION, "aws-region");
consumerConfig.put(AWSConfigConstants.AWS_ACCESS_KEY_ID, "aws_access_key_id");
consumerConfig.put(AWSConfigConstants.AWS_SECRET_ACCESS_KEY, "aws_secret_access_key");
consumerConfig.put(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST");

// block 1
Map<String, Object> configs = new HashMap<>();
configs.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
configs.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
configs.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());

FlinkKinesisConsumer<GenericRecord> consumer = new FlinkKinesisConsumer<>(
    streamName,
    // block 2
    GlueSchemaRegistryAvroDeserializationSchema.forGeneric(schema, configs),
    properties);

FlinkKinesisProducer<GenericRecord> producer = new FlinkKinesisProducer<>(
    // block 3
    GlueSchemaRegistryAvroSerializationSchema.forGeneric(schema, topic, configs),
    properties);
producer.setDefaultStream(streamName);
producer.setDefaultPartition("0");

DataStream<GenericRecord> stream = env.addSource(consumer);
stream.addSink(producer);
env.execute();
```

## Caso de uso: integração com o AWS Lambda
<a name="schema-registry-integrations-aws-lambda"></a>

Para usar uma função do AWS Lambda como um consumidor do Apache Kafka/Amazon MSK e desserializar mensagens codificadas em Avro usando o registro de esquemas do AWS Glue, acesse a [página do MSK Labs](https://amazonmsk-labs.workshop.aws/en/msklambda/gsrschemareg.html).

## Caso de uso: AWS Glue Data Catalog
<a name="schema-registry-integrations-aws-glue-data-catalog"></a>

As tabelas do AWS Glue suportam esquemas que você pode especificar manualmente ou por referência aoregistro de esquemas do AWS Glue. O registro de esquemas se integra ao Data Catalog para permitir que você opcionalmente use esquemas armazenados no registro de esquemas ao criar ou atualizar tabelas ou partições do AWS Glue no Data Catalog. Para identificar uma definição de esquema no registro de esquemas, no mínimo, você precisa saber o ARN do esquema do qual ele faz parte. Uma versão de esquema que contém uma definição de esquema pode ser referenciada por seu UUID ou número de versão. Há sempre uma versão de esquema, a versão “mais recente”, que pode ser pesquisada sem saber seu número de versão ou UUID.

Ao chamar as operações `CreateTable` ou `UpdateTable`, você transmitirá uma estrutura `TableInput` que contém um `StorageDescriptor`, que pode ter uma `SchemaReference` para um esquema existente no registro de esquemas. Da mesma forma, quando você chama as APIs `GetTable` ou `GetPartition`, a resposta pode conter o esquema e a `SchemaReference`. Quando uma tabela ou partição é criada usando referências de esquema, o Data Catalog tenta buscar o esquema para essa referência. Caso não seja possível localizar o esquema no registro de esquemas, ele retorna um esquema vazio na reposta de `GetTable`. Caso contrário, a resposta possui o esquema e a referência do esquema.

Também é possível executar as ações no console do AWS Glue.

Para realizar essas operações e criar, atualizar ou exibir informações de esquema, você deve conceder ao usuário que faz a chamada um perfil do IAM que forneça permissões para a API `GetSchemaVersion`.

### Adicionar uma tabela ou atualizar o esquema de uma tabela
<a name="schema-registry-integrations-aws-glue-data-catalog-table"></a>

A adição de uma nova tabela a partir de um esquema existente vincula a tabela a uma versão específica do esquema. Depois que as novas versões de esquema forem registradas, você poderá atualizar essa definição de tabela na página View table (Exibir tabela) no console do AWS Glue ou usando a API [Ação UpdateTable (Python: update\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-UpdateTable).

#### Adicionar uma tabela de um esquema existente
<a name="schema-registry-integrations-aws-glue-data-catalog-table-existing"></a>

É possível criar uma tabela do AWS Glue a partir de uma versão de esquema no registro usando o console do AWS Glue ou a API `CreateTable`.

**AWS GlueAPI**  
Ao chamar a API `CreateTable`, você transmitirá uma `TableInput` que contém um `StorageDescriptor` que, por sua vez, contém uma `SchemaReference` para um esquema existente no registro de esquemas.

**AWS GlueConsole do**  
Para criar uma tabela no console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Tables** (Tabelas).

1. No menu **Add Tables** (Adicionar tabelas), escolha **Add table from existing schema** (Adicionar tabela do esquema existente).

1. Configure as propriedades da tabela e o datastore de acordo com o guia do desenvolvedor do AWS Glue.

1. Na página **Choose a Glue schema** (Escolher um esquema do Glue), selecione o **Registry** (Registro) em que o esquema reside.

1. Escolha o **Schema name** (Nome do esquema) e selecione a **Version** (Versão) do esquema a ser aplicada.

1. Revise a pré-visualização do esquema e escolha **Next** (Próximo).

1. Revise e crie a tabela.

O esquema e a versão aplicada à tabela são exibidos na coluna **Glue schema** (Esquema do Glue) na lista de tabelas. Você pode exibir a tabela para ver mais detalhes.

#### Atualizar o esquema de uma tabela
<a name="schema-registry-integrations-aws-glue-data-catalog-table-updating"></a>

Quando uma nova versão de esquema se torna disponível, você pode querer atualizar o esquema de uma tabela usando a API [Ação UpdateTable (Python: update\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-UpdateTable) ou o console do AWS Glue. 

**Importante**  
Ao atualizar o esquema de uma tabela existente que tenha um esquema do AWS Glue especificado manualmente, o novo esquema referenciado no registro de esquemas pode ser incompatível. Isso pode resultar na falha de seus trabalhos.

**AWS GlueAPI**  
Ao chamar a API `UpdateTable`, você transmitirá uma `TableInput` que contém um `StorageDescriptor` que, por sua vez, contém uma `SchemaReference` para um esquema existente no registro de esquemas.

**AWS GlueConsole do**  
Para atualizar o esquema de uma tabela a partir do console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\).

1. No painel de navegação, em **Data catalog** (Catálogo de dados), escolha **Tables** (Tabelas).

1. Exiba a tabela na lista de tabelas.

1. Clique em **Update schema** (Atualizar esquema) na caixa que informa sobre uma nova versão.

1. Revise as diferenças entre o esquema atual e o novo.

1. Escolha **Show all schema differences** (Mostrar todas as diferenças do esquema) para ver mais detalhes.

1. Escolha **Save table** (Salvar tabela) para aceitar a nova versão.

## Caso de uso: transmissão no AWS Glue
<a name="schema-registry-integrations-aws-glue-streaming"></a>

AWS GlueA transmissão no consome dados de fontes de transmissão e executa operações de ETL antes de gravar em um coletor de saída. É possível especificar a fonte de entrada da transmissão usando uma tabela de dados ou diretamente, especificando a configuração da fonte.

A transmissão no AWS Glue oferece suporte a uma tabela do tipo Data Catalog para a fonte de transmissão criada com o esquema presente no AWS Glue Schema Registry. Você pode criar um esquema no AWS Glue Schema Registry e criar uma tabela do AWS Glue com uma fonte de transmissão usando esse esquema. Essa tabela do AWS Glue pode ser usada como entrada para um trabalho de transmissão do AWS Glue para desserialização de dados no fluxo de entrada.

É importante ressaltar que quando o esquema no AWS Glue Schema Registry muda, você precisa reiniciar o trabalho de transmissão do AWS Glue para refletir as alterações no esquema.

## Caso de uso: Apache Kafka Streams
<a name="schema-registry-integrations-apache-kafka-streams"></a>

A API Apache Kafka Streams é uma biblioteca cliente para processamento e análise de dados armazenados no Apache Kafka. Esta seção descreve a integração do Apache Kafka Streams com o registro de esquemas do AWS Glue, que permite que você gerencie e imponha esquemas em suas aplicações de transmissão de dados. Para obter mais informações sobre o Apache Kafka Streams, consulte [Apache Kafka Streams](https://kafka.apache.org/documentation/streams/).

### Integração com as bibliotecas SerDes
<a name="schema-registry-integrations-apache-kafka-streams-integrate"></a>

Existe uma classe `GlueSchemaRegistryKafkaStreamsSerde` com a qual você pode configurar uma aplicação do Streams.

#### Código de exemplo da aplicação Kafka Streams
<a name="schema-registry-integrations-apache-kafka-streams-application"></a>

Para usar o registro de esquemas do AWS Glue dentro de uma aplicação Apache Kafka Streams:

1. Configure a aplicação Kafka Streams.

   ```
   final Properties props = new Properties();
       props.put(StreamsConfig.APPLICATION_ID_CONFIG, "avro-streams");
       props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
       props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
       props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
       props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, AWSKafkaAvroSerDe.class.getName());
       props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
   
       props.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
       props.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
       props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());
   	props.put(AWSSchemaRegistryConstants.DATA_FORMAT, DataFormat.AVRO.name());
   ```

1. Crie uma transmissão a partir do tópico avro-input.

   ```
   StreamsBuilder builder = new StreamsBuilder();
   final KStream<String, GenericRecord> source = builder.stream("avro-input");
   ```

1. Processe os registros de dados (o exemplo filtra aqueles registros cujo valor de favorite\$1color é rosa ou onde o valor de quantidade é 15).

   ```
   final KStream<String, GenericRecord> result = source
       .filter((key, value) -> !"pink".equals(String.valueOf(value.get("favorite_color"))));
       .filter((key, value) -> !"15.0".equals(String.valueOf(value.get("amount"))));
   ```

1. Grave os resultados de volta no tópico avro-output.

   ```
   result.to("avro-output");
   ```

1. Inicie a aplicação Apache Kafka Streams.

   ```
   KafkaStreams streams = new KafkaStreams(builder.build(), props);
   streams.start();
   ```

#### Resultados de implantação
<a name="schema-registry-integrations-apache-kafka-streams-results"></a>

Esses resultados mostram o processo de filtragem de registros que foram filtrados na etapa 3 como um favorite\$1color “rosa” ou o valor “15,0”.

Registros antes da filtragem:

```
{"name": "Sansa", "favorite_number": 99, "favorite_color": "white"}
{"name": "Harry", "favorite_number": 10, "favorite_color": "black"}
{"name": "Hermione", "favorite_number": 1, "favorite_color": "red"}
{"name": "Ron", "favorite_number": 0, "favorite_color": "pink"}
{"name": "Jay", "favorite_number": 0, "favorite_color": "pink"}

{"id": "commute_1","amount": 3.5}
{"id": "grocery_1","amount": 25.5}
{"id": "entertainment_1","amount": 19.2}
{"id": "entertainment_2","amount": 105}
	{"id": "commute_1","amount": 15}
```

Registros após a filtragem:

```
{"name": "Sansa", "favorite_number": 99, "favorite_color": "white"}
{"name": "Harry", "favorite_number": 10, "favorite_color": "black"}
{"name": "Hermione", "favorite_number": 1, "favorite_color": "red"}
{"name": "Ron", "favorite_number": 0, "favorite_color": "pink"}

{"id": "commute_1","amount": 3.5}
{"id": "grocery_1","amount": 25.5}
{"id": "entertainment_1","amount": 19.2}
{"id": "entertainment_2","amount": 105}
```

### Caso de uso: Apache Kafka Connect
<a name="schema-registry-integrations-apache-kafka-connect"></a>

A integração do Apache Kafka Connect com o registro de esquemas do AWS Glue permite que você obtenha informações de esquema dos conectores. Os conversores Apache Kafka especificam o formato dos dados dentro do Apache Kafka e como traduzi-los em dados do Apache Kafka Connect. Cada usuário do Apache Kafka Connect precisará configurar esses conversores com base no formato em que deseja que seus dados sejam carregados do, ou armazenados no, Apache Kafka. Desta forma, você pode definir seus próprios conversores para traduzir os dados do Apache Kafka Connect para o tipo usado no registro de esquemas do AWS Glue (por exemplo: Avro) e utilizar nosso serializador para registrar seu esquema e fazer a serialização. Em seguida, os conversores também são capazes de usar nosso desserializador para desserializar os dados recebidos do Apache Kafka e convertê-los de volta em dados do Apache Kafka Connect. Um exemplo de diagrama de fluxo de trabalho é dado abaixo.

![\[Fluxo de trabalho do Apache Kafka Connect.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_int_kafka_connect.png)


1. Instale o projeto `aws-glue-schema-registry` clonando o [repositório do Github para o registro de esquemas do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

   ```
   git clone git@github.com:awslabs/aws-glue-schema-registry.git
   cd aws-glue-schema-registry
   mvn clean install
   mvn dependency:copy-dependencies
   ```

1. Se você planeja usar o Apache Kafka Connect no modo *autônomo*, atualize **connect-standalone.properties** usando as instruções abaixo para esta etapa. Se você planeja usar o Apache Kafka Connect no modo *distribuído*, atualize **connect-avro-distributed.properties** usando as mesmas instruções.

   1. Adicione essas propriedades também ao arquivo de propriedades de conexão do Apache Kafka:

      ```
      key.converter.region=aws-region
      value.converter.region=aws-region
      key.converter.schemaAutoRegistrationEnabled=true
      value.converter.schemaAutoRegistrationEnabled=true
      key.converter.avroRecordType=GENERIC_RECORD
      value.converter.avroRecordType=GENERIC_RECORD
      ```

   1. Adicione o comando abaixo à seção **Launch mode** (Modo de execução) em **kafka-run-class.sh**:

      ```
      -cp $CLASSPATH:"<your AWS GlueSchema Registry base directory>/target/dependency/*"
      ```

1. Adicione o comando abaixo à seção **Launch mode** (Modo de execução) em **kafka-run-class.sh**

   ```
   -cp $CLASSPATH:"<your AWS GlueSchema Registry base directory>/target/dependency/*" 
   ```

   A aparência deve ser semelhante a esta:

   ```
   # Launch mode
   if [ "x$DAEMON_MODE" = "xtrue" ]; then
     nohup "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH:"/Users/johndoe/aws-glue-schema-registry/target/dependency/*" $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
   else
     exec "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH:"/Users/johndoe/aws-glue-schema-registry/target/dependency/*" $KAFKA_OPTS "$@"
   fi
   ```

1. Se estiver usando bash, execute os comandos abaixo para configurar seu CLASSPATH em seu bash\$1profile. Para qualquer outro shell, atualize o ambiente de acordo.

   ```
   echo 'export GSR_LIB_BASE_DIR=<>' >>~/.bash_profile
   echo 'export GSR_LIB_VERSION=1.0.0' >>~/.bash_profile
   echo 'export KAFKA_HOME=<your Apache Kafka installation directory>' >>~/.bash_profile
   echo 'export CLASSPATH=$CLASSPATH:$GSR_LIB_BASE_DIR/avro-kafkaconnect-converter/target/schema-registry-kafkaconnect-converter-$GSR_LIB_VERSION.jar:$GSR_LIB_BASE_DIR/common/target/schema-registry-common-$GSR_LIB_VERSION.jar:$GSR_LIB_BASE_DIR/avro-serializer-deserializer/target/schema-registry-serde-$GSR_LIB_VERSION.jar' >>~/.bash_profile
   source ~/.bash_profile
   ```

1. (Opcional) Se você quiser testar com uma fonte de arquivo simples, clone o conector da fonte do arquivo.

   ```
   git clone https://github.com/mmolimar/kafka-connect-fs.git
   cd kafka-connect-fs/
   ```

   1. Na configuração do conector da fonte, edite o formato de dados para Avro, leitor de arquivos para `AvroFileReader` e atualize um objeto Avro de exemplo a partir do caminho do arquivo em que você está lendo. Por exemplo:

      ```
      vim config/kafka-connect-fs.properties
      ```

      ```
      fs.uris=<path to a sample avro object>
      policy.regexp=^.*\.avro$
      file_reader.class=com.github.mmolimar.kafka.connect.fs.file.reader.AvroFileReader
      ```

   1. Instale o conector da fonte.

      ```
      mvn clean package
      echo "export CLASSPATH=\$CLASSPATH:\"\$(find target/ -type f -name '*.jar'| grep '\-package' | tr '\n' ':')\"" >>~/.bash_profile
      source ~/.bash_profile
      ```

   1. Atualize as propriedades do coletor em `<your Apache Kafka installation directory>/config/connect-file-sink.properties`, atualize o nome do tópico e o nome do arquivo de saída.

      ```
      file=<output file full path>
      topics=<my topic>
      ```

1. Inicie o conector da fonte (neste exemplo, é um conector de fonte de arquivo).

   ```
   $KAFKA_HOME/bin/connect-standalone.sh $KAFKA_HOME/config/connect-standalone.properties config/kafka-connect-fs.properties
   ```

1. Execute o conector do coletor (neste exemplo, é um conector de coletor de arquivos).

   ```
   $KAFKA_HOME/bin/connect-standalone.sh $KAFKA_HOME/config/connect-standalone.properties $KAFKA_HOME/config/connect-file-sink.properties
   ```

   Para obter um exemplo de uso do Kafka Connect, veja o script run-local-tests.sh na pasta de testes de integração no [repositório do Github para o registro de esquemas do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry/tree/master/integration-tests).

# Migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue
<a name="schema-registry-integrations-migration"></a>

A migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue tem uma dependência do registro de esquemas de terceiros existente e atual. Se houver registros em um tópico do Apache Kafka que tenham sido enviados usando um registro de esquemas de terceiros, os consumidores precisarão do registro de esquemas de terceiros para desserializar esses registros. O `AWSKafkaAvroDeserializer` fornece a capacidade de especificar uma classe secundária de desserialização que aponta para o desserializador de terceiros e é usada para desserializar esses registros.

Há dois critérios para desativação de um esquema de terceiros. Primeiro, a desativação pode ocorrer somente depois que os registros nos tópicos do Apache Kafka usando o registro de esquemas de terceiros não são mais exigidos por e para qualquer consumidor. Em segundo lugar, a desativação pode ocorrer com o vencimento dos tópicos do Apache Kafka, dependendo do período de retenção especificado para esses tópicos. Observe que, se você tiver tópicos com retenção infinita, ainda poderá migrar para o registro de esquemas do AWS Glue, mas não poderá desativar o registro de esquemas de terceiros. Como solução alternativa, você pode usar uma aplicação ou Mirror Maker 2 para ler o tópico atual e produzir para um novo tópico com o registro de esquemas do AWS Glue.

Migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue:

1. Crie um registro no registro de esquemas do AWS Glue ou use o registro padrão.

1. Interrompa o consumidor. Modifique-o para incluir o registro de esquemas do AWS Glue como o principal desserializador e o registro de esquemas de terceiros como o secundário. 
   + Defina as propriedades do consumidor. Neste exemplo, o secondary\$1deserializer é definido como um desserializador diferente. O comportamento é o seguinte: o consumidor recupera registros do Amazon MSK e primeiro tenta usar o `AWSKafkaAvroDeserializer`. Se não for possível ler o byte mágico que contém o ID do esquema Avro para o esquema do registro do esquemas do AWS Glue, o `AWSKafkaAvroDeserializer` tenta usar a classe do desserializador fornecida no secondary\$1deserializer. As propriedades específicas do desserializador secundário também precisam ser fornecidas nas propriedades do consumidor, como schema\$1registry\$1url\$1config e specific\$1avro\$1reader\$1config, como mostrado abaixo.

     ```
     consumerProps.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
     consumerProps.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, AWSKafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, KafkaClickstreamConsumer.gsrRegion);
     consumerProps.setProperty(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, KafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "URL for third-party schema registry");
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, "true");
     ```

1. Reinicie o consumidor.

1. Interrompa o produtor e aponte o produtor para o registro de esquemas do AWS Glue.

   1. Defina as propriedades do produtor. Neste exemplo, o produtor usará as versões de esquema de registro padrão e registro automático.

      ```
      producerProps.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
      producerProps.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AWSKafkaAvroSerializer.class.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");
      producerProps.setProperty(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.SPECIFIC_RECORD.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true");
      ```

1. (Opcional) Mova manualmente esquemas e versões de esquema existentes do registro de esquemas de terceiros atual para o registro de esquemas do AWS Glue, seja para o registro padrão no registro de esquemas do AWS Glue ou para um registro não padrão específico no registro de esquemas do AWS Glue. Isso pode ser feito exportando esquemas dos registros de esquemas de terceiros no formato JSON e criando novos esquemas no registro de esquemas do AWS Glue usando o Console de gerenciamento da AWS ou a AWS CLI.

    Esta etapa pode ser importante se você precisar habilitar verificações de compatibilidade com versões de esquema anteriores para versões de esquema recém-criadas usando a AWS CLI e o Console de gerenciamento da AWS. Ou quando os produtores enviam mensagens com um novo esquema com registro automático de versões de esquema ativado.

1. Inicie o produtor.