🇻🇪🇨🇱 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 📉 🤔 ⚙️
- Se deja el archivo en el Bucket de Amazon S3, lo cual activa la AWS Lambda que inicia el AWS Glue Crawler.
- El AWS Glue Crawler explora el nuevo archivo para identificar el esquema (columas), tipo de datos que lo conforman (int, string..etc).
- 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.
- 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
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
3. Creamos e iniciamos el ambiente virtual
python3 -m venv .venv
source .venv/bin/activate
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
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')
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
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
Procedemos a desplegar la aplicación:
cdk deploy
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
o simplemente exporte en una variable de entorno
export AWS_PROFILE=mi-profile-custom
cdk deploy
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)
- 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')]
)
- Bucket de S3 con el nombre starting-etl-from-file-inputfilesXXXXXXXXXX
input_bucket = s3.Bucket(self,"input_files")
- 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={}
)
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')
)
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")
- 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)}]}
)
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.
En el Catálogo de AWS Glue puedes acceder a la base de dato y a las tablas creadas:
Puedes explotar la tabla con Athena:
8. Crear un Dashboard en Amazon QuickSight 📉🚀🖥️
Documentación oficial de Amazon QuickSight
Si nunca has usado Amazon QuickSight debes crear una cuenta.
- Al ingresar verás una pantalla como esta, debes presionar "Sign up for QuickSight"
- 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.
- Listo!, ingresa a tu cuenta.
- 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.
- 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.
- 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 SkillBuilder - Puedes registrarte con tu correo personal.
Aprovecha la capa gratuita de QuickSight para que metas las manos.
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
ó 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
🇻🇪🇨🇱
Top comments (0)