

# Transmisión de datos a tablas con Amazon Data Firehose
<a name="s3-tables-integrating-firehose"></a>

Amazon Data Firehose es un servicio completamente administrado para entregar [datos de streaming](https://aws.amazon.com//streaming-data/) en tiempo real a destinos como Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Splunk, tablas de Apache Iceberg y puntos de conexión HTTP personalizados o puntos de conexión HTTP propiedad de proveedores de servicios de terceros compatibles. Con Amazon Data Firehose, no es necesario escribir aplicaciones ni administrar recursos. Configure los productores de datos para que envíen datos a Firehose y este entrega inmediatamente los datos al destino que usted especificó. También puede configurar Firehose para transformar los datos antes de entregarlos. Para obtener más información sobre Amazon Data Firehose, consulte [¿Qué es Amazon Data Firehose?](https://docs.aws.amazon.com//firehose/latest/dev/what-is-this-service.html)

Siga estos pasos para configurar el streaming de Firehose a tablas en buckets de tablas de S3:

1.  [Integre los buckets de tablas con los servicios de análisis de AWS](s3-tables-integrating-aws.md). 

1. Configure Firehose para la entrega de datos a las tablas de S3. Para ello, [cree un rol de servicio de AWS Identity and Access Management (IAM) que permita a Firehose acceder a las tablas](#firehose-role-s3tables).

1. Conceda al rol de servicio Firehose permisos explícitos a la tabla o al espacio de nombres de la tabla. Para obtener más información, consulte [Concesión de permisos de Lake Formation a los recursos de tabla](grant-permissions-tables.md).

1. [Cree un flujo de Firehose que enrute los datos a la tabla](#firehose-stream-tables).

## Creación de un rol para que Firehose utilice las tablas de S3 como destino
<a name="firehose-role-s3tables"></a>

Firehose necesita un [rol de servicio](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-service.html) de IAM con permisos específicos para acceder a tablas de AWS Glue y escribir datos en tablas de S3. Necesita proporcionar este rol de IAM al crear un flujo de Firehose.

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación izquierdo, elija **Políticas**

1. Elija **Crear una política** y seleccione **JSON** en el editor de políticas.

1. Agregue la siguiente política en línea que otorga permisos a todas las bases de datos y tablas del catálogo de datos. Si lo desea, puede conceder permisos solo a tablas y bases de datos específicas. Para utilizar esta política, sustituya `user input placeholders` por su propia información.

------
#### [ 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"
               ]
           }
       ]
   }
   ```

------

   Esta política tiene instrucciones que permiten el acceso a Kinesis Data Streams, la invocación de funciones de Lambda y el acceso a las claves de AWS KMS. Si no utiliza ninguno de estos recursos, puede eliminar las declaraciones correspondientes.

   Si el registro de errores está habilitado, Firehose también envía los errores de entrega de datos a los flujos y al grupo de registro de CloudWatch. Para esto, debe configurar los nombres de los grupos de registro y los flujos de registro. Para conocer los nombres de grupos de registro y de flujos de registro, consulte [Supervisión de Amazon Data Firehose mediante Registros de CloudWatch](https://docs.aws.amazon.com//firehose/latest/dev/controlling-access.html#using-iam-iceberg).

1. Después de crear la política, cree un rol de IAM con **Servicio de AWS** como **Tipo de entidad de confianza**.

1. En **Servicio o caso de uso**, elija **Kinesis**. Elija **Kinesis Firehose** como su **caso de uso**.

1. Elija **Siguiente** y, a continuación, seleccione la política que creó anteriormente.

1. Dé un nombre a su rol. Revise los detalles del rol y seleccione **Crear rol**. El rol tendrá la siguiente política de confianza.

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

****  

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

------

## Creación de un flujo de Firehose para tablas de S3
<a name="firehose-stream-tables"></a>

El siguiente procedimiento muestra cómo crear un flujo de Firehose para entregar datos a tablas de S3 mediante la consola. Se necesitan los siguientes requisitos previos para configurar un flujo de Firehose para tablas de S3.

**Requisitos previos**
+ [Integre los buckets de tablas con los servicios de análisis de AWS](s3-tables-integrating-aws.md).
  + [Creación de un espacio de nombres de ](s3-tables-namespace-create.md).
  + [Creación de una tabla](s3-tables-create.md).
+ Cree el [rol para que Firehose acceda a Tablas de S3](#firehose-role-s3tables).
+ [Conceda permisos de Lake Formation](grant-permissions-tables.md) al rol de servicio de Firehose que creó para acceder a las tablas.

Para proporcionar información de enrutamiento a Firehose cuando configura una transmisión, utilice el nombre del enlace de recursos como nombre de la base de datos y el nombre de una tabla en ese espacio de nombres. Puede utilizar estos valores en la sección Clave única de una configuración de flujo de Firehose para enrutar datos a una sola tabla. También puede utilizar estos valores para enrutar a una tabla mediante expresiones de consulta JSON. Para obtener más información, consulte [Enrutar los registros entrantes a una única tabla de Iceberg](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html). 

**Configuración de un flujo de Firehose para tablas de S3 (consola)**

1. Abra la consola de Firehose en [https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/).

1. Seleccione **Crear flujo de Firehose**.

1. En **Origen**, elija uno de los siguientes orígenes:
   + Amazon Kinesis Data Streams
   + Amazon MSK
   + PUT directa

1. En **Destino**, elija **Tablas de Apache Iceberg**.

1. Introduzca un **nombre de flujo de Firehose**.

1. Establezca la **Configuración de origen**.

1. En **Configuración del destino**, elija **Cuenta actual** para el flujo a las tablas de la cuenta o **Múltiples cuentas** para las tablas de otra cuenta.
   + Para las tablas de la **Cuenta actual**, seleccione el catálogo de Tablas de S3 en la lista desplegable **Catálogo**.
   + Para las tablas de **Múltiples cuentas**, introduzca el **ARN del catálogo** al que desea hacer streaming en otra cuenta.

1. Configure los nombres de base de datos y de tabla mediante **Configuración de clave única**, expresiones JSONQuery o una función de Lambda. Para obtener más información, consulte [Enrutamiento de los registros entrantes a una sola tabla de Iceberg](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html) y [Enrutamiento de los registros entrantes a diferentes tablas de Iceberg](https://docs.aws.amazon.com//firehose/latest/dev/apache-iceberg-format-input-record-different.html) en la *Guía para desarrolladores de Amazon Data Firehose*.

1. En **Configuración de copia de seguridad**, especifique un **Bucket de copia de seguridad de S3**.

1. En **Roles de IAM existentes**, en **Configuración avanzada**, seleccione el rol de IAM que creó para Firehose.

1. Seleccione **Crear flujo de Firehose**.

Para obtener más información sobre las otras opciones que puede configurar para un flujo, consulte [Configuración del flujo de Firehose](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-stream.html) en la *Guía para desarrolladores de Amazon Data Firehose*.