DEV Community

Cover image for Fist steps with Data Analytics in AWS
elizabethfuentes12 for AWS Community Builders

Posted on • Updated on

Fist steps with Data Analytics in AWS

🇻🇪🇨🇱 Dev.to Linkedin GitHub Twitter Instagram
Youtube


Introducción 👩🏻‍💻👋

Data Analytics 📉 es un concepto muy utilizado hoy en día, es casi un pecado no saber que Data Analytics es el proceso de recopilar, procesar y analizar datos para usarlos tomar decisiones en base a ellos.

Data Analytics te permite combinar datos para crear soluciones que ayuden a las empresas a decidir donde y cuando lanzar nuevos productos, cuando ofrecer descuentos, analizar gastos y buscar ahorros, es posible crear modelos de machine learning para realizar mejoras como customer personalization, detención de fraude, alertas en tiempo real, comportamiento de tus usuarios y crear modelos que mejoren financias y predigan la forma de hacer mejores inversiones.

El Data Analytics es importante para las empresas sin importar su tamaño, sin ello las decisiones serian tomadas por intuición o suerte.

La data se puede generar de varias formas, recopilando clics de una página web, través de una API, encuestas, bases de datos locales, si sabés donde mirar prácticamente todo es data. El desafío está en almacenarla en un mismo lugar, crear Data Lakes, para poder hacer cruces y análisis con ella, hacer uso de ella.

En este blog te voy a mostrar cómo crear un pequeño pipeline de Data Analytics, donde se deja un archivo en un storage y de ahí es procesado para crear una tabla de la cual se alimentá un dahsboard de Business Inteligence.

Y.. Lo podrás desplegar listo para usar con un par de comandos usando CDK 🚀 👩🏻‍🚀.


La Solución 📉 🤔 ⚙️

fase1

  1. Se deja el archivo en el Bucket de Amazon S3, lo cual activa la AWS Lambda que inicia el AWS Glue Crawler.
  2. El AWS Glue Crawler explora el nuevo archivo para identificar el esquema (columas), tipo de datos que lo conforman (int, string..etc).
  3. Una vez finalizada la exploración de AWS Glue Crawler este crea/actualiza la tabla asociada a la data descubierta en el AWS Glue Data Catalog, el cual a su vez permite que se acceda a la tabla utilizando Amazon Athena.
  4. Una vez creado el el DashBoard de Amazon QuickSight desde query a data en Athena queda listo para hacer Data Analytics.

Despliegue 🚀 👩🏻‍🚀

Para crear la aplicación en tu cuenta AWS debes seguir los siguientes pasos:

1. Instalar CDK

Para realizar el despliegue de los recursos, debes instalar y configurar la cli (command line interface) de CDK, en este caso estamos utilizando CDK con Python.

Instalación y configuración de CDK

Documentación CDK para Python

2. Clonamos el repo y vamos la carpeta de nuestro proyecto.

git clone https://github.com/elizabethfuentes12/first-steps-with-analytics-in-aws
cd first-steps-analytics
Enter fullscreen mode Exit fullscreen mode

3. Creamos e iniciamos el ambiente virtual

python3 -m venv .venv
source .venv/bin/activate
Enter fullscreen mode Exit fullscreen mode

Este ambiente virtual (venv) nos permite aislar las versiones del python que vamos a utilizar como también de librerías asociadas. Con esto podemos tener varios proyectos con distintas configuraciones.

4. Instalamos los requerimientos para el ambiente de python

Para que el ambiente pueda desplegarse, debemos agregar todas las librerías CDK necesarias en el archivo requirements.txt

pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

5. Desplegando la aplicación 🚚

Si deseas desplegar tu solución en una región especifica debes modificar el archivo app.py la siguiente linea:

env=cdk.Environment(region='us-east-1')
Enter fullscreen mode Exit fullscreen mode

Antes de desplegar debemos asegurarnos que el código este sin errores, eso lo hacemos con el siguiente comando donde se genera un template de cloudformation con nuestra definición de recursos en python.

cdk synth
Enter fullscreen mode Exit fullscreen mode

Si hay algún error en tu código este comando te indicara cual es con su ubicación.

En el caso de estar cargando una nueva versión de la aplicación puedes revisar que es lo nuevo con el siguiente comando:

cdk diff
Enter fullscreen mode Exit fullscreen mode

Procedemos a desplegar la aplicación:

cdk deploy
Enter fullscreen mode Exit fullscreen mode

6. Tips Para el despliegue 👩🏻‍💻

El despliegue lo utiliza utilizando las credenciales por defecto de AWS, si desea usar un profile específico agregue --profile al comando deploy:

cdk deploy --profile mi-profile-custom
Enter fullscreen mode Exit fullscreen mode

o simplemente exporte en una variable de entorno

export AWS_PROFILE=mi-profile-custom
cdk deploy
Enter fullscreen mode Exit fullscreen mode

7. La aplicación 👩🏻‍💻

Este CDK creará los siguientes elementos:

  • Evento de notificación para que la lamnbda lea el Bucket cuando un archivo nuevo se ha agregado:
    new_object = aws_s3_notifications.LambdaDestination(new_file_lambda)

    # Aca le agregamos la notificacion al bucket para que invoque la lambda cuando haya un nuevo objeto

    input_bucket.add_event_notification(s3.EventType.OBJECT_CREATED, new_object)
Enter fullscreen mode Exit fullscreen mode
  • Permisos necesarios para que el crawler pueda leer el bucket S3:
statement = iam.PolicyStatement( actions=["s3:GetObject","s3:PutObject"],
            resources=[
                "arn:aws:s3:::{}".format(input_bucket.bucket_name),
                "arn:aws:s3:::{}/*".format(input_bucket.bucket_name)])

        write_to_s3_policy = iam.PolicyDocument(statements=[statement])

glue_role = iam.Role(
                self, 'crawler', role_name = 'CrawlerDemoCDK',
                inline_policies=[write_to_s3_policy],
                assumed_by=iam.ServicePrincipal('glue.amazonaws.com'),
                managed_policies = [ iam.ManagedPolicy.from_aws_managed_policy_name('service-role/AWSGlueServiceRole')]
            )
Enter fullscreen mode Exit fullscreen mode
  • Bucket de S3 con el nombre starting-etl-from-file-inputfilesXXXXXXXXXX
input_bucket = s3.Bucket(self,"input_files")

Enter fullscreen mode Exit fullscreen mode
  • Lambda Function con el nombre process_new_file-STARTING-ETL-FROM-FILE,
new_file_lambda = aws_lambda.Function (
            self,"process_new_file", 
            function_name=f"process_new_file-{STACK_NAME}",
            handler='lambda_function.lambda_handler',
            code=aws_lambda.Code.from_asset("./lambdas/process_new_file/"),
            **PYTHON_BASE_CONFIG,environment={}
        )
Enter fullscreen mode Exit fullscreen mode

el Glue Crawler se inicia con las siguientes lineas de comando dentro de la Lambda.

    # Comenzamos la ejecución del crawler
    response = boto3.client('glue').start_crawler(
        Name= os.environ.get('CRAWLER_NAME')
    )
Enter fullscreen mode Exit fullscreen mode

Entra acá Boto3 para glue si quieres aprender más sobre estas líneas.

  • Una base de datos en Glue con el nombre demo_db
 glue_db = glue.Database(self, "demo_etl",database_name="demo_db")
Enter fullscreen mode Exit fullscreen mode
  • Glue Crawler con el nombre raw-crawler-STARTING-ETL-FROM-FILE, al correr el crawler se creara una tabla con prefijo demoetl_.

    glue_crawler = aws_glue.CfnCrawler(
        self, 'glue-crawler', description="Rastreador para nuevos datos raw",
        name=f'raw-crawler-{STACK_NAME}',
        database_name=glue_db.database_name,
        schedule=None,
        role=glue_role.role_arn,
        table_prefix="demoetl_",
        targets={"s3Targets": [{"path": "s3://{}/{}".format(input_bucket.bucket_name, S3_RAW_PREFIX)}]}
    )
Enter fullscreen mode Exit fullscreen mode

Una vez verificado que los elementos se crearon de forma correcta, procede a cargar el archivo en el Bucket de S3 creado, este archivo debe tener formato .csv, .txt o .json, y todos los archivos que cargues después deben tener el mismo formato y esquema.

Cuando el Crawler vuelva a estado Ready significa que la tabla ya fue creada en la base de datos demo_db.

Puedes ver la cantidad de Tablas creadas/actualizadas y además el tiempo de duración del Crawler.

crawler

En el Catálogo de AWS Glue puedes acceder a la base de dato y a las tablas creadas:

catalogo

Puedes explotar la tabla con Athena:

athena

8. Crear un Dashboard en Amazon QuickSight 📉🚀🖥️

Documentación oficial de Amazon QuickSight

quicksght

Si nunca has usado Amazon QuickSight debes crear una cuenta.

  1. Al ingresar verás una pantalla como esta, debes presionar "Sign up for QuickSight"

quicksght1

  1. A continuación debes escoger el tipo de cuenta que quieres crear y seguir los pasos, recuerda darle permiso a QuickSight para acceder a la data, para más información aca.

quicksght2

  1. Listo!, ingresa a tu cuenta.

quicksght3

  1. Una vez dentro de Amazon QuickSight vamos a Datasets --> New dataSet y dentro del mar de opciones seleccionamos Athena, sigue los pasos y cuando llegues a esta ventana selecciona la opción Directly query your data, SPICE es un almacenamiento en QuickSight que entrega mayor rendimiento a tu Dashboard, pero la data debe ser actualizada no se actualiza automáticamente.

quicksight4

  1. En el paso anterior puedes editar el dataset con Edit/Preview data, una vez dentro puedes seleccionar los ... de las columnas y ver las opciones de edición, presiona Publish & Visualizalise para avanzar.

quicksight5

  1. Crea tu Dashboard para empezar a hacer Data Analytics.

AWS tiene material gratuito que te puede ayudar a convertite en un usuario experto de Amazon QuickSight:

AWS WorkShops

AWS SkillBuilder - Puedes registrarte con tu correo personal.

Aprovecha la capa gratuita de QuickSight para que metas las manos.

quicksight6


8. Eliminar el stack de la aplicación 🚫

Esta aplicación no elimina el bucket si contiene videos, por lo que primero debes vaciar el bucket y luego proceder a destruir el stak.

Para eliminar el stack lo puedes hacer vía comando:

cdk destroy
Enter fullscreen mode Exit fullscreen mode

ó via consola cloudformation, seleccione el stack (mismo nombre del proyecto cdk) y lo borra.

¡¡Happy developing 😁!!


Servicios involucrados en la solución son

Amazon S3 (Simple Storage Service):

Amazon S3 es un servicio de computo sin servidor que le permite ejecutar código sin aprovisionar ni administrar servidores.

AWS Lamdba:

AWS Lambda es un servicio de computo sin servidor que le permite ejecutar código sin aprovisionar ni administrar servidores.

AWS Glue Crawler:

AWS Glue Crawler Es un servicio de AWS, que te permite desubrir data, reconoce su esquema o columnas, el tipos de dato, arma un catalogo de glue. Se puede ejecutar a demanda o agendados.

AWS Glue Data Catalog:

AWS Glue Data Catalog contiene referencias a los datos, es un índice de la ubicación,al esquema y al tiempo de creación. La información en los catalogos se almacena como tablas de metadatos, donde cada tabla hace referencia a un único almacen de datos.

Amazon Athena:

Amazon Athena es un servicio de consultas interactivo que facilita el análisis de datos en Amazon S3 con SQL estándar. Athena no tiene servidor, de manera que no es necesario administrar infraestructura y solo paga por las consultas que ejecuta.

Amazon QuickSight:

Amazon QuickSight es un servicio de análisis empresarial muy rápido, fácil de utilizar y administrado en la nube que facilita a todos los empleados de una organización la compilación de visualizaciones, la realización de análisis ad-hoc y la obtención rápida de información empresarial a partir de sus datos en cualquier momento y en cualquier dispositivo.

Amazon API Gateway:

Amazon API Gateway es un servicio completamente administrado que facilita a los desarrolladores la creación, la publicación, el mantenimiento, el monitoreo y la protección de API a cualquier escala. Las API actúan como la "puerta de entrada" para que las aplicaciones accedan a los datos, la lógica empresarial o la funcionalidad de sus servicios de backend.

AWS Secrets Manager:

AWS Secrets Manager le ayuda a proteger los datos confidenciales necesarios para acceder a sus aplicaciones, servicios y recursos de TI. El servicio le permite alternar, administrar y recuperar fácilmente credenciales de bases de datos, claves de API y otros datos confidenciales durante su ciclo de vida. Los usuarios y las aplicaciones recuperan datos confidenciales con una llamada a las API de Secrets Manager, lo que elimina la necesidad de codificar información confidencial en texto sin formato

CDK (Cloud Development Kit):

El kit de desarrollo de la nube de AWS (AWS CDK) es un framework de código abierto que sirve para definir los recursos destinados a aplicaciones en la nube mediante lenguajes de programación conocidos.

Una vez lo conozcas... no vas a querer desarrollar aplicaciones en AWS de otra forma ;)

Conoce más acá: CDK


¡Gracias!

Te dejo mis redes:

Dev.to Linkedin GitHub Twitter Instagram Youtube

Sigue mi comunidad:
AWS Girls Chile
AWS Girls Chile Instagram
AWS Girls Chile Youtube
AWS Girls Chile meetup

🇻🇪🇨🇱

Discussion (0)