

# Cenário 2: dados quase em tempo real para equipes de segurança
<a name="scenario-2"></a>

A empresa *ABC2Badge* fornece sensores e crachás para eventos corporativos ou em grande escala, como o [AWS re:Invent](https://reinvent.awsevents.com/). Os usuários se cadastram no evento e recebem crachás exclusivos que os sensores captam em todo o campus. Conforme os usuários passam por um sensor, suas informações anonimizadas são registradas em um banco de dados relacional. 

Em um próximo evento, devido ao alto volume de participantes, a equipe de segurança do evento solicitou que a *ABC2Badge* coletasse dados para as áreas mais concentradas do campus a cada 15 minutos. Isso dará à equipe de segurança tempo suficiente para reagir e dispersar o pessoal de segurança de forma proporcional às áreas concentradas. Considerando-se esse novo requisito da equipe de segurança e a inexperiência na criação de uma solução de streaming, para processar dados quase em tempo real, a *ABC2Badge* está procurando uma solução simples, mas escalável e confiável.

Sua solução atual de data warehouse é o [Amazon Redshift](https://aws.amazon.com/redshift/). Ao analisar os recursos dos serviços do Amazon Kinesis, eles perceberam que o Amazon Kinesis Data Firehose pode receber um fluxo de registros de dados, agrupá-los com base no tamanho do buffer e/ou intervalo de tempo e inseri-los no Amazon Redshift. Eles criaram um fluxo de entrega do Kinesis Data Firehose e o configuraram para copiar dados em suas tabelas do Amazon Redshift a cada cinco minutos. Como parte dessa nova solução, eles usaram o agente do Amazon Kinesis nos servidores. A cada cinco minutos, o Kinesis Data Firehose carrega dados no Amazon Redshift, onde a equipe de business intelligence (BI) pode realizar sua análise e enviar os dados à equipe de segurança a cada 15 minutos.

![Nova solução usando o Amazon Kinesis Data Firehose](http://docs.aws.amazon.com/pt_br/whitepapers/latest/streaming-data-solutions-amazon-kinesis/images/SDS-image-2.png)


*Nova solução usando o Amazon Kinesis Data Firehose*

## Amazon Kinesis Data Firehose
<a name="amazon-kinesis-data-firehose"></a>

O [Amazon Kinesis Data Firehose](https://aws.amazon.com/kinesis/data-firehose) é o modo mais fácil de carregar dados de streaming na AWS. Ele pode capturar, transformar e carregar dados de streaming no [Amazon Kinesis Data Analytics](https://aws.amazon.com/kinesis/data-analytics/), no [Amazon Simple Storage Service](https://aws.amazon.com/s3/) (Amazon S3), no [Amazon Redshift](https://aws.amazon.com/redshift/),[Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) (OpenSearch Service) e no [Splunk ](https://www.splunk.com/). Além disso, o Kinesis Data Firehose pode carregar dados de streaming em qualquer endpoint HTTP personalizado ou endpoints HTTP pertencentes a [provedores de serviços terceiros](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html) compatíveis. 

O Kinesis Data Firehose viabiliza análises quase em tempo real com ferramentas e painéis de business intelligence que você já usa no momento. Trata-se de um serviço sem servidor totalmente gerenciado que escala automaticamente para corresponder à taxa de transferência dos dados e exige administração contínua. O Kinesis Data Firehose pode separar em lotes, compactar e criptografar os dados antes de carregá-los, o que minimiza o volume de armazenamento usado no destino e aumenta a segurança. Ele também pode transformar os dados da fonte com o uso do AWS Lambda e entregar os dados transformados aos destinos. Você configura os produtores de dados para enviar dados ao Kinesis Data Firehose, e ele os entrega automaticamente ao destino especificado.

### Enviar dados para um fluxo de entrega do Firehose
<a name="sending-data-to-a-firehose-delivery-stream"></a>

Para enviar dados para o fluxo de entrega, existem várias opções. A AWS oferece SDKs para muitas linguagens de programação populares, sendo que cada uma fornece APIs para o [Amazon Kinesis Data Firehose](https://aws.amazon.com/kinesis/data-firehose/). A AWS tem um utilitário para ajudar a enviar dados ao seu fluxo de entrega. O Kinesis Data Firehose foi integrado a outros serviços da AWS para enviar dados diretamente desses serviços ao fluxo de entrega.

### Usar o Amazon Kinesis Agent
<a name="using-amazon-kinesis-agent"></a>

O [Amazon Kinesis Agent](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-agents.html) é uma aplicação de software independente que monitora continuamente um conjunto de arquivos de log para que novos dados sejam enviados ao fluxo de entrega. O agente lida automaticamente com a rotação de arquivos, pontos de verificação, novas tentativas em caso de falhas e emite métricas do [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) para monitoramento e solução de problemas do fluxo de entrega. Configurações adicionais, como pré-processamento de dados, monitoramento de vários diretórios de arquivos e gravação em vários fluxos de entrega, podem ser aplicadas ao agente. 

O agente pode ser instalado em servidores baseados em Linux ou Windows, como servidores web, servidores de log e servidores de banco de dados. Depois que o agente estiver instalado, bastará especificar os arquivos de log que ele monitorará e o fluxo de entrega para o qual ele fará os envios. O agente enviará novos dados de forma durável e confiável para o fluxo de entrega.

### Usar a API com o AWS SDK e os serviços da AWS como fonte
<a name="using-api-with-aws-sdk-and-aws-services"></a>

A API do Kinesis Data Firehose oferece duas operações para enviar dados para o fluxo de entrega. O `PutRecord` envia um registro de dados em uma chamada. O `PutRecordBatch` pode enviar vários registros de dados em uma chamada e pode atingir maior taxa de transferência por produtor. Em cada método, é necessário especificar o nome do fluxo de entrega e o registro de dados, ou matriz de registros de dados, ao usar esse método. Para obter mais informações e código de exemplo para as operações da API do Kinesis Data Firehose, consulte [Gravar em um fluxo de entrega do Firehose usando o AWS SDK.](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-sdk.html)

O Kinesis Data Firehose também é executado com o [Kinesis Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-kinesis-streams.html), o [CloudWatch Logs](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-cloudwatch-logs.html), o [CloudWatch Events](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-cloudwatch-events.html), o [Amazon Simple Notification Service](https://aws.amazon.com/sns/) (Amazon SNS), o [Amazon API Gateway](https://aws.amazon.com/api-gateway/) e o [AWS IoT](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-iot.html). É possível enviar fluxos de dados, logs, eventos e dados de IoT de maneira escalável e confiável diretamente para um destino do Kinesis Data Firehose.

### Processar dados antes da entrega ao destino
<a name="processing-data-before-delivery-to-destination"></a>

Em alguns cenários, é recomendável transformar ou aprimorar seus dados de streaming antes que eles sejam entregues ao destino. Por exemplo, os produtores de dados podem enviar texto não estruturado em cada registro de dados, e você precisa transformá-lo em JSON antes de entregá-lo ao [OpenSearch Service](https://aws.amazon.com/opensearch-service/). Ou talvez você queira converter os dados JSON em um formato de arquivo em colunas, como o [Apache Parquet](https://parquet.apache.org/) ou o [Apache ORC](https://orc.apache.org/), antes de armazenar os dados no [Amazon S3](https://aws.amazon.com/s3/).

O Kinesis Data Firehose tem capacidade de [conversão de formato](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html) de dados integrada. Com isso, você pode converter facilmente seus fluxos de dados JSON em formatos de arquivo Apache Parquet ou Apache ORC.

#### Fluxo de transformação de dados
<a name="data-transformation-flow"></a>

Para habilitar [transformações de dados](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html) de streaming, o Kinesis Data Firehose usa uma função do Lambda criada por você para transformar seus dados. O Kinesis Data Firehose armazena os dados recebidos em um tamanho de buffer especificado para a função e, depois, chama a função do Lambda especificada de forma assíncrona. Os dados transformados são enviados do Lambda ao Kinesis Data Firehose, e o Kinesis Data Firehose entrega os dados ao destino.

#### Conversão de formato de dados
<a name="data-format-conversion"></a>

Você também pode habilitar a [conversão de formato de dados](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html) do Kinesis Data Firehose, que converterá seu fluxo de dados JSON em Apache Parquet ou Apache ORC. Esse recurso só pode converter JSON em Apache Parquet ou Apache ORC. Se você tiver dados em CSV, poderá transformá-los em JSON com o uso de uma função do Lambda e, depois, aplicar a conversão do formato de dados.

#### Entrega de dados
<a name="data-delivery"></a>

Como um fluxo de entrega quase em tempo real, o Kinesis Data Firehose armazena os dados recebidos em buffer. Depois que os limites de buffer do fluxo de entrega forem atingidos, seus dados serão entregues ao destino configurado. Há algumas diferenças na forma como o Kinesis Data Firehose [entrega dados para cada destino](https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name) que serão analisadas nas próximas seções deste artigo.

### Amazon S3
<a name="amazon-s3"></a>

O [Amazon S3](https://aws.amazon.com/s3/) é um armazenamento de objetos com uma interface de web service simples para armazenar e recuperar qualquer quantidade de dados, de qualquer parte da Web. Ele foi projetado para oferecer uma resiliência de 99,999999999% e escalar para mais de 1 trilhão de objetos em todo o mundo. 

#### Entrega de dados para o Amazon S3
<a name="data-delivery-to-amazon-s3"></a>

Para a entrega de dados para o Amazon S3, o Kinesis Data Firehose concatena vários registros de entrada com base na configuração de buffer do fluxo de entrega e os entrega ao Amazon S3 como um objeto do S3. A frequência de entrega de dados para o S3 é determinada pelo tamanho do buffer do S3 (1 MB a 128 MB) ou pelo intervalo do buffer (60 segundos a 900 segundos), o que ocorrer primeiro. 

A entrega de dados para o bucket do S3 pode apresentar falha por vários motivos. Por exemplo, o bucket pode não existir mais ou a função do [AWS Identity and Access Management](https://aws.amazon.com/iam/) (IAM) [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) que o Kinesis Data Firehose assume pode não ter acesso ao bucket. Nessas condições, o Kinesis Data Firehose continua executando novas tentativas por até 24 horas até que a entrega seja bem-sucedida. O tempo máximo de armazenamento de dados do Kinesis Data Firehose é de 24 horas. Se a entrega de dados apresentar falha por mais de 24 horas, os dados serão perdidos.

### Amazon Redshift
<a name="amazon-redshift"></a>

O [Amazon Redshift](https://aws.amazon.com/redshift/) é um data warehouse rápido e totalmente gerenciado que torna simples e econômica a análise de todos os seus dados usando ferramentas SQL padrão e ferramentas de BI que você já tem. O serviço permite executar consultas complexas de análise em petabytes de dados estruturados, usando otimização de consultas sofisticada, armazenamento em colunas em discos locais de alta performance e execução paralela massiva de consultas. 

#### Entrega de dados para o Amazon Redshift
<a name="data-delivery-to-amazon-redshift"></a>

Para a entrega de dados ao Amazon Redshift, o Kinesis Data Firehose primeiro entrega os dados recebidos ao bucket do S3 no formato descrito anteriormente. Depois, o Kinesis Data Firehose emite um comando COPY do Amazon Redshift para carregar os dados do bucket do S3 para o cluster do Amazon Redshift. 

A frequência das operações `COPY` de dados do S3 para o Amazon Redshift é determinada de acordo com a velocidade com a qual o cluster do Amazon Redshift consegue finalizar o comando `COPY`. Para um destino do Amazon Redshift, você pode especificar uma duração de repetição (0 a 7.200 segundos) ao criar um fluxo de entrega para lidar com falhas de entrega de dados. O Kinesis Data Firehose faz novas tentativas pelo período especificado e ignorará esse lote específico de objetos do S3 se não for bem-sucedido. As informações dos objetos ignorados são entregues ao bucket do S3 como um arquivo manifesto na pasta errors/, que você pode usar para alocação manual.

Veja a seguir um diagrama de arquitetura do fluxo de dados do Kinesis Data Firehose para o Amazon Redshift. Embora esse fluxo de dados seja exclusivo do Amazon Redshift, o Kinesis Data Firehose segue padrões semelhantes para os outros destinos.

![Fluxo de dados do Kinesis Data Firehose para o Amazon Redshift](http://docs.aws.amazon.com/pt_br/whitepapers/latest/streaming-data-solutions-amazon-kinesis/images/SDS-image-3.png)


*Fluxo de dados do Kinesis Data Firehose para o Amazon Redshift*

### Amazon OpenSearch Service (OpenSearch Service)
<a name="amazon-elasticsearch-service"></a>

[OpenSearch Service](https://aws.amazon.com/opensearch-service/) é um serviço totalmente gerenciado que fornece as APIs fáceis de usar do OpenSearch e recursos em tempo real, além da disponibilidade, da escalabilidade e da segurança exigidas pelas workloads de produção. O OpenSearch Service facilita a implantação, a operação e a escala do OpenSearch para análise de logs, pesquisa de texto completo e monitoramento de aplicações. 

#### Entrega de dados ao OpenSearch Service
<a name="data-delivery-to-amazon-es"></a>

Para entrega de dados ao OpenSearch Service, o Kinesis Data Firehose armazena os registros recebidos em buffer com base na configuração de armazenamento em buffer do fluxo de entrega e, depois, gera uma solicitação em massa do OpenSearch para indexar vários registros no cluster do OpenSearch. A frequência de entrega de dados ao OpenSearch Service é determinada pelos valores de tamanho do buffer do OpenSearch (1 MB a 100 MB) e do intervalo de buffer (60 segundos a 900 segundos), o que ocorrer primeiro. 

No destino do OpenSearch Service, você pode especificar uma duração de nova tentativa (0 a 7.200 segundos) ao criar um fluxo de entrega. O Kinesis Data Firehose executa novas tentativas pelo período especificado e, depois, ignora essa solicitação de índice específica. Os documentos ignorados são entregues ao bucket do S3 na pasta `elasticsearch_failed/`, que você pode usar para alocação manual. 

O Amazon Kinesis Data Firehose pode alternar o índice do OpenSearch Service com base em uma duração. Dependendo da opção de rotação escolhida (`NoRotation`, `OneHour`, `OneDay`, `OneWeek` ou `OneMonth`), o Kinesis Data Firehose anexa uma parte do carimbo de data/hora de chegada no Tempo Universal Coordenado (UTC) ao nome de índice especificado.

### Endpoint HTTP personalizado ou provedor de serviços de terceiros compatível
<a name="custom-http-endpoint-or-supported-third-party-sp"></a>

O Kinesis Data Firehose pode enviar dados para endpoints HTTP personalizados ou provedores terceiros compatíveis, como Datadog, Dynatrace, LogicMonitor, MongoDB, New Relic, Splunk e Sumo Logic.

#### Endpoint HTTP personalizado ou provedor de serviços de terceiros compatível
<a name="data-delivery-to-custom-http-endpoints"></a>

Para que o Kinesis Data Firehose forneça dados com êxito a endpoints HTTP personalizados, esses endpoints devem aceitar solicitações e enviar respostas usando determinados formatos de solicitação e resposta do Kinesis Data Firehose. 

Ao fornecer dados a um endpoint HTTP de propriedade de um provedor de serviços terceiro compatível, você pode usar o serviço AWS Lambda integrado para criar uma função com o objetivo de transformar o(s) registro(s) de entrada no formato esperado pela integração do provedor de serviços. 

Para a frequência de entrega de dados, cada provedor de serviços tem um tamanho de buffer recomendado. Trabalhe com seu provedor de serviços para obter mais informações sobre o tamanho recomendado do buffer. Para o tratamento de falhas na entrega de dados, o Kinesis Data Firehose estabelece uma conexão com o endpoint HTTP primeiro aguardando uma resposta do destino. O Kinesis Data Firehose continua estabelecendo conexão até que a duração da nova tentativa expire. Depois, o Kinesis Data Firehose considera isso uma falha de entrega e faz backup dos dados no bucket do S3. 

## Resumo
<a name="summary-3"></a>

O Kinesis Data Firehose pode entregar persistentemente seus dados de streaming a um destino compatível. É uma solução totalmente gerenciada, que requer pouco ou nenhum desenvolvimento. Para a empresa *ABC2Badge*, o uso do Kinesis Data Firehose foi uma escolha natural. Eles já estavam usando o Amazon Redshift como sua solução de data warehouse. Como suas origens de dados faziam gravações contínuas em logs de transações, conseguiram utilizar o Amazon Kinesis Agent para fazer streaming desses dados sem escrever nenhum código adicional. Agora que a empresa *ABC2Badge* criou um fluxo de registros de sensores e está recebendo esses registros por meio do Kinesis Data Firehose, eles podem usar isso como base para o caso de uso da equipe de segurança.