Blog de Amazon Web Services (AWS)

Ingerir datos de bases de datos relacionales en Data Lake en AWS con los Blueprints de Lake Formation

Por Hugo Rozestraten, Arquitecto de Soluciones especializado en Analytics de AWS

 

Las empresas utilizan cada vez más los datos para la toma de decisiones, y una de las principales fuentes de datos son las bases de datos relacionales. Estos pueden contener, por ejemplo, transacciones comerciales, datos de ventas, fabricación, movimientos de inventario, transacciones bancarias, etc. Esta información transaccional, consolidada y analizada a lo largo del tiempo, indica tendencias, apunta a necesidades cambiantes y, sobre todo, sirve para tomar decisiones.

Para satisfacer esta necesidad, utilizamos un framework Data Lake, que sirve para que las empresas almacenen y utilicen datos de cualquier fuente que tengan (CRMs, ERP, Sitios web, Aplicaciones móviles, Dispositivos móviles, etc.) en el volumen que necesitan, a la velocidad con que se generan los datos y de tal manera que los datos se generen sean accesibles para llevar a cabo análisis exploratorios que son importantes para el negocio.

En este blog, vamos a explorar cómo llevar datos de bases relacionales a Data Lake simplemente, con carga inicial e incremental.

 

Formación del Lago y Planos

AWS Lake Formation es el servicio de AWS que centraliza y facilita la configuración de un Data Lake seguro de forma rápida y organizada. El servicio le ayuda a recopilar y catalogar datos de almacenamiento de objetos y bases de datos, mover datos al nuevo Data Lake de Amazon S3, limpiar y clasificar datos mediante algoritmos de aprendizaje automático y asegurar el acceso a datos confidenciales.

El servicio Lake Formation le permite crear flujos de trabajo a partir de un blueprint (plantilla automatizada), crear flujos de trabajo de carga de datos de forma sencilla y rápida. Estos pueden ser de 3 tipos:

Snapshot de base de datos: carga o recarga datos de tablas del lago de datos mediante una conexión JDBC a una base de datos. Puede cargar todas las tablas o eliminar algunas en función de los patrones de eliminación.

Base de datos incremental: carga sólo los datos nuevos en el lago de datos, desde una conexión JDBC a una base de datos, según el concepto de marcadores (o punteros). Especifique tablas individuales para incluir, y para cada una de ellas define una columna para que sea el marcador y el orden de carga de la misma, para saber lo que ya se ha cargado y lo que se necesita cargar en el lago de datos.  Después de la primera carga incremental, el flujo de trabajo carga las tablas y, a continuación, establece y almacena el marcador para cada una de ellas. De esta forma, puede usar la carga incremental incluso para realizar la primera carga completa.

 

Cargar sus datos a Data Lake

Realizemos la creación de una base de datos y carguemos algunos datos en ella desde una máquina virtual mediante AWS Cloud9.

Requisitos previos:

1. En una cuenta de AWS, seleccione una región para realizar la carga de datos. Si aún no tienes una cuenta, puedes crearla aquí.

2. Para obtener instrucciones sencillas, seleccione el idioma como inglés en la consola. Para hacer esto, desplácese hacia abajo hasta la parte inferior de la página y, en la opción de idioma, junto a comentarios, seleccione Inglés (US).

 

 

Creación del entorno con CloudFormation.

1. Para crear un entorno con una base de datos y una instancia para el acceso:

a. Haga clic en uno de los enlaces siguientes para iniciar CloudFormation directamente en la región que elija.

 

Región de AWS elegida Enlace para crear
N.Virginia (us-east-1)
Ohio (us-east-2)
Oregon (us-west-2)
South America (sa-east-1)

b. O bien, copie y pase la siguiente URL para iniciarse en otras regiones al crear CloudFormation. Si elige el paso (a), omita este paso.

https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/07b3ebc0d5e54945bcf1988e58530272/v1/cfn-master-blueprint.template

Vaya a Cloudformation -> Crear pila y, en la URL de Amazon S3, pegue la URL anterior:

 

 

c. En Nombre de pila, ponga «labdb» y haga clic en Siguiente.

 

 

d. Desplácese hasta la parte inferior de la página siguiente y, a continuación, haga clic de nuevo en Siguiente.

 

 

e. Desplácese hasta la parte inferior de la página siguiente, compruebe las opciones de creación de recursos IAM y CAPABILITY_AUTO_EXPAND y haga clic en Crear pila.

 

 

2. La creación anterior tomará unos 15 minutos, y creará una «nested stack» con el nombre iniciado por «LAB-VPcStack-».

 

 

Una vez que haya terminado de crear la “stack”«LAB-VPcStack-», continúe con el siguiente paso.

Configuración de AWS Cloud9

1. Vaya a su entorno de AWS Cloud9:

a. Vaya a Servicios -> Cloud9.

 

 

b. Haga clic en «open IDE».

 

 

c. Ahora tiene acceso a bash en el entorno Cloud9:

 

 

2. Configuración del grupo de seguridad:

a. Compruebe que ya existe un grupo de seguridad (SG) creado por CloudFormation, que es el firewall de la base de datos denominado «LAB-Blueprint-DB-entrante»:

Bash

aws ec2 describe-security-groups | grep lab-blueprint-Db-Inbound

 

 

Si el comando regresa como indica la figura, el grupo de seguridad ya existe, continúe con el siguiente comando. Si no devuelve ninguna fila, espere unos minutos más para que CloudFormation cree la misma.

b. Configuración de variables basadas en las salidas del comando CLI:

Bash

vpcid=`aws ec2 describe-vpcs --filters Name=tag:Name,Values=labdb | grep VpcId | awk '{print $2}' | sed s/\"//g | sed s/,//g`

group=`aws ec2 describe-security-groups | grep cloud9 | grep GroupName | awk '{print $2}' | sed s/\"//g | sed s/,//g`

source=`aws ec2 describe-security-groups --filters Name=group-name,Values=$group | grep GroupId | head -1 | awk '{print $2}' | sed s/\"//g | sed s/,//g`

target=`aws ec2 describe-security-groups --filters Name=group-name,Values=lab-blueprint-Db-Inbound | grep GroupId | head -1 | awk '{print $2}' | sed s/\"//g | sed s/,//g`

aws ec2 authorize-security-group-ingress \
    --group-id $target \
    --protocol tcp \
    --port 3306 \
    --source-group $source

 

 

c. Aún en su entorno de AWS Cloud9, copie dos archivos python para la generación de datos e instale pymysql ejecutando los comandos en bash:

Bash

sudo pip install pymysql

wget https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/07b3ebc0d5e54945bcf1988e58530272/v1/app.py

wget https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/07b3ebc0d5e54945bcf1988e58530272/v1/rds_config.py

 

 

Creación de datos

1. Vaya a la consola de RDS para encontrar el punto final de la base de datos:

a. Vaya a Servicios -> RDS:

 

 

b. En la pestaña izquierda haga clic en Bases de datos, y luego haga clic en el clúster creado comenzando con «labd-db-aurora»:

 

 

c. Copie el nombre del endpoint desde Writer:

 

 

2. Conéctese desde Cloud9.

a. Abra el archivo rds_config.py desde Cloud9 y edite el campo de endpoint con el endpoint copiado desde RDS:

 

 

b. Haga clic en Archivo, y, a continuación, Guardar para guardar.

c. Cree la tabla y tres registros con el programa py:

Bash

python app.py create

 

 

Creación de planos en la formación del lago

1. Conexión en pegamento.

a. Vaya a la consola de Glue, haga clic en Bases de datos -> Connections y, a continuación, Agregar conexión.

 

 

b. Rellene las propiedades:

      • Nombre de la conexión: lab
      • Tipo de conexión: Amazon RDS
      • Motor de base de datos: Amazon Aurora

c. Haga clic en

 

 

d. Rellene los datos de acceso:

      • Instancia: labdb1
      • Database name: labdb
      • Username: labuser
      • Password: (contraseña): si no se cambió durante la configuración de CloudFormation, es Tim3t0change.

e. Haga clic en

 

 

f. Haga clic en Finalizar.

 

 

g. Pruebe la conexión haciendo clic en ella y luego Test connection.

 

 

h. Seleccione el rol Glue-LABDB-role y Test connection.

 

 

i. Después de aproximadamente 1 minuto verá la conexión correctamente.

 

 

2. Configuración de la Formación del Lago.

a. Vaya a la consola de Lake Formation, y haga clic en Get started.

 

 

b. Haga clic en Agregar administrador.

 

 

c. Elija su usuario o el rol que está utilizando como Administrador de Lake Formation, puede comprobar el usuario o desplazarse que está utilizando en la parte superior de la consola, justo al lado de la región, con el formato «usuario o role @account».

d. Haga clic en

 

 

e. En el menú de la izquierda, seleccione Data Lake locations y, a continuación, haga clic en Register location.

 

 

f. En Ruta de Amazon S3, haga clic en Browse:

 

 

g. Seleccione el cubo que comience con ’00-labdb’ y termine con ‘-raw’.

 

 

h. Haga clic en Register location

3. Uso de Blueprint.

a. Vaya a la consola de Glue.

b. Haga clic en Bases de datos en el menú de la izquierda y seleccione «Agregar base de datos», ingrese el nombre sampledb, y haga clic en «crear»:

 

 

c. Vuelve a la consola de Lake

d. En Bases de datos, seleccione sampledb -> Action -> Grant.

      • Otorgue la subvención siguiente al rol Glue-LABDB.

e. En Permisos de base de datos seleccione Crear tabla, Alter, Drop y Super.

f. Haga clic en Grant.

 

 

g. En el menú de la izquierda, haga clic en Permissions -> data location y, a continuación, haga clic en Grant.

      • Otorgue la subvención siguiente al rol Glue-LABDB.

 

 

h. En la consola Lake Formation, vaya a Blueprints y haga clic en Use blueprint.

i. Seleccione Base de datos incremental, para realizar una carga inicial y cargas incrementales basadas en una clave de tabla.

 

 

j. En Importar origen, seleccione:

      • Conexión de base de datos: lab
      • Source path data: labdb/%

k. En Datos incrementales, complete las propiedades:

      • Table name: empleado (sólo minúsculas)
      • Bookmark key: empid (sólo minúsculas)
      • Bookmark order: Ascendente

 

 

l. En Import target, seleccione:

      • sampledb como base de target database
      • Su depósito sin procesar como ubicación de almacenamiento de destino.

 

 

      • Formato de datos como «Parquet».

 

 

m. En Frecuencia de importación, seleccione:

      • Frequency: Custom
        1. Expresión de cron: 0/20 * * *? *
          (cada 20 minutos)

n. En Opciones de importación, rellene las propiedades:

      • Workflow name: labworkflow
      • IAM role: Glue-labdb-role
      • Table prefix: lab

o. Haga clic en Crear.

 

 

4. Mantener un seguimiento de su flujo de trabajo.

a. Después de crear el blueprint, generará un flujo de trabajo. Si aparece «Start now», haga clic para comenzar. Si no aparece, vaya a Action -> Start.

 

 

b. Después de iniciar, abra el enlace «labworkflow».

c. Aparecerá al menos un ID de ejecución, haga clic en él.

 

 

d. Se crean varios pasos con Jobs, desde la asignación de su fuente hasta la carga y la transformación de archivos en formato Parquet. Haga clic en View run details para realizar un seguimiento de la ejecución del

 

 

e. Puede comprobar el historial de cada ejecución de flujo de trabajo.

 

 

5. Ver datos en Data Lake.

a. Después de que se ejecute Workflow, vaya a la consola de Amazon Athena.

 

 

b. Haga clic en Get started. Si aparece el siguiente mensaje, haga clic en ‘set up a query result location in Amazon S3’.

 

 

c. Rellene la ubicación de resultados de consulta con y haga clic en Save:
s3://<nome seu bucket> /athena-results/

 

 

d. Realizar una consulta en Athena:

      • SQL
        SELECT * FROM "sampledb"."lab_labdb_employee";

 

 

6. Generar datos incrementales.

a. Vaya a la consola de Cloud9 y ejecute el siguiente comando 2 veces para generar nuevos datos:

Bash

python app.py add

 

 

b. Vuelva a Flujo de trabajo en la consola Lake Formation en la sección Blueprints y, si no hay ejecución actual en este momento, inicie una ejecución haciendo clic en Acciones -> Inicio.

 

 

c. Si ya se está ejecutando a través de Schedule, espere a que termine.

d. Regresa a Amazon Athena y vuelve a consultar en el editor:

      • SQL
SELECT * FROM "sampledb"."lab_labdb_employee";

 

 

Abstracto

En esta publicación, describimos cómo utilizar el servicio AWS Lake Formation Blueprints, que facilita la ingesta de datos de bases de datos o registros en Data Lake, creando un flujo de trabajo completo para llevar los datos y catalogarlos.

Desde la ingestión hasta el consumo de datos, encontrará en esta publicación una forma sencilla de llevar datos de base de datos relacionales a su Data Lake en AWS y realizar consultas y permisos SQL sobre los datos.

 Haga más con Data Lakes en AWS:

Siga nuestra serie de publicaciones de blog en Data Lake para obtener información sobre cómo crear y extraer valor de su lago de datos en AWS.

 

Este artículo fue traducido del Blog de AWS en Portugués.

 


Sobre el autor

Hugo Rozestraten es Arquitecto de Soluciones especializado en Analytics de AWS.

 

 

 

 

 

 

 

Conozca los distintos tipos de bases de datos disponibles, las diferencias entre los servicios estándar administrados de base de datos y las bases de datos nativas en la nube con el volante de inercia de datos