Blog de Amazon Web Services (AWS)
Ingesta de datos de bases de datos relacionales hacia un 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. Estas pueden contener, por ejemplo, transacciones comerciales, datos de ventas, fabricación, movimientos de inventario, transacciones bancarias, etc. Esta información transaccional, al consolidarse y analizarse en el tiempo, indica tendencias, señala las necesidades de cambios y, principalmente, sirve para tomar decisiones.
Para satisfacer esta necesidad, utilizamos una estructura de Data Lake, que permite a las empresas almacenar y utilizar datos de cualquier fuente que tengan (CRMs, ERP, sitios web, aplicaciones y dispositivos móviles, etc.) en el volumen que necesiten, y a la velocidad que los datos se generen, de tal manera que estos datos sean accesibles para realizar análisis exploratorios importantes para el negocio.
En este blog, exploraremos cómo traer datos de bases de datos relacionales a Data Lake de una manera simple, con carga inicial e incrementales.
Lake Formation y Blueprints
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 bases de datos y almacenamiento de objetos, mover datos al nuevo Data Lake en Amazon S3, limpiar y clasificar datos mediante algoritmos de aprendizaje automático y proteger el acceso a datos confidenciales.
El servicio AWS 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 simple y rápida. Estos pueden ser de 3 tipos:
Database snapshot: carga o vuelve a cargar datos de tablas en el data lake mediante una conexión JDBC a una base de datos. Puede cargar todas las tablas o excluir algunas basándose en patrones de exclusión.
Incremental database: carga solo datos nuevos en el data lake, desde una conexión JDBC a una base de datos, según el concepto de bookmarks (o punteros). Usted especifica tablas individuales para incluir, y para cada una de ellas define una columna para que sea el bookmark (marcador) y el orden de carga de las mismas, para saber lo que ya se ha cargado y lo que se necesita cargar en el data lake. Después de la primera carga incremental, el flujo de trabajo carga las tablas y, luego establece y almacena el bookmark para cada una de ellas. De esta manera, puede usar la carga incremental incluso para realizar la primera carga completa.
Cargando sus datos al Data Lake
Vamos a crear de una base de datos y cargar 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 cargar los datos. Si aún no tiene una cuenta, puede crearla aquí.
2. Para facilitar las instrucciones, 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 feedback, seleccione English (US).
Creación del ambiente con CloudFormation.
- Para crear un ambiente con una base de datos y una instancia para el acceso:
a. Haga clic en uno de los los siguientes enlaces para iniciar una plantilla de CloudFormation directamente en la región elegida.
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 copie y pegue la siguiente URL para iniciar en otras regiones la creación a través de la plantilla de CloudFormation. Si eligió el paso (a), omita este paso.
Vaya a Cloudformation -> Create stack y, en Amazon S3 URL, pegue la URL anterior:
c. En Stack name, escriba “labdb” y haga clic en Next.
d. Desplácese hasta la parte inferior de la página siguiente y, a continuación, haga clic de nuevo en Next.
e. Desplácese hasta la parte inferior de la página siguiente, marque las casillas de verificación para crear recursos de IAM y CAPABILITY_AUTO_EXPAND y haga clic en Create stack.
2. La creación anterior tomará aproximadamente 15 minutos, y creará una “stack nested” con un nombre que comienza con “labdb-VpcStack-”.
Una vez que termine de crear el stack “labdb-VpcStack-”, continúe con el siguiente paso.
Configuración de AWS Cloud9.
1. Vaya a su entorno de AWS Cloud9:
a. Vaya a Services -> Cloud9.
b. Haga clic en “Open IDE”.
c. Ahora tiene acceso a bash en el ambiente de Cloud9:
2. Configuración del Security Group:
a. Verifique si ya existe un Security Group (SG) creado por CloudFormation, que es el firewall de la base de datos llamado “lab-blueprint-Db-Inbound”:
Bash
aws ec2 describe-security-groups | grep lab-blueprint-Db-Inbound
Si el comando comando retorna como indica la figura, el grupo de seguridad ya existe, luego continúe con el siguiente comando. Si no devuelve ninguna fila, espere unos minutos más para que CloudFormation la cree.
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 ambiente 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 endpoint de su base de datos:
a. Vaya a Services -> RDS:
b. En la pestaña de la izquierda, haga clic en Databases, y luego haga clic en el clúster creado que comienza con “labd-aurorastack”:
c. Copie el nombre del endpoint cuyo tipo es Writer:
2. Conéctese desde Cloud9.
a. Abra el archivo rds_config.py en Cloud9 y edite el campo rds_endpoint con el endpoint copiado desde RDS:
b. Haga clic en File, y, luego en Save para guardar.
c. Cree la tabla y tres registros con el programa py:
Bash
python app.py create
Creación de Blueprint en AWS Lake Formation.
1. Conexión con AWS Glue..
a. Vaya a la consola AWS Glue, haga clic en Databases
-> Connections, y luego en Add Connection.
b.Complete las propiedades:
-
-
- Connection name: lab
- Connection type: Amazon RDS
-
-
-
- Database engine: Amazon Aurora
-
c. Haga clic en Next.
d. Complete 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 Next.
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 AWS Lake Formation
a. Vaya a la consola de AWS Lake Formation, y haga clic en Get started.
b. Haga clic en Add Administrator.
c. Elija su usuario o el rol que está utilizando como administrador de AWS Lake Formation, puede comprobar el usuario o rol que está utilizando en la parte superior de la consola, justo al lado de la región, con el formato “usuario o rol @account”.
d. Haga clic en Save.
e. En el menú de la izquierda, seleccione Data lake locations y luego haga clic en Register location.
f. En Amazon S3 path, haga clic en Browse:
g. Seleccione el bucket que comience con ’00-labdb’ y termine con ‘-raw’.
h. Haga clic en Register location
3. Usando un Blueprint
a. Vaya a la consola AWS Glue.
b. Haga clic en Databases en el menú de la izquierda y seleccione “Add database”, escriba el nombre sampledb, y haga clic en “Create”:
c. Vuelve a la consola de AWS Formación Lake.
d. En Databases, seleccione sampledb, luego haga clic en Action -> Grant.
-
-
- Otorgue grant al siguiente rol Glue-labdb-role.
-
e. En Database permissions, seleccione Create table, Alter, Drop, Describe y Super.
f. Haga clic en Grant.
g. En el menú de la izquierda, haga clic en Permissions -> Data locations, y haga clic en
-
-
- Otorgue Grant al siguiente rol Glue-labdb-role.
-
h. En la consola de AWS Lake Formation, vaya a Blueprints y haga clic en Use blueprint.
i. Seleccione Incremental database, para realizar una carga inicial y cargas incrementales basadas en una clave de tabla.
j. En Import source, seleccione
-
-
- Database connection: lab
- Source path data: labdb/%
-
k. En Incremental data, complete las propiedades:
-
-
- Table name: employee (solo minúsculas)
- Bookmark key: empid (sólo minúsculas)
- Bookmark order: Ascending
-
l. En Importar destino, seleccione:
-
-
- sampledb como Target database
- Su bucket raw como Target storage location.
-
-
-
- Data format como «Parquet».
-
m. En Import frequency, seleccione:
-
-
-
- Frequency: Custom
- Cron expression: 0/20 * * * ? * (cada 20 minutos)
-
-
n. En Import Options, complete las propiedades:
-
-
- Workflow name: labworkflow
- IAM role: Glue-labdb-role
- Table prefix: lab
-
o. Haga clic en Create.
4. Seguimiento de su Workflow.
a. Después de crear el blueprint, este va a generar un workflow. Si aparece “Start it now?”, haga clic para comenzar. Si no aparece, vaya a Actions -> Start.
b. Después de iniciar, abra el enlace “labworkflow”.
c. Aparecerá al menos un Run ID, haga clic en él.
d. Se crean varios pasos con Jobs, desde mapear su fuente hasta cargar y transformar archivos en formato parquet. Haga clic en View Run Details para realizar un seguimiento de la ejecución del workflow:
e. Es posible consultar el historial de cada ejecución de workflow
5. Consultar los datos en el Data Lake.
a. Después de ejecutar el 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. Complete Query result location y haga clic en Save:
s3://<nome seu bucket> /athena-results/
d. Realizar una consulta en Athena:
-
-
- SQL
SELECT * FROM "sampledb"."lab_labdb_employee";
- SQL
-
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 al workflow en la consola AWS Lake Formation, en la sección Blueprints, y si actualmente no hay ninguna ejecución, comience una ejecución haciendo clic en Actions -> Start.
c. Si ya se está ejecutando a través de Schedule, espere a que termine.
d. Regresa a Amazon Athena y vuelva a ejecutar la consulta en el editor:
-
-
- SQL
-
SELECT * FROM "sampledb"."lab_labdb_employee";
Resumen
En esta publicación, describimos cómo utilizar Blueprints del servicio AWS Lake Formation, 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 ingesta hasta el consumo de datos, encontrará en esta publicación una manera fácil de llevar datos de base de datos relacionales a su Data Lake en AWS y establecer permisos y realizar consultas SQL sobre los datos.
Haga más con Data Lakes en AWS:
Siga nuestra serie de publicaciones de blog en Data Lake para aprender 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.
Revisor
Francisco Fagas es Senior Solutions Architect en AWS Chile.