Saltar al contenido

Gestionar los flujos de trabajo de la tubería de datos en AWS Lambda

El mantenimiento de los almacenes de datos puede ser una tarea difícil para cualquier organización. No sólo hay que establecer procesos y procedimientos para cargar regularmente los datos que fluyen, sino que también hay que asegurarse de hacerlo de manera que sea resistente a los fallos y a los errores futuros. En este post, echaremos un vistazo rápido a algunos de los mayores desafíos de mantener almacenes de datos a gran escala, y cómo AWS Lambda puede ayudar;

Construcción y mantenimiento de un almacén de datos

Digamos que trabajas en una organización que quiere utilizar los datos de la organización en las decisiones de gestión. Para apoyar el esfuerzo de los analistas de datos, su equipo tiene la tarea de construir y mantener un almacén de datos que servirá como la fuente principal de datos utilizada por los analistas para orientar a la administración.

Gestionar los flujos de trabajo de la tubería de datos en AWS Lambda
Gestionar los flujos de trabajo de la tubería de datos en AWS Lambda

En el pasado esto habría sido una prueba masiva. Probablemente habría tenido que administrar (y pagar por) cada pieza de infraestructura desde el hardware hasta la base de datos propietaria que alimentaba su almacén. Afortunadamente, ha habido muchos avances en los servicios gestionados en los últimos años que le permiten externalizar parte de esa complejidad a un tercero;

Si también es responsable de la capa de visualización y análisis de su almacén de datos, puede que también quiera añadir a esta arquitectura componentes de aprendizaje y visualización de máquinas. Pero por ahora ignoremos esos otros elementos y, en su lugar, centrémonos y asumamos que sólo estamos manteniendo el flujo de datos;

Para hacer esto, querrás tener las siguientes cosas en su lugar..;

  1. Una solución de Data Warehouse
  2. Un almacén de datos de respaldo que permite reconstruir o recurrir a datos anteriores
  3. Herramientas de canalización de datos para llevar sus datos a su almacén de datos

AWS Redshift

Lo primero que hay que hacer es elegir una solución de almacenamiento de datos de primer nivel, como AWS Redshift, que pueda satisfacer las necesidades de prácticamente cualquier industria. Redshift le permite empezar a trabajar cargando datos de una variedad de formatos. También le da acceso al conjunto de otros servicios ofrecidos por AWS, incluyendo el AWS Data Pipeline, que puede ayudarle a gestionar su infraestructura.

Digamos también que nos atenemos a la AWS y, al menos donde creemos que está justificado, hacemos regularmente copias de seguridad de los datos en el Servicio de Almacenamiento Simple de la AWS (S3). Lo bueno de esto es que podemos almacenar a bajo precio grandes cantidades de datos en el S3, y realizar regularmente operaciones de DESCARGA en cualquier mesa de Redshift para mantener una copia de seguridad allí. Luego, si es necesario, podemos ejecutar una operación de COPIADO para cargarlo de nuevo en Redshift. Haciendo esto tenemos un almacén de respaldo para nuestros datos críticos y podemos cargar rápidamente desde nuestros respaldos;

A continuación, queremos algunas herramientas para llevar los datos al propio Redshift. Hay varias soluciones potenciales para esto. Pero a pesar de todas las herramientas disponibles, a veces se necesita algo sin una carga de costo o complejidad;

Entonces, ¿qué puede hacer si tiene un simple proceso de canalización de datos que necesita ejecutar regularmente, pero quiere evitar la complejidad, el costo y los proveedores adicionales? Aquí hay algunos ejemplos de cosas que podría querer hacer a los datos antes de que terminen en el S3 y Redshift:www. Redshift.com;

  1. Preprocesando o aplanando JSON desde un webhook de terceros
  2. Verificando un formato estándar de descarga CSV
  3. Ejecutar consultas comparativas rápidas sobre los datos entrantes para comprobar si hay discrepancias
  4. Una variedad de otras verificaciones rápidas para limpiar, verificar o alertar sobre los bits de datos entrantes

AWS Lambda

Para este tipo de procesos se puede usar algo como AWS Lambda. Lambda es el servicio de computación por eventos de AWS. Ejecuta el código en respuesta a los eventos que lo desencadenan. En los casos anteriores podrías escribir tus propias funciones Lambda (el código desencadenado por un evento) para realizar cualquier cosa, desde validación de datos hasta trabajos de COPIA.

Digamos que estamos procesando los datos entrantes que obtenemos como un CSV descargado directamente en el S3. Nos saltaremos un montón de pasos de configuración de Lambda (que puedes aprender en mi curso introductorio de Lambda) y asumiremos que estamos escribiendo el cuerpo de algún código de función para estos ejemplos. Aquí hay un poco de código psuedo sobre cómo funcionaría esto cada vez que uno de estos CSV se descargue en S3:

# Valida los CSVs subidos a S3 import boto3import csvimport pg8000EXPECTED_HEADERS = [$0027header_one$0027, $0027header_two$0027, $0027header_three$0027]def get_csv_from_s3(nombre_del_cubo, nombre_de_la_clave): """Descargar CSV de s3 al almacenamiento temporal local""" # Usar boto3 para conectarse al S3 y descargar el archivo al almacenamiento tmp de Lambda # Esto permite a Lambda acceder y usar el archivo def validate_csv(): """Valida que los CSVs coincidan con un determinado formato""" con open(csv_name, $0027rb$0027) como csv_to_test: reader = csv.reader(csv_to_test) headers = reader.next() # Return True si las cabeceras coinciden con lo que se espera retornar las cabeceras == EXPECTED_HEADERSdef load_valid_data(): """Carga datos validados a Redshift desde S3""" # Agregar código para ejecutar un comando COPY desde S3 # http://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-data.html imprimir $0027Data loaded to Redshift. Yay!$0027 def trigger_alarm(): """Enviar correo electrónico a alguien importante usando AWS SES para advertirle sobre datos inválidos""" def handler(event, context): # Usa el objeto event para obtener la ubicación del csv en S3 # Luego crea bucket_name y key_name get_csv_from_s3(bucket_name, key_name) # Asegúrate de darle a validate_csv la ubicación correcta del archivo! if validate_csv(): # si los datos son válidos: load_valid_data() else: trigger_alarm()

Como puedes ver, este código sólo hace una simple comprobación de que los valores de cabecera del CSV son los mismos. Pero Lambda puede hacer eso y más si crea sus propias bibliotecas de validación o utiliza dependencias externas para ayudar a procesar sus datos.

Ahora, seamos claros: Esto no reemplazará las muchas otras maravillosas herramientas en su arsenal de tuberías de datos, pero puede ser un activo para el procesamiento frecuente impulsado por eventos.

¿Qué otros desafíos enfrenta en la gestión de su reserva de datos? Siéntase libre de contactarme en Twitter o eche un vistazo a mi blog para obtener más consejos divertidos.

COMPARTIR: