

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

# Stream de dados do diário do Amazon QLDB
<a name="streams"></a>

**Importante**  
Aviso de fim do suporte: os clientes existentes poderão usar o Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte [Migrar um Amazon QLDB Ledger para o Amazon](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/) Aurora PostgreSQL.

O Amazon QLDB usa um log transacional imutável, conhecido como *diário*, para armazenamento de dados. O diário rastreia todas as alterações em seus dados confirmados e mantém um histórico de alterações completo e verificável ao longo do tempo.

Você pode criar um *fluxo* no QLDB que captura todas as revisões de documentos confirmadas em seu diário e entrega esses dados ao [Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams) quase em tempo real. Um fluxo QLDB é um fluxo contínuo de dados do diário do seu ledger para um recurso de fluxo de dados do Kinesis.

Em seguida, você usa a plataforma de streaming Kinesis ou a *Biblioteca de cliente Kinesis* para consumir seu fluxo, processar os registros de dados e analisar o conteúdo dos dados. Um fluxo do QLDB grava seus dados no Kinesis Data Streams em três tipos de registros: *controle*, *resumo do bloco*, e *detalhes da revisão*. Para obter mais informações, consulte [Registros de fluxo do QLDB no Kinesis](streams.records.md).

**Topics**
+ [Casos de uso comuns](#streams.use-cases)
+ [Consumindo seu fluxo](#streams.consuming)
+ [Garantia de entrega](#streams.delivery)
+ [Considerações sobre latência de entrega](#streams.delivery-latency)
+ [Introdução aos fluxos](#streams.getting-started)
+ [Criar e gerenciar fluxos no QLDB](streams.create.md)
+ [Desenvolver com fluxos no QLDB](streams.sdk.md)
+ [Registros de fluxo do QLDB no Kinesis](streams.records.md)
+ [Permissões de fluxo no QLDB](streams.perms.md)
+ [Erros comuns para fluxos de diário no QLDB](streams.errors.md)

## Casos de uso comuns
<a name="streams.use-cases"></a>

O streaming permite que você use o QLDB como uma fonte única e verificável de verdade, ao mesmo tempo em que integra os dados do seu diário a outros serviços. A seguir estão alguns dos casos de uso comuns suportados pelos fluxos de diários do QLDB:
+ **Arquitetura orientada a eventos**: crie aplicativos em um estilo arquitetônico orientado por eventos com componentes desacoplados. Por exemplo, um banco pode usar AWS Lambda funções para implementar um sistema de notificação que alerta os clientes quando o saldo da conta cai abaixo de um limite. Nesse sistema, os saldos das contas são mantidos em um ledger do QLDB e quaisquer alterações no saldo são registradas no diário. A AWS Lambda função pode acionar a lógica de notificação ao consumir um evento de atualização de saldo que é confirmado no diário e enviado para um stream de dados do Kinesis.
+ **Análise em tempo real**: crie aplicativos de consumo da Kinesis que executam análises em tempo real sobre dados de eventos. Com esse recurso, você pode obter insights quase em tempo real e responder rapidamente a um ambiente de negócios em constante mudança. Por exemplo, um site de comércio eletrônico pode analisar dados de vendas de produtos e interromper os anúncios de um produto com desconto assim que as vendas atingirem um limite.
+ **Análise histórica**: aproveite a arquitetura orientada a diários do Amazon QLDB reproduzindo dados históricos de eventos. Você pode optar por iniciar um fluxo do QLDB a partir de qualquer momento no passado, no qual todas as revisões desde aquela época são entregues ao Kinesis Data Streams. Usando esse atributo, você pode criar aplicativos de consumo do Kinesis que executam trabalhos de análise em dados históricos. Por exemplo, um site de comércio eletrônico pode executar análises conforme necessário para gerar métricas de vendas anteriores que não foram capturadas anteriormente.
+ **Replicação para bancos de dados com propósito específico**: conecte os ledgers do QLDB a outros armazenamentos de dados específicos usando fluxos de diário do QLDB. Por exemplo, use a plataforma de dados de streaming Kinesis para se integrar ao Amazon OpenSearch Service, que pode fornecer recursos de pesquisa de texto completo para documentos QLDB. Você também pode criar aplicativos de consumo personalizados do Kinesis para replicar os dados do diário em outros bancos de dados com propósito específico que fornecem diferentes visões materializadas. Por exemplo, replique para o Amazon Aurora para obter dados relacionais ou para o Amazon Neptune para dados baseados em gráficos.

## Consumindo seu fluxo
<a name="streams.consuming"></a>

Use o Kinesis Data Streams para consumir, processar e analisar continuamente grandes fluxos de registros de dados. Além do Kinesis Data Streams, a plataforma de streaming de dados Kinesis inclui o [Amazon Data Firehose [e](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/) o Amazon](https://docs.aws.amazon.com/firehose/latest/dev/) Managed Service para Apache Flink. Você pode usar essa plataforma para enviar registros de dados diretamente para serviços como Amazon OpenSearch Service, Amazon Redshift, Amazon S3 ou Splunk. Para obter mais informações, consulte [Consumidores Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-consumers.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

Você também pode usar a Kinesis Client Library (KCL) para criar um aplicativo consumidor de fluxo para processar registros de dados de forma personalizada. A KCL simplifica a codificação fornecendo abstrações úteis acima da API de baixo nível do Kinesis Data Streams. Para saber mais sobre a KCL, consulte [Usar a Amazon Kinesis Client Library](https://docs.aws.amazon.com/streams/latest/dev/shared-throughput-kcl-consumers.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

## Garantia de entrega
<a name="streams.delivery"></a>

Os streams do QLDB fornecem uma garantia de entrega. *at-least-once* Cada [registro de dados](streams.records.md) produzido por um fluxo do QLDB é entregue ao Kinesis Data Streams pelo menos uma vez. Os mesmos registros podem aparecer em um fluxo de dados do Kinesis várias vezes. Portanto, você deve ter uma lógica de desduplicação na camada de aplicação do consumidor, se o seu caso de uso assim o exigir.

Também não há garantias de pedido. Em algumas circunstâncias, blocos e revisões do QLDB podem ser produzidos em um fluxo de dados do Kinesis fora de ordem. Para obter mais informações, consulte [Lidando com duplicatas e registros out-of-order](streams.records.md#streams.records.ordering).

## Considerações sobre latência de entrega
<a name="streams.delivery-latency"></a>

Os fluxos do QLDB geralmente entregam atualizações para o Kinesis Data Streams quase em tempo real. No entanto, os cenários a seguir podem criar latência adicional antes que os dados QLDB recém-confirmados sejam emitidos para um fluxo de dados do Kinesis:
+ O Kinesis pode controlar os dados que são transmitidos do QLDB, dependendo do provisionamento do Kinesis Data Streams. Por exemplo, isso pode ocorrer se você tiver vários fluxos do QLDB gravando em um único fluxo de dados do Kinesis e a taxa de solicitação do QLDB exceder a capacidade do recurso de fluxo do Kinesis. O controle de utilização no Kinesis também pode ocorrer ao usar o provisionamento sob demanda se o throughput aumentar para mais que o dobro do pico anterior em menos de 15 minutos.

  Você pode medir esse throughput excedido monitorando a métrica do Kinesis `WriteProvisionedThroughputExceeded`. Para obter mais informações e possíveis soluções, consulte [Como soluciono erros de controle de utilização no Kinesis Data Streams?](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-stream-throttling-errors/).
+ Com os fluxos do QLDB, você pode criar um fluxo indefinido com *data e hora de início* no passado e sem *data e hora de término.* Por design, o QLDB começa a emitir dados recém-confirmados para o Kinesis Data Streams somente depois que todos os dados anteriores da data e hora de início especificadas forem entregues com sucesso. Se você perceber latência adicional nesse cenário, talvez seja necessário aguardar a entrega dos dados anteriores ou iniciar a transmissão a partir de uma data e hora de início posteriores.

## Introdução aos fluxos
<a name="streams.getting-started"></a>

Veja a seguir uma visão geral de alto nível das etapas necessárias para começar a fazer fluxo de dados do diário para o Kinesis Data Streams:

1. Crie um recurso do Kinesis Data Streams. Para obter instruções, consulte [Criação e atualização de fluxos de dados](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-streams.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

1. Crie um perfil do IAM que permita ao QLDB assumir permissões de gravação para o fluxo de dados do Kinesis. Para instruções, consulte [Permissões de fluxo no QLDB](streams.perms.md).

1. Crie um fluxo de diário do QLDB. Para instruções, consulte [Criar e gerenciar fluxos no QLDB](streams.create.md).

1. Consuma o fluxo de dados do Kinesis, conforme descrito na seção anterior [Consumindo seu fluxo](#streams.consuming). Para exemplos de código que mostram como usar a Biblioteca de Cliente Kinesis ou AWS Lambda, consulte. [Desenvolver com fluxos no QLDB](streams.sdk.md)

# Criar e gerenciar fluxos no QLDB
<a name="streams.create"></a>

**Importante**  
Aviso de fim do suporte: os clientes existentes poderão usar o Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte [Migrar um Amazon QLDB Ledger para o Amazon](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/) Aurora PostgreSQL.

O Amazon QLDB fornece operações de API para criar e gerenciar um fluxo de dados de diário do seu ledger para o Amazon Kinesis Data Streams. O fluxo do QLDB captura todas as revisões de documentos confirmadas no seu diário e as envia para um fluxo de dados do Kinesis.

Você pode usar o Console de gerenciamento da AWS, um AWS SDK ou o AWS Command Line Interface (AWS CLI) para criar um stream de diário. Além disso, você também pode usar um modelo [AWS CloudFormation](https://aws.amazon.com/cloudformation) para criar fluxos. Para obter mais informações, consulte o [AWS::QLDB::Stream](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-qldb-stream.html)recurso no *Guia AWS CloudFormation do usuário*.

**Topics**
+ [Parâmetros de fluxo](#streams.create.params)
+ [Stream ARN](#streams.create.arn)
+ [Console de gerenciamento da AWS](#streams.create.con)
+ [Estados de fluxo](#streams.create.states)
+ [Tratamento de fluxos prejudicados](#streams.create.impaired)

## Parâmetros de fluxo
<a name="streams.create.params"></a>

Para criar um fluxo de diário do QLDB, você deve fornecer os seguintes parâmetros de configuração:

**Nome do ledger**  
O ledger do QLDB cujos dados de diário você deseja transmitir para o Kinesis Data Streams.

**Nome do fluxo**  
O nome que você deseja atribuir ao stream de diário do QLDB. Os nomes definidos pelo usuário podem ajudar a identificar e indicar a finalidade de um stream.  
O nome do fluxo deve ser exclusivo entre outros fluxos *ativos* em um ledger. Os nomes de fluxos têm as mesmas restrições de nomenclatura que os nomes do ledger, conforme definido em [Cotas e limites no Amazon QLDB](limits.md#limits.naming).  
Além do nome do fluxo, o QLDB atribui um *ID de fluxo* a cada fluxo do QLDB que você cria. O ID do fluxo é exclusivo entre todos os fluxos de um determinado ledger, independentemente de seu status.

**Data e hora de início**  
A data e hora de início a partir das quais iniciar o streaming de dados do diário. Esse valor pode ser qualquer data e hora no passado, mas não no futuro.

**Data e hora de encerramento**  
(Opcional) A data e hora exclusivas que especificam quando o fluxo termina.  
Se você criar um fluxo indefinido sem hora de término, deverá cancelá-lo manualmente para finalizar o fluxo. Você também pode cancelar um fluxo ativo e finito que ainda não tenha atingido a data e a hora de término especificadas.

**Fluxo de dados do Kinesis de destino**  
O recurso de destino do Kinesis Data Streams no qual seu fluxo grava os registros de dados. Para saber como criar um fluxo de dados do Kinesis, consulte [Criação e atualização de fluxos de dados no Guia do desenvolvedor do *Amazon Kinesis Data Streams*](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-streams.html).  
+ Não há suporte para streams entre contas e entre regiões. O fluxo de dados do Kinesis especificado deve estar na mesma Região da AWS conta do seu livro contábil.
+ ***A agregação de registros* no Kinesis Data Streams está ativada por padrão.** Essa opção permite que o QLDB publique vários registros de dados em um único registro do Kinesis Data Streams, aumentando o número de registros enviados por chamada de API.

  A agregação de registros tem implicações importantes para o processamento de registros e **requer desagregação em seu consumidor de stream**. Para saber mais, consulte [Conceitos-chave de KPL](https://docs.aws.amazon.com/streams/latest/dev/kinesis-kpl-concepts.html#kinesis-kpl-concepts-aggretation) e [Desagregação do consumidor](https://docs.aws.amazon.com/streams/latest/dev/kinesis-kpl-consumer-deaggregation.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

**Perfil do IAM**  
O perfil do IAM que permite que o QLDB assuma permissões de gravação em seu fluxo de dados do Kinesis. Você pode usar o console do QLDB para criar automaticamente essa função ou criá-la manualmente no IAM. Para saber como criá-la manualmente, consulte [Permissões de fluxo](streams.perms.md).  
Para transmitir um perfil ao QLDB ao solicitar um fluxo de diário, você deve ter permissões para realizar a ação `iam:PassRole` no recurso do perfil do IAM.

## Stream ARN
<a name="streams.create.arn"></a>

Cada fluxo de diário do QLDB é um sub-recurso de um ledger e é identificado exclusivamente por um nome do recurso da Amazon (ARN). A seguir está um exemplo de ARN de um fluxo QLDB com um ID de fluxo `IiPT4brpZCqCq3f4MTHbYy` de um ledger chamado `exampleLedger`.

```
arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy
```

A seção a seguir descreve como criar e cancelar um fluxo do QLDB usando o Console de gerenciamento da AWS.

## Console de gerenciamento da AWS
<a name="streams.create.con"></a>

Siga estas etapas para criar ou cancelar um fluxo do QLDB usando o console do QLDB.

**Para criar um fluxo (console)**

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

1. Selecione **Streams** (Fluxos) no painel de navegação.

1. Escolha **Criar fluxo do QLDB**.

1. Na página **Criar fluxo do QLDB**, insira as seguintes configurações:
   + **Nome do fluxo**: o nome que você deseja atribuir ao fluxo de diário do QLDB.
   + **ledger**: o ledger cujos dados do diário você deseja transmitir.
   + **Data e hora de início**: o registro de data e hora inclusivo no Coordinated Universal Time (UTC) a partir do qual iniciar o streaming de dados do diário. O padrão desse timestamp é a data e hora atual. Não pode ser no futuro e deve ser anterior à **data e hora de término**.
   + **Data e hora de término**: (opcional) o carimbo de data/hora exclusivo (UTC) que especifica quando o fluxo termina. Se você deixar esse parâmetro em branco, o fluxo será executado indefinidamente até ser cancelado.
   + **Stream de destino**: o recurso de destino do Kinesis Data Streams no qual seu fluxo grava os registros de dados. Use o formato de ARN abaixo.

     ```
     arn:aws:kinesis:aws-region:account-id:stream/kinesis-stream-name
     ```

     Veja um exemplo a seguir.

     ```
     arn:aws:kinesis:us-east-1:123456789012:stream/stream-for-qldb
     ```

     Não há suporte para streams entre contas e entre regiões. O stream de dados especificado do Kinesis deve estar na mesma conta do seu Região da AWS livro contábil.
   + **Ativar a agregação de registros no Kinesis Data Streams**: (ativado por padrão) permite que o QLDB publique vários registros de dados em um único registro do Kinesis Data Streams, aumentando o número de registros enviados por chamada de API.
   + **Acesso ao serviço**: o perfil do IAM que concede permissões de gravação do QLDB ao seu fluxo de dados do Kinesis.

     *Para transmitir um perfil ao QLDB ao solicitar um fluxo de diário, você deve ter permissões para realizar a ação `iam:PassRole` no recurso do perfil do IAM.*
     + **Crie e use um novo perfil de serviço**: deixe o console criar uma nova função para você com as permissões necessárias para o fluxo de dados do Kinesis especificado.
     + **Use um perfil de serviço existente**: para saber como criar essa função manualmente no IAM, consulte [Permissões de fluxo](streams.perms.md).
   + **Tags**: (opcional) adicione metadados ao fluxo anexando tags como pares de chave-valor. Você pode adicionar tags ao seu fluxo para ajudar a organizar e identificá-los. Para obter mais informações, consulte [Como marcar recursos do Amazon QLDB](tagging.md).

     Escolha **Adicionar tag** e, em seguida, insira os pares de valores-chave, conforme apropriado.

1. Quando estiver satisfeito com as configurações, escolha **Criar fluxo de QLDB**.

   Se o envio da solicitação for bem-sucedido, o console retornará à página principal de **Fluxos** e listará seus fluxos do QLDB com o status atual.

1. Depois que seu fluxo estiver ativo, use o Kinesis para processar seus dados de fluxo com um [aplicativo de consumidor](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-consumers.html).

   Abra o console do Kinesis Data Streams [https://console.aws.amazon.com/kinesis/](https://console.aws.amazon.com/kinesis/)em.

Para obter mais informações sobre o formato dos registros de dados de fluxo, consulte [Registros de fluxo do QLDB no Kinesis](streams.records.md).

Para saber como lidar com fluxos que resultam em erro, consulte [Tratamento de fluxos prejudicados](#streams.create.impaired).

**Para cancelar um fluxo (console)**

Você não pode reiniciar um fluxo do QLDB depois de cancelá-lo. Para retomar a entrega de seus dados para o Kinesis Data Streams, você pode criar um novo fluxo do QLDB.

1. [Abra o console do Amazon QLDB em /qldb. https://console.aws.amazon.com](https://console.aws.amazon.com/qldb)

1. Selecione **Streams** (Fluxos) no painel de navegação.

1. Na lista de fluxos do QLDB, selecione o fluxo ativo que você deseja cancelar.

1. Escolha **Cancelar fluxo**. Confirme isso inserindo **cancel stream** na caixa fornecida.

Para obter informações sobre como usar a API QLDB com AWS um SDK ou para criar e gerenciar AWS CLI fluxos de diários, consulte. [Desenvolver com fluxos no QLDB](streams.sdk.md)

## Estados de fluxo
<a name="streams.create.states"></a>

O status de um fluxo do QLDB pode ser um dos seguintes:
+ `ACTIVE`: no momento, está transmitindo ou aguardando para transmitir dados (para um fluxo indefinido sem hora de término).
+ `COMPLETED`: concluiu com sucesso o streaming de todos os blocos de diário dentro do intervalo de tempo especificado. Este é um estado terminal.

  
+ `CANCELED`: foi encerrado por uma solicitação do usuário antes do horário de término especificado e não está mais transmitindo dados ativamente. Este é um estado terminal.
+ `IMPAIRED`: não é possível gravar registros no Kinesis devido a um erro que exige sua ação. Esse é um estado recuperável e não terminal.

  Se você resolver o erro em uma hora, o stream será automaticamente transferido para o estado `ACTIVE`. Se o erro continuar sem solução após uma hora, o stream passa automaticamente para o estado `FAILED`.
+ `FAILED`: não consegue gravar registros no Kinesis devido a um erro e está em um estado terminal irrecuperável.

O diagrama a seguir ilustra como um recurso de fluxo do QLDB pode fazer a transição entre estados.

![\[Diagrama de estado mostrando como um recurso de fluxo QLDB pode fazer a transição entre os estados ativo, cancelado, concluído, danificado e fracassado.\]](http://docs.aws.amazon.com/pt_br/qldb/latest/developerguide/images/stream-states.png)


### Expiração para fluxos terminais
<a name="streams.create.states.expiration"></a>

Os recursos de fluxo que estão em um estado terminal (`CANCELED`, `COMPLETED`, e `FAILED`) estão sujeitos a um período de retenção de 7 dias. Eles são excluídos automaticamente após a expiração desse limite.

Depois que um fluxo terminal é excluído, você não pode mais usar o console do QLDB ou a API do QLDB para descrever ou listar o recurso do fluxo.

## Tratamento de fluxos prejudicados
<a name="streams.create.impaired"></a>

Se seu fluxo encontrar um erro, ele será movido para o estado `IMPAIRED` primeiro. O QLDB continua a repetir os fluxos `IMPAIRED` por até uma hora.

Se você resolver o erro em uma hora, o stream será automaticamente transferido para o estado `ACTIVE`. Se o erro continuar sem solução após uma hora, o stream passa automaticamente para o estado `FAILED`.

Um fluxo danificado ou com falha pode ser uma das seguintes causas de erro:
+ `KINESIS_STREAM_NOT_FOUND`: o recurso Kinesis Data Streams de destino não existe. Verifique se o fluxo de dados do Kinesis que você forneceu em sua solicitação de fluxo do QLDB está correto. Em seguida, acesse Kinesis e crie o fluxo de dados que você especificou.
+ `IAM_PERMISSION_REVOKED`: o QLDB não tem permissões suficientes para gravar registros de dados em seu fluxo de dados do Kinesis especificado. Verifique se você define uma política para o fluxo de dados do Kinesis especificado que conceda ao serviço QLDB (`qldb.amazonaws.com`) permissões para as seguintes ações:
  + `kinesis:PutRecord`
  + `kinesis:PutRecords`
  + `kinesis:DescribeStream`
  + `kinesis:ListShards`

### Monitorar os fluxos prejudicados
<a name="streams.create.impaired.monitor"></a>

Se um fluxo for prejudicado, o console do QLDB exibirá um banner que mostra detalhes sobre o fluxo e o erro encontrado. Você também pode usar a operação da `DescribeJournalKinesisStream` API para obter o status de um fluxo e a causa do erro subjacente.

Além disso, você pode usar CloudWatch a Amazon para criar um alarme que monitora a `IsImpaired` métrica de um stream. Para obter informações sobre o monitoramento de métricas CloudWatch do QLDB com, consulte. [Dimensões e métricas do Amazon QLDB](monitoring-cloudwatch.md#qldb-metrics-dimensions)

# Desenvolver com fluxos no QLDB
<a name="streams.sdk"></a>

**Importante**  
Aviso de fim do suporte: os clientes existentes poderão usar o Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte [Migrar um Amazon QLDB Ledger para o Amazon](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/) Aurora PostgreSQL.

Esta seção resume as operações de API que você pode usar com um AWS SDK ou com o AWS CLI para criar e gerenciar fluxos de diários no Amazon QLDB. Também descreve os aplicativos de amostra que demonstram essas operações e usam a Kinesis Client Library (KCL) ou AWS Lambda para implementar um consumidor de fluxo.

É possível usar o KCL para criar aplicativos de consumo para o Amazon Kinesis Data Streams. A KCL simplifica a codificação fornecendo abstrações úteis acima da API de baixo nível do Kinesis Data Streams. Para saber mais sobre a KCL, consulte [Usar a Amazon Kinesis Client Library](https://docs.aws.amazon.com/streams/latest/dev/shared-throughput-kcl-consumers.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

**Contents**
+ [Fluxo de diário do QLDB APIs](#streams.sdk.api)
+ [Aplicações de exemplo](#streams.sdk.samples)
  + [Operações básicas (Java)](#streams.sdk.samples.basic)
  + [Integração com o OpenSearch serviço (Python)](#streams.sdk.samples.elastic)
  + [Integração com o Amazon SNS e o Amazon SQS (Python)](#streams.sdk.samples.sns)

## Fluxo de diário do QLDB APIs
<a name="streams.sdk.api"></a>

A API do QLDB fornece as seguintes operações de fluxo diário para uso por programas aplicativos:
+ `StreamJournalToKinesis`: cria um fluxo de diário para um determinado ledger do QLDB. O fluxo captura todas as revisões de documentos confirmadas no diário do ledger e entrega os dados a um recurso especificado do Amazon Kinesis Data Streams.
  + ***A agregação de registros* no Kinesis Data Streams está ativada por padrão.** Essa opção permite que o QLDB publique vários registros de dados em um único registro do Kinesis Data Streams, aumentando o número de registros enviados por chamada de API.

    A agregação de registros tem implicações importantes para o processamento de registros e **requer desagregação em seu consumidor de stream**. Para saber mais, consulte [Conceitos-chave de KPL](https://docs.aws.amazon.com/streams/latest/dev/kinesis-kpl-concepts.html#kinesis-kpl-concepts-aggretation) e [Desagregação do consumidor](https://docs.aws.amazon.com/streams/latest/dev/kinesis-kpl-consumer-deaggregation.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.
+ `DescribeJournalKinesisStream`: devolve informações detalhadas sobre um determinado fluxo de diário. A saída inclui o ARN, o nome do fluxo, o status atual, a hora da criação e os parâmetros da sua solicitação original de criação do fluxo.
+ `ListJournalKinesisStreamsForLedger`: devolve uma lista de todos os descritores de fluxo de diário do QLDB para um determinado ledger. A saída de cada descritor de fluxo inclui os mesmos detalhes devolvidos por `DescribeJournalKinesisStream`.
+ `CancelJournalKinesisStream`: encerra um determinado fluxo de diário do QLDB. Antes que um fluxo possa ser cancelado, seu status atual deve ser `ACTIVE`.

  Não é possível reiniciar um fluxo depois de tê-lo cancelado. Para retomar a entrega de seus dados para o Kinesis Data Streams, você pode criar um novo fluxo do QLDB.

Para uma descrição completa dessas operações de API, consulte o [Referência da API do Amazon QLDB](api-reference.md).

Para obter informações sobre como criar e gerenciar fluxos de diário usando o AWS CLI, consulte a [Referência de AWS CLI Comandos](https://docs.aws.amazon.com/cli/latest/reference/qldb/index.html).

## Aplicações de exemplo
<a name="streams.sdk.samples"></a>

O QLDB fornece aplicativos de exemplo que demonstram várias operações usando fluxos de diário. Esses aplicativos são de código aberto no [ GitHub site AWS Samples](https://github.com/aws-samples/?q=qldb).

**Topics**
+ [Operações básicas (Java)](#streams.sdk.samples.basic)
+ [Integração com o OpenSearch serviço (Python)](#streams.sdk.samples.elastic)
+ [Integração com o Amazon SNS e o Amazon SQS (Python)](#streams.sdk.samples.sns)

### Operações básicas (Java)
<a name="streams.sdk.samples.basic"></a>

[Para ver um exemplo de código Java que demonstra operações básicas para fluxos de diários do QLDB, consulte o repositório aws-samples/ -java. GitHub amazon-qldb-dmv-sample](https://github.com/aws-samples/amazon-qldb-dmv-sample-java/tree/master/src/main/java/software/amazon/qldb/tutorial/streams) Para obter instruções sobre como baixar e instalar esse aplicativo de amostra, consulte [Como instalar o aplicativo de amostra Java do Amazon QLDB](sample-app.java.md).

**nota**  
Depois de instalar o aplicativo, não vá para a *Etapa 1* do tutorial Java para criar um ledger. Este aplicativo de amostra para streaming cria o ledger `vehicle-registration` para você.

Esse aplicativo de amostra empacota o código-fonte completo do [Tutorial de Java](getting-started.java.tutorial.md) e de suas dependências, incluindo os seguintes módulos:
+ [AWS SDK para Java](https://aws.amazon.com/sdk-for-java): criar e excluir os recursos do QLDB e do Kinesis Data Streams, incluindo ledgers, fluxos de diários do QLDB e fluxos de dados do Kinesis.
+ [Driver Amazon QLDB para Java](getting-started.java.md): executar transações de dados em um ledger usando instruções PartiQL, incluindo a criação de tabelas e a inserção de documentos.
+ [Kinesis Client Library](https://docs.aws.amazon.com/streams/latest/dev/developing-consumers-with-kcl.html): consumir e processar dados de um fluxo de dados do Kinesis.

**Executar o código**

A [StreamJournal](https://github.com/aws-samples/amazon-qldb-dmv-sample-java/blob/master/src/main/java/software/amazon/qldb/tutorial/streams/StreamJournal.java)classe contém um código tutorial que demonstra as seguintes operações:

1. Crie um ledger chamado `vehicle-registration`, crie tabelas e carregue-as com dados de amostra.
**nota**  
Antes de executar esse código, confirme que você ainda não tem um ledger ativo chamado `vehicle-registration`.

1. Crie um fluxo de dados do Kinesis, um perfil do IAM que permite que o QLDB assuma permissões de gravação para o fluxo de dados do Kinesis e um fluxo de diário do QLDB.

1. Use o KCL para iniciar um leitor de fluxo que processa o fluxo de dados do Kinesis e registra cada registro de dados do QLDB.

1. Use os dados do fluxo para validar a cadeia de hash do ledger `vehicle-registration` de amostras.

1. Limpe todos os recursos interrompendo o leitor de fluxo, cancelando o fluxo do diário do QLDB, excluindo o ledger e excluindo o fluxo de dados do Kinesis.

Para executar o código do tutorial `StreamJournal`, insira o seguinte comando do Gradle no diretório raiz do seu projeto.

```
./gradlew run -Dtutorial=streams.StreamJournal
```

### Integração com o OpenSearch serviço (Python)
<a name="streams.sdk.samples.elastic"></a>

[Para ver um aplicativo de amostra em Python que demonstra como integrar um stream QLDB com o Amazon OpenSearch Service, consulte o repositório aws-samples/ -. GitHub amazon-qldb-streaming-amazon opensearch-service-sample-python](https://github.com/aws-samples/amazon-qldb-streaming-amazon-opensearch-service-sample-python) Esse aplicativo usa uma AWS Lambda função para implementar um consumidor do Kinesis Data Streams.

Para clonar o repositório, digite o seguinte comando `git`.

```
git clone https://github.com/aws-samples/amazon-qldb-streaming-amazon-opensearch-service-sample-python.git
```

Para executar o aplicativo de amostra, consulte o [README ativado](https://github.com/aws-samples/amazon-qldb-streaming-amazon-opensearch-service-sample-python/blob/master/README.md) GitHub para obter instruções.

### Integração com o Amazon SNS e o Amazon SQS (Python)
<a name="streams.sdk.samples.sns"></a>

[Para ver um aplicativo de amostra em Python que demonstra como integrar um stream do QLDB com o Amazon Simple Notification Service (Amazon SNS), consulte o repositório aws-samples/ -. GitHub amazon-qldb-streams-dmv sample-lambda-python](https://github.com/aws-samples/amazon-qldb-streams-dmv-sample-lambda-python)

Esse aplicativo usa uma AWS Lambda função para implementar um consumidor do Kinesis Data Streams. Ele envia mensagens para um tópico do Amazon SNS, que tem uma fila do Amazon Simple Queue Service (Amazon SQS) inscrita nele.

Para clonar o repositório, digite o seguinte comando `git`.

```
git clone https://github.com/aws-samples/amazon-qldb-streams-dmv-sample-lambda-python.git
```

Para executar o aplicativo de amostra, consulte o [README ativado](https://github.com/aws-samples/amazon-qldb-streams-dmv-sample-lambda-python/blob/master/README.md) GitHub para obter instruções.

# Registros de fluxo do QLDB no Kinesis
<a name="streams.records"></a>

**Importante**  
Aviso de fim do suporte: os clientes existentes poderão usar o Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte [Migrar um Amazon QLDB Ledger para o Amazon](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/) Aurora PostgreSQL.

Um fluxo do Amazon QLDB grava três tipos de registros de dados em um determinado recurso Amazon Kinesis Data Streams: *controle*,*resumo do bloco*, e *detalhes da revisão.* Todos os três tipos de registro são escritos na *representação binária* do [formato Amazon Ion](ion.md).

Os registros de controle indicam o início e a conclusão dos seus fluxos do QLDB. Sempre que uma revisão é confirmada em seu diário, um fluxo QLDB grava todos os dados do bloco de diário associado nos registros de resumo do bloco e detalhes da revisão.

Os três tipos de registro são polimórficos. Todos eles consistem em um registro comum de nível superior que contém o ARN do fluxo do QLDB, o tipo de registro e a carga útil do registro. Esse registro de nível superior tem o formato a seguir.

```
{
  qldbStreamArn: string,
  recordType: string,
  payload: {
    //control | block summary | revision details record
  }
}
```

O campo `recordType` pode ter um dos três valores:
+ `CONTROL`
+ `BLOCK_SUMMARY`
+ `REVISION_DETAILS`

As seções a seguir descrevem o formato e o conteúdo de cada registro de carga útil individual.

**nota**  
O QLDB grava todos os registros de fluxo no Kinesis Data Streams na representação binária do Amazon Ion. Os exemplos a seguir são fornecidos na representação de texto do Ion para ilustrar o conteúdo do registro em um formato legível.

**Topics**
+ [Registros de controle](#streams.records.control)
+ [Bloquear registros resumidos](#streams.records.block)
+ [Registros de detalhes da revisão](#streams.records.revision)
+ [Lidando com duplicatas e registros out-of-order](#streams.records.ordering)

## Registros de controle
<a name="streams.records.control"></a>

Um fluxo QLDB grava registros de *controle* para indicar seus eventos de início e conclusão. A seguir estão exemplos de registros de controle com dados de amostra para cada `controlRecordType`:
+ `CREATED`: o primeiro registro que um fluxo do QLDB grava no Kinesis para indicar que seu fluxo recém-criado está ativo.

  ```
  {
    qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy",
    recordType:"CONTROL",
    payload:{
      controlRecordType:"CREATED"
    }
  }
  ```
+ `COMPLETED`: o último registro que um fluxo do QLDB grava no Kinesis para indicar que seu fluxo atingiu a data e a hora de término especificadas. Esse registro não será gravado se você cancelar a transmissão.

  ```
  {
    qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy",
    recordType:"CONTROL",
    payload:{
      controlRecordType:"COMPLETED"
    }
  }
  ```

## Bloquear registros resumidos
<a name="streams.records.block"></a>

Um registro de *resumo em bloco* representa um bloco de diário no qual suas revisões de documentos são confirmadas. O [bloco](journal-contents.md) é um objeto que é comprometido com seu diário do QLDB durante uma transação.

A carga útil de um registro de resumo do bloco contém o endereço do bloco, a data e hora e outros metadados da transação que confirmou o bloqueio. Também inclui atributos resumidos das revisões no bloco e das declarações partiQL que as confirmaram. Veja a seguir um exemplo de um registro de resumo de bloco com dados de amostra.

**nota**  
Este exemplo de resumo de bloco é fornecido apenas para fins informativos. Os hashes mostrados não são valores reais de hash calculados.

```
{
  qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy",
  recordType:"BLOCK_SUMMARY",
  payload:{
    blockAddress:{
      strandId:"ElYL30RGoqrFCbbaQn3K6m",
      sequenceNo:60807
    },
    transactionId:"9RWohCo7My4GGkxRETAJ6M",
    blockTimestamp:2019-09-18T17:00:14.601000001Z,
    blockHash:{{6Pk9KDYJd38ci09oaHxx0D2grtgh4QBBqbDS6i9quX8=}},
    entriesHash:{{r5YoH6+NXDXxgoRzPREGAWJfn73KlZE0eTfbTxZWUDU=}},
    previousBlockHash:{{K3ti0Agk7DEponywKcQCPRYVHb5RuyxdmQFTfrloptA=}},
    entriesHashList:[
      {{pbzvz6ofJC7mD2jvgfyrY/VtR01zIZHoWy8T1VcxlGo=}},
      {{k2brC23DLMercmiOWHiURaGwHu0mQtLzdNPuviE2rcs=}},
      {{hvw1EV8k4oOkIO36kblO/+UUSFUQqCanKuDGr0aP9nQ=}},
      {{ZrLbkyzDcpJ9KWsZMZqRuKUkG/czLIJ4US+K5E31b+Q=}}
    ],
    transactionInfo:{
      statements:[
        {
          statement:"SELECT * FROM Person WHERE GovId = ?",
          startTime:2019-09-18T17:00:14.587Z,
          statementDigest:{{p4Dn0DiuYD3Xm9UQQ75YLwmoMbSfJmopOmTfMnXs26M=}}
        },
        {
          statement:"INSERT INTO Person ?",
          startTime:2019-09-18T17:00:14.594Z,
          statementDigest:{{klMLkLfa5VJqk6JUPtHkQpOsDdG4HmuUaq/VaApQflU=}}
        },
        {
          statement:"INSERT INTO VehicleRegistration ?",
          startTime:2019-09-18T17:00:14.598Z,
          statementDigest:{{B0gO9BWVNrzRYFoe7t+GVLpJ6uZcLKf5t/chkfRhspI=}}
        }
      ],
      documents:{
        '7z2OpEBgVCvCtwvx4a2JGn':{
          tableName:"Person",
          tableId:"LSkFkQvkIOjCmpTZpkfpn9",
          statements:[1]
        },
        'K0FpsSLpydLDr7hi6KUzqk':{
          tableName:"VehicleRegistration",
          tableId:"Ad3A07z0ZffC7Gpso7BXyO",
          statements:[2]
        }
      }
    },
    revisionSummaries:[
      {
        hash:{{uDthuiqSy4FwjZssyCiyFd90XoPSlIwomHBdF/OrmkE=}},
        documentId:"7z2OpEBgVCvCtwvx4a2JGn"
      },
      {
        hash:{{qJID/amu0gN3dpG5Tg0FfIFTh/U5yFkfT+g/O6k5sPM=}},
        documentId:"K0FpsSLpydLDr7hi6KUzqk"
      }
    ]
  }
}
```

No campo `revisionSummaries`, algumas revisões podem não ter um `documentId`. Essas são revisões de sistema somente internas que não contêm dados do usuário. Um fluxo de QLDB inclui essas revisões em seus respectivos registros de resumo de blocos porque os hashes dessas revisões fazem parte da cadeia de hash completa do diário. A cadeia de hash completa é necessária para a verificação criptográfica.

Somente as revisões que têm um ID de documento são publicadas em registros separados de detalhes da revisão, conforme descrito na seção a seguir.

## Registros de detalhes da revisão
<a name="streams.records.revision"></a>

Um registro de *detalhes da revisão* representa uma revisão do documento que está comprometida com seu diário. A carga contém todos os atributos da [visualização confirmada](working.metadata.md) da revisão, junto com o nome da tabela associada e o ID da tabela. Veja a seguir um exemplo de um registro de revisão com dados de amostra.

```
{
  qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy",
  recordType:"REVISION_DETAILS",
  payload:{
    tableInfo:{
      tableName:"VehicleRegistration",
      tableId:"Ad3A07z0ZffC7Gpso7BXyO"
    },
    revision:{
      blockAddress:{
        strandId:"ElYL30RGoqrFCbbaQn3K6m",
        sequenceNo:60807
      },
      hash:{{qJID/amu0gN3dpG5Tg0FfIFTh/U5yFkfT+g/O6k5sPM=}},
      data:{
        VIN:"1N4AL11D75C109151",
        LicensePlateNumber:"LEWISR261LL",
        State:"WA",
        City:"Seattle",
        PendingPenaltyTicketAmount:90.25,
        ValidFromDate:2017-08-21,
        ValidToDate:2020-05-11,
        Owners:{
          PrimaryOwner:{PersonId:"7z2OpEBgVCvCtwvx4a2JGn"},
          SecondaryOwners:[]
        }
      },
      metadata:{
        id:"K0FpsSLpydLDr7hi6KUzqk",
        version:0,
        txTime:2019-09-18T17:00:14.602Z,
        txId:"9RWohCo7My4GGkxRETAJ6M"
      }
    }
  }
}
```

## Lidando com duplicatas e registros out-of-order
<a name="streams.records.ordering"></a>

Os streams do QLDB podem publicar duplicatas e registros no out-of-order Kinesis Data Streams. Portanto, um aplicativo consumidor pode precisar implementar sua própria lógica para identificar e lidar com esses cenários. O resumo do bloco e os registros de detalhes da revisão incluem campos que você pode usar para essa finalidade. Combinados com os atributos dos serviços posteriores, esses campos podem indicar tanto uma identidade exclusiva quanto uma ordem estrita para os registros.

Por exemplo, considere um stream que integra o QLDB a OpenSearch um índice para fornecer recursos de pesquisa de texto completo em documentos. Nesse caso de uso, você precisa evitar a indexação de revisões obsoletas (out-of-order) de um documento. Para impor o pedido e a desduplicação, você pode usar os campos ID do documento e versão externa em OpenSearch, junto com os campos ID do documento e versão em um registro de detalhes da revisão.

[Para ver um exemplo de lógica de desduplicação em um aplicativo de amostra que integra o QLDB com o OpenSearch Amazon Service, consulte o repositório aws-samples/ -. GitHub amazon-qldb-streaming-amazon opensearch-service-sample-python](https://github.com/aws-samples/amazon-qldb-streaming-amazon-opensearch-service-sample-python)

# Permissões de fluxo no QLDB
<a name="streams.perms"></a>

**Importante**  
Aviso de fim do suporte: os clientes existentes poderão usar o Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte [Migrar um Amazon QLDB Ledger para o Amazon](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/) Aurora PostgreSQL.

Antes de criar um fluxo do Amazon QLDB, você deve fornecer ao QLDB permissões de gravação para seu recurso especificado do Amazon Kinesis Data Streams. Se você estiver usando um cliente gerenciado AWS KMS key para criptografia do lado do servidor do seu fluxo do Kinesis, você também deve fornecer ao QLDB permissões para usar sua chave de criptografia simétrica especificada. O Kinesis Data Streams [não é compatível com chaves KMS assimétricas](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html).

Para fornecer ao seu fluxo do QLDB as permissões necessárias, você pode fazer com que o QLDB assuma um perfil de serviço do IAM com as políticas de permissões apropriadas. O perfil de serviço é um [perfil do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) que um serviço assume para executar ações em seu nome. Um administrador do IAM pode criar, modificar e excluir um perfil de serviço do IAM. Para obter mais informações, consulte [Criar um perfil para delegar permissões a um AWS service (Serviço da AWS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) no *Guia do Usuário do IAM*. 

**nota**  
Para transmitir uma função ao QLDB ao solicitar um fluxo de diário, você deve ter permissões para realizar a ação `iam:PassRole` no recurso do perfil do IAM. Isso é um acréscimo à permissão `qldb:StreamJournalToKinesis` no sub-recurso de fluxo do QLDB.  
Para saber como controlar o acesso ao QLDB usando o IAM, consulte [Como o Amazon QLDB funciona com o IAM](security_iam_service-with-iam.md). Para ver um exemplo de política do QLDB, consulte [Exemplos de políticas baseadas em identidade para o Amazon QLDB](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-stream-to-kinesis).

Neste exemplo, você cria uma função que permite que o QLDB grave registros de dados em um fluxo de dados do Kinesis em seu nome. Para obter mais informações, consulte [Criar um perfil para delegar permissões a um AWS service (Serviço da AWS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) no *Guia do usuário do IAM*.

Se você estiver transmitindo um diário do QLDB pela primeira vez, primeiro crie uma função do IAM com as políticas apropriadas, fazendo o seguinte. Conta da AWS Ou você pode [usar o console do QLDB](streams.create.md#streams.create.con) para criar automaticamente a função para você. Caso contrário, você poderá escolher uma função que você criou anteriormente.

**Topics**
+ [Criação de uma política de permissões](#streams.perms.create-policy)
+ [Criar um perfil do IAM](#streams.perms.create-role)

## Criação de uma política de permissões
<a name="streams.perms.create-policy"></a>

Complete as etapas a seguir para criar políticas de permissão para o fluxo do QLDB. Este exemplo mostra uma política do Kinesis Data Streams que concede permissões ao QLDB para gravar registros de dados no fluxo de dados especificado do Kinesis. Se aplicável, o exemplo também mostra uma política de chave que permite que o QLDB use sua chave KMS de criptografia simétrica.

Para obter mais informações sobre Kinesis Data Streams, consulte [Controlar acesso aos recursos do Amazon Kinesis Data Streams usando o IAM](https://docs.aws.amazon.com/streams/latest/dev/controlling-access.html) e [Permissões para usar chaves KMS gerada pelo usuário](https://docs.aws.amazon.com/streams/latest/dev/permissions-user-key-KMS.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*. Para saber mais sobre as AWS KMS principais políticas, consulte [Como usar políticas de chaves AWS KMS no](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) *Guia do AWS Key Management Service desenvolvedor*.

**nota**  
Seu stream de dados do Kinesis e sua chave KMS devem estar na mesma conta e na mesma conta do seu livro Região da AWS contábil do QLDB.

**Para usar o editor de políticas JSON para criar uma política**

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

1. Na coluna de navegação à esquerda, selecione **Políticas**.

   Se essa for a primeira vez que você escolhe **Políticas**, a página **Bem-vindo às políticas gerenciadas** será exibida. Escolha **Começar**.

1. Na parte superior da página, escolha **Criar política**.

1. Selecione a guia **JSON**.

1. Insira um documento de política JSON.
   + Se você estiver usando uma chave KMS gerenciada pelo cliente para criptografia do lado do servidor do seu fluxo do Kinesis, use o seguinte exemplo de documento de política. Para usar essa política, substitua *us-east-1**123456789012*,*kinesis-stream-name*,, e *1234abcd-12ab-34cd-56ef-1234567890ab* no exemplo por suas próprias informações.

     ```
     {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Sid": "QLDBStreamKinesisPermissions",
                 "Action": [ "kinesis:PutRecord*", "kinesis:DescribeStream", "kinesis:ListShards" ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/kinesis-stream-name"
             },
             {
                 "Sid": "QLDBStreamKMSPermission",
                 "Action": [ "kms:GenerateDataKey" ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
             }
         ]
     }
     ```
   + Ou, use o seguinte exemplo de documento de política. Para usar essa política*us-east-1*, substitua e*123456789012*, *kinesis-stream-name* no exemplo, por suas próprias informações.

     ```
     {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Sid": "QLDBStreamKinesisPermissions",
                 "Action": [ "kinesis:PutRecord*", "kinesis:DescribeStream", "kinesis:ListShards" ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/kinesis-stream-name"
             }
         ]
     }
     ```

1. Selecione **Revisar política**.
**nota**  
Você pode alternar entre as guias **Editor visual** e **JSON** sempre que quiser. No entanto, se você fizer alterações ou escolher **Revisar política** na guia **Editor visual**, o IAM pode reestruturar sua política de forma a otimizá-la para o editor visual. Para obter mais informações, consulte [Restruturação de política](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure) no *Manual do usuário do IAM*.

1. Na página **Review policy (Revisar política)**, insira um **Name (Nome)** e uma **Description (Descrição)** opcional para a política que você está criando. Revise o **Resumo** da política para ver as permissões que são concedidas pela política. Em seguida, escolha **Criar política** para salvar seu trabalho.

## Criar um perfil do IAM
<a name="streams.perms.create-role"></a>

Depois de criar uma política de permissões para seu fluxo do QLDB, você pode criar um perfil do IAM e anexar sua política a ele.

**Para criar um perfil de serviço para QLDB (console do IAM)**

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

1. No painel de navegação do console do IAM, escolha **Perfis** e, em seguida, **Criar perfil**.

1. Em **Tipo de Entidade Confiável**, escolha **AWS service (Serviço da AWS)**.

1. Para **Serviço ou caso de uso**, escolha **QLDB** e, em seguida, escolha o caso de uso do **QLDB**.

1. Escolha **Próximo**.

1. Selecione a caixa ao lado da política que você criou nas etapas anteriores.

1. (Opcional) Defina um [limite de permissões](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html). Esse é um atributo avançado que está disponível para perfis de serviço, mas não para perfis vinculados ao serviço.

   1. Abra a seção **Definir limite de permissões** e escolha **Usar um limite de permissões para controlar o número máximo de permissões do perfil**.

      O IAM inclui uma lista das políticas AWS gerenciadas e gerenciadas pelo cliente em sua conta.

   1. Selecione a política a ser usada para o limite de permissões.

1. Escolha **Próximo**.

1. Insira um nome de perfil ou um sufixo de nome de perfil para ajudar a identificar a finalidade do perfil.
**Importante**  
Quando nomear um perfil, observe o seguinte:  
Os nomes das funções devem ser exclusivos dentro de você Conta da AWS e não podem ser diferenciados por maiúsculas e minúsculas.  
Por exemplo, não crie dois perfis denominados **PRODROLE** e **prodrole**. Quando usado em uma política ou como parte de um ARN, o nome de perfil diferencia maiúsculas de minúsculas. No entanto, quando exibido para os clientes no console, como durante o processo de login, o nome de perfil diferencia maiúsculas de minúsculas.
Não é possível editar o nome do perfil depois de criá-lo porque outras entidades podem referenciar o perfil.

1. (Opcional) Em **Descrição**, insira uma descrição para o perfil.

1. (Opcional) Para editar os casos de uso e as permissões do perfil, escolha **Editar** nas seções **Etapa 1: selecionar entidades confiáveis** ou **Etapa 2: adicionar permissões**.

1. (Opcional) Para ajudar a identificar, organizar ou pesquisar o perfil, adicione tags como pares de chave-valor. Para obter mais informações sobre o uso de tags no IAM, consulte [Tags para AWS Identity and Access Management recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) no *Guia do usuário do IAM*.

1. Reveja a função e escolha **Criar função**.

O documento JSON a seguir é um exemplo de política de confiança que permite ao QLDB assumir um perfil do IAM com permissões específicas anexadas.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "qldb.amazonaws.com"
            },
            "Action": [ "sts:AssumeRole" ],
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/*"
                },
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                }
            }
        }
    ]
}
```

**nota**  
O exemplo a seguir mostra como é possível usar as chaves de contexto de condição globais `aws:SourceArn` e `aws:SourceAccount` para evitar o problema de *substituto confuso*. Com essa política de confiança, o QLDB pode assumir a função de qualquer fluxo de QLDB na conta `123456789012` somente para o ledger `myExampleLedger`.  
Para obter mais informações, consulte [Prevenção contra o ataque do “substituto confuso” em todos os serviços](cross-service-confused-deputy-prevention.md).

Depois de criar seu perfil do IAM, retorne ao console do QLDB e atualize a página **Criar fluxo de QLDB** para que ele possa encontrar seu novo perfil.

# Erros comuns para fluxos de diário no QLDB
<a name="streams.errors"></a>

**Importante**  
Aviso de fim do suporte: os clientes existentes poderão usar o Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte [Migrar um Amazon QLDB Ledger para o Amazon](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/) Aurora PostgreSQL.

Esta seção descreve os erros de runtime que são lançados pelo Amazon QLDB para solicitações de fluxo de diários.

Veja a seguir uma lista de exceções comuns retornadas pelo serviço. Cada exceção inclui a mensagem de erro específica, seguida por uma breve descrição e sugestões de possíveis soluções.<a name="streams.errors.varlist"></a>

**AccessDeniedException**  
Mensagem: Usuário: não *userARN* está autorizado a realizar: iam: PassRole no recurso: *roleARN*  
Você não tem permissões para passar um perfil do IAM para o serviço do QLDB. O QLDB exige um perfil para todas as solicitações de fluxo de diário, e você deve ter permissões para passar esse perfil ao QLDB. O perfil fornece ao QLDB permissões de gravação em seu recurso específico do Amazon Kinesis Data Streams.  
Verifique se você define uma política do IAM que concede permissão para realizar a operação da API `PassRole` no seu recurso de perfil do IAM especificado para o serviço QLDB (`qldb.amazonaws.com`). Para ver um exemplo de política, consulte [Exemplos de políticas baseadas em identidade para o Amazon QLDB](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-stream-to-kinesis).

**IllegalArgumentException**  
Mensagem: O QLDB encontrou um erro ao validar o Kinesis Data Streams: Resposta do Kinesis: *errorCode* *errorMessage*  
Uma possível causa desse erro é que o recurso Kinesis Data Streams fornecido não existe. Ou o QLDB não tem permissões suficientes para gravar registros de dados em seu fluxo de dados do Kinesis especificado.  
Verifique se o fluxo de dados do Kinesis que você fornece na sua solicitação de fluxo está correto. Para obter mais informações, consulte [Criar e atualizar fluxos de dados](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-streams.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.  
Além disso, verifique se você define uma política para o fluxo de dados Kinesis especificado que concede ao serviço QLDB (`qldb.amazonaws.com`) permissões às ações a seguir. Para obter mais informações, consulte [Permissões de fluxo](streams.perms.md).  
+ `kinesis:PutRecord`
+ `kinesis:PutRecords`
+ `kinesis:DescribeStream`
+ `kinesis:ListShards`

**IllegalArgumentException**  
Mensagem: Resposta inesperada do Kinesis Data Streams ao validar a configuração do Kinesis. Resposta do Kinesis: *errorCode* *errorMessage*  
A tentativa de gravar registros de dados no fluxo de dados do Kinesis fornecido falhou com a resposta de erro fornecida do Kinesis. Para obter mais informações sobre as causas possíveis, consulte [Solução de problemas dos produtores do Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/troubleshooting-producers.html) no *Guia do usuário do Amazon Kinesis Data Streams*.

**IllegalArgumentException**  
Mensagem: A data de início não deve ser maior que a data de término.  
O `InclusiveStartTime` e `ExclusiveEndTime` devem estar no formato de data e hora [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) e em UTC (Tempo Universal Coordenado).

**IllegalArgumentException**  
Mensagem: A data de início não pode ser no futuro  
O `InclusiveStartTime` e `ExclusiveEndTime` devem estar no formato de data e hora `ISO 8601` e em UTC.

**LimitExceededException**  
Mensagem: Excedeu o limite de 5 fluxos de registro em execução simultânea no Kinesis Data Streams  
O QLDB impõe um limite padrão de cinco fluxos de diário simultâneos.