

# Fazer streaming de dados para tabelas com o Amazon Data Firehose
<a name="s3-tables-integrating-firehose"></a>

O Amazon Data Firehose é um serviço totalmente gerenciado para entrega de [dados de streaming](https://aws.amazon.com//streaming-data/) em tempo real a determinados destinos, como Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Splunk, Tabelas do Apache Iceberg e endpoints HTTP personalizados ou endpoints HTTP pertencentes a provedores de serviços de terceiros compatíveis. Com o Amazon Data Firehose, você não precisa escrever aplicações nem gerenciar recursos. Configure os produtores de dados para enviar dados ao Firehose e ele entregará automaticamente os dados ao destino especificado. Você também pode configurar o Firehose para transformar os dados antes de entregá-los. Consulte mais informações sobre o Amazon Data Firehose em [What is Amazon Data Firehose?](https://docs.aws.amazon.com//firehose/latest/dev/what-is-this-service.html).

Esse é o método de acesso para trabalhar com o serviço Tabelas do S3.

1.  [Integre os buckets de tabela aos serviços de analytics da AWS](s3-tables-integrating-aws.md). 

1. Configure o Firehose para entregar dados nas tabelas do S3. Para fazer isso, [crie um perfil de serviço do AWS Identity and Access Management (IAM) que permita que o Firehose acesse suas tabelas](#firehose-role-s3tables).

1. Conceda ao perfil de serviço do Firehose permissões explícitas referentes á tabela ou ao namespace da tabela. Consulte mais informações sobre [como conceder as permissões necessárias](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-prereq.html#s3-tables-prerequisites).

1. [Crie um fluxo do Firehose que encaminhe os dados para a tabela.](#firehose-stream-tables)

## Criar um perfil para o Firehose usar tabelas do S3 como destino
<a name="firehose-role-s3tables"></a>

O Firehose precisa de um [perfil de serviço](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-service.html) do IAM com permissões específicas para acessar tabelas do AWS Glue e gravar dados nas tabelas do S3. É necessário fornecer esse perfil do IAM ao criar um fluxo do Firehose.

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação à esquerda, escolha **Políticas**.

1. Escolha **Criar uma política** e selecione **JSON** no editor de políticas.

1. Adicione a seguinte política em linha que concede permissões a todos os bancos de dados e tabelas no catálogo de dados. Se você quiser, poderá conceder permissões somente para tabelas e bancos de dados específicos. Para usar essa política, substitua os `{{user input placeholders}}` por suas próprias informações.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3TableAccessViaGlueFederation",
               "Effect": "Allow",
               "Action": [
                   "glue:GetTable",
                   "glue:GetDatabase",
                   "glue:UpdateTable"
               ],
               "Resource": [
                   "arn:aws:glue:{{us-east-1}}:{{111122223333}}:catalog/s3tablescatalog/*",
                   "arn:aws:glue:{{us-east-1}}:{{111122223333}}:catalog/s3tablescatalog",
                   "arn:aws:glue:{{us-east-1}}:{{111122223333}}:catalog",
                   "arn:aws:glue:{{us-east-1}}:{{111122223333}}:database/*",
                   "arn:aws:glue:{{us-east-1}}:{{111122223333}}:table/*/*"
               ]
           },
           {
               "Sid": "S3DeliveryErrorBucketPermission",
               "Effect": "Allow",
               "Action": [
                   "s3:AbortMultipartUpload",
                   "s3:GetBucketLocation",
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:ListBucketMultipartUploads",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::{{error delivery bucket}}",
                   "arn:aws:s3:::{{error delivery bucket}}/*"
               ]
           },
           {
               "Sid": "RequiredWhenUsingKinesisDataStreamsAsSource",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStream",
                   "kinesis:GetShardIterator",
                   "kinesis:GetRecords",
                   "kinesis:ListShards"
               ],
               "Resource": "arn:aws:kinesis:{{us-east-1}}:{{111122223333}}:stream/{{stream-name}}"
           },
           {
               "Sid": "RequiredWhenDoingMetadataReadsANDDataAndMetadataWriteViaLakeformation",
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           },
           {
               "Sid": "RequiredWhenUsingKMSEncryptionForS3ErrorBucketDelivery",
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": [
                   "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{KMS-key-id}}"
               ],
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "s3.{{us-east-1}}.amazonaws.com"
                   },
                   "StringLike": {
                       "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::{{error delivery bucket}}/prefix*"
                   }
               }
           },
           {
               "Sid": "LoggingInCloudWatch",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:{{log-group-name}}:log-stream:{{log-stream-name}}"
               ]
           },
           {
               "Sid": "RequiredWhenAttachingLambdaToFirehose",
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction",
                   "lambda:GetFunctionConfiguration"
               ],
               "Resource": [
                   "arn:aws:lambda:{{us-east-1}}:{{111122223333}}:function:{{function-name}}:{{function-version}}"
               ]
           }
       ]
   }
   ```

------

   A política tem uma instrução que permite acesso ao Kinesis Data Streams, invocando funções do Lambda e acesso a chaves do AWS KMS. Se você não usar nenhum desses recursos, poderá remover as respectivas declarações.

   Se o registro de erros em log estiver habilitado, o Firehose também enviará erros de entrega de dados para seu grupo de logs e fluxos do CloudWatch. Para isso, é necessário configurar os nomes do grupo de logs e do fluxo de logs. Para os nomes do grupo de logs e do fluxo de logs, consulte [Monitor Amazon Data Firehose Using CloudWatch Logs](https://docs.aws.amazon.com//firehose/latest/dev/controlling-access.html#using-iam-iceberg).

1. Depois de criar a política, crie um perfil do IAM com a opção **Serviço da AWS** como **Tipo de entidade confiável**.

1. Em **Serviço ou Caso de Uso**, escolha **Kinesis**. Em **Caso de uso**, escolha **Kinesis Firehose**.

1. Selecione **Próximo** e escolha a política que você criou anteriormente.

1. Dê um nome à sua função. Revise os detalhes do perfil e escolha **Criar perfil**. O perfil terá a política de confiança a seguir.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sts:AssumeRole"
               ],
               "Principal": {
                   "Service": [
                       "firehose.amazonaws.com"
                   ]
               }
           }
       ]
   }
   ```

------

## Configurar um fluxo do Firehose para tabelas do S3
<a name="firehose-stream-tables"></a>

O procedimento a seguir mostra como criar um fluxo do Firehose para entregar dados às tabelas do S3 usando o console. Os pré-requisitos a seguir são necessários para configurar um fluxo do Firehose para tabelas do S3.

**Pré-requisitos**
+ [Integre os buckets de tabela aos serviços de analytics da AWS](s3-tables-integrating-aws.md).
  + [Crie um namespace ](s3-tables-namespace-create.md).
  + [Criar uma tabela](s3-tables-create.md).
+ Crie o [perfil para que o Firehose acesse as tabelas do S3](#firehose-role-s3tables).
+ [Conceda as permissões necessárias](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-prereq.html#s3-tables-prerequisites) ao perfil de serviço do Firehose que você criou para acessar tabelas.

Para fornecer informações de roteamento ao Firehose ao configurar um fluxo, use namespace como o nome do banco de dados e o nome de uma tabela nesse namespace. Você pode usar esses valores na seção “Chave exclusiva” de uma configuração de fluxo do Firehose a fim de rotear dados para uma única tabela. Você também pode usar esses valores a fim de rotear para uma tabela usando expressões de consulta JSON. Para ter mais informações, consulte [Route incoming records to a single Iceberg table](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html). 

**Como configurar um fluxo do Firehose para tabelas do S3 (console)**

1. Abra o console do Firehose em [https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/).

1. Escolha **Criar fluxo do Firehose**.

1. Em **Origem**, escolha uma das seguinte opções:
   + Amazon Kinesis Data Streams
   + Amazon MSK
   + PUT direto

1. Em **Destino**, selecione **Tabelas do Apache Iceberg**.

1. Insira um **Nome do fluxo do Firehose**.

1. Defina as **Configurações da origem**.

1. Em **Configurações de destino**, escolha **Conta atual** para transmitir para tabelas em sua conta ou **Entre contas** para tabelas em outra conta.
   + Para tabelas na **Conta atual**, selecione o Catálogo de Tabelas do S3 no menu suspenso **Catálogo**.
   + Para tabelas **Entre contas**, insira o **ARN do catálogo** para o qual você deseja transmitir em outra conta.

1. Configure os nomes do banco de dados e da tabela usando a **Configuração de chave exclusiva**, expressões JSONQuery ou em uma função do Lambda. Consulte mais informações em [Route incoming records to a single Iceberg table](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html) e [Route incoming records to different Iceberg tables](https://docs.aws.amazon.com//firehose/latest/dev/apache-iceberg-format-input-record-different.html) no *Guia do desenvolvedor do Amazon Data Firehose*.

1. Em **Configurações de backup**, especifique um **Bucket de backup do S3**.

1. Em **Funções do IAM existentes** na seção **Configurações avançadas**, selecione o perfil do IAM que você criou para o Firehose.

1. Escolha **Criar fluxo do Firehose**.

Consulte mais informações sobre as outras configurações que você pode definir para um fluxo em [Set up the Firehose stream](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-stream.html) no *Guia do desenvolvedor do Amazon Data Firehose*.