Orqueste un proceso de ETL con validación, transformación y particionamiento mediante AWS Step Functions - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Orqueste un proceso de ETL con validación, transformación y particionamiento mediante AWS Step Functions

Creado por Sandip Gangapadhyay (AWS)

Repositorio de código: -pipeline-pattern aws-step-functions-etl

Entorno: producción

Tecnologías: análisis; macrodatos; lagos de datos; sin servidor DevOps

Servicios de AWS: Amazon Athena; AWS Glue; AWS Lambda; AWS Step Functions

Resumen

Este patrón describe cómo crear un proceso de extracción, transformación y carga (ETL) sin servidor para validar, transformar, comprimir y particionar un conjunto de datos CSV de gran tamaño con el fin de optimizar el rendimiento y los costos. El proceso, orquestado por AWS Step Functions, incluye características de gestión de errores, de reintento automático, y notificación a los usuarios.

Cuando se carga un archivo CSV a una carpeta de origen en un bucket de Amazon Simple Storage Service (Amazon S3), el proceso de ETL comienza a ejecutarse. El proceso valida el contenido y el esquema del archivo CSV de origen, transforma el archivo CSV a un formato comprimido de Apache Parquet, particiona el conjunto de datos por año, mes y día y lo almacena en una carpeta independiente para que las herramientas de análisis lo procesen.

El código que automatiza este patrón está disponible en el GitHub repositorio ETL Pipeline with AWS Step Functions.

Requisitos previos y limitaciones

Requisitos previos

  • Una cuenta de AWS activa.

  • La interfaz de línea de comandos de AWS (AWS CLI) se instaló y configuró con su cuenta de AWS para que pueda crear recursos de AWS mediante la implementación de una pila de CloudFormation AWS. Se recomienda la versión 2 de AWS CLI. Para instrucciones sobre la instalación, consulte instalación, actualización y desinstalación de la CLI de AWS versión 2 en la documentación de la CLI de AWS. Para obtener instrucciones de configuración de AWS CLI, consulte Ajustes de configuración y archivos de credenciales en la documentación de la CLI de AWS.

  • Un bucket de Amazon S3.

  • Un conjunto de datos CSV con el esquema correcto. (El repositorio de código incluido en este patrón proporciona un archivo CSV de muestra con el esquema y tipo de datos correctos para su uso).

  • Un navegador web compatible para su uso con la consola de administración de AWS. (Consulte la lista de los navegadores compatibles).

  • Acceso a la consola de AWS Glue.

  • Acceso a la consola de AWS Step Functions.

Limitaciones

  • En AWS Step Functions, el límite máximo para conservar los registros del historial es de 90 días. Para obtener más información, consulte Cuotas y Cuotas para flujos de trabajo estándar en la documentación de AWS Step Functions.

Versiones de producto

  • Python 3.11 para AWS Lambda

  • AWS Glue versión 2.0

Arquitectura

Procesa ETL desde el depósito de código fuente de S3 hasta Step Functions, AWS Glue y Amazon SNS en 10 pasos.

El flujo de trabajo que se muestra en el diagrama consta de los siguientes pasos de alto nivel:

  1. El usuario carga un archivo CSV en la carpeta de origen de Amazon S3.

  2. Un evento de notificación de Amazon S3 inicia una función de AWS Lambda que inicia la máquina de estado de Step Functions.

  3. La función de Lambda valida el esquema y el tipo de datos del archivo CSV sin procesar.

  4. En función de los resultados de la validación:

    1. Si la validación del archivo de origen se realiza correctamente, el archivo se mueve a la carpeta transitoria para su posterior procesamiento.

    2. Si el archivo no se valida, se mueve a la carpeta de errores y se envía una notificación de error a través de Amazon Simple Notification Service (Amazon SNS).

  5. Un rastreador de AWS Glue crea el esquema del archivo sin procesar a partir de la carpeta transitoria en Amazon S3.

  6. Un trabajo de AWS Glue transforma, comprime y particiona el archivo sin procesar en formato Parquet.

  7. El trabajo de AWS Glue también mueve el archivo a la carpeta de transformación de Amazon S3.

  8. El rastreador de AWS Glue crea el esquema a partir del archivo transformado. El esquema resultante se puede utilizar en cualquier trabajo de análisis. Puede utilizar Amazon Athena para ejecutar consultas ad-hoc.

  9. Si el proceso se completa sin errores, el archivo de esquema se mueve a la carpeta de almacenamiento. Si se encuentra algún error, el archivo se mueve a la carpeta de errores.

  10. Amazon SNS envía una notificación en la que se indica el éxito o el error en función del estado de finalización del proceso.

Este patrón solo emplea recursos de AWS sin servidor. No es necesario administrar servidores.

Herramientas

Servicios de AWS

  • AWS Glue: AWS Glue es un servicio ETL totalmente gestionado que facilita la preparación y la carga de datos para su análisis.

  • AWS Step Functions: AWS Step Functions es un servicio de orquestación sin servidor que le permite combinar funciones de Lambda AWS y otros servicios de AWS para crear aplicaciones esenciales para las empresas. A través de la consola gráfica AWS Step Functions, puede ver el flujo de trabajo de su aplicación como una serie de pasos basados en eventos.

  • Amazon S3: Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento líderes del sector.

  • Amazon SNS: Amazon Simple Notification Service (Amazon SNS) es un servicio de mensajería pub/sub de alta disponibilidad, duradero, seguro y totalmente gestionado que le permite desvincular microservicios, sistemas distribuidos y aplicaciones sin servidor.

  • AWS Lambda: AWS Lambda es un servicio de computación que permite ejecutar código sin aprovisionar ni administrar servidores. AWS Lambda ejecuta el código solo cuando es necesario y amplia la capacidad de manera automática, pasando de pocas solicitudes al día a miles por segundo.

Código

El código de este patrón está disponible en el GitHub repositorio ETL Pipeline with AWS Step Functions. El repositorio de código contiene los siguientes archivos y carpetas:

  • template.yml— CloudFormation Plantilla de AWS para crear la canalización de ETL con AWS Step Functions.

  • parameter.json – Contiene todos los parámetros y valores de los parámetros. Actualice este archivo para cambiar los valores de los parámetros, tal y como se describe en la sección Épica.

  • Carpeta myLayer/python – Contiene los paquetes de Python necesarios para crear la capa de AWS Lambda necesaria para este proyecto.

  • Carpeta lambda – Contiene las siguientes funciones de Lambda:

    • move_file.py – Mueve el conjunto de datos de origen a la carpeta de almacenamiento, transformación o errores.

    • check_crawler.py – Comprueba el estado del rastreador de AWS Glue tantas veces como se haya configurado en la variable de entorno RETRYLIMIT  antes de enviar un mensaje de error.

    • start_crawler.py – Inicia el rastreador de AWS Glue.

    • start_step_function.py – Inicia AWS Step Functions.

    • start_codebuild.py— Inicia el CodeBuild proyecto de AWS.

    • validation.py – Valida el conjunto de datos sin procesar de entrada.

    • s3object.py – Crea la estructura de directorios requerida dentro del bucket de S3.

    • notification.py – Envía notificaciones de éxito o error al final del proceso.

Para usar el código de muestra, siga las instrucciones en la sección Epics .

Epics

TareaDescripciónHabilidades requeridas

Clone el repositorio de código de muestra.

  1. Abra el repositorio Proceso de ETL con AWS Step Functions.

  2. Elija Código en la página principal del repositorio, sobre la lista de archivos, y copie la URL que aparece en Clonar con HTTPS.

  3. Cambie el directorio de trabajo a la ubicación en la que desee almacenar los archivos de muestra.

  4. Ejecute el siguiente comando en un terminal o en la línea de comandos:

    git clone <repoURL>

    <repoURL> es la URL que copió en el paso 2.

Desarrollador

Actualice los valores de los parámetros.

En la copia local del repositorio, edite el archivo parameter.json y actualice los valores de los parámetros predeterminados de la siguiente manera:

  • pS3BucketName: El nombre del bucket de S3 para almacenar los conjuntos de datos. La plantilla creará este bucket automáticamente. El nombre del bucket tiene que ser único de forma global.

  • pSourceFolder: El nombre de la carpeta en el bucket de S3 que se usará para cargar el archivo CSV de origen.

  • pStageFolder: El nombre de la carpeta en el bucket de S3 que se usará como área transitoria durante el proceso.

  • pTransformFolder: El nombre de la carpeta en el bucket de S3 que se usará para almacenar conjuntos de datos transformados y particionados.

  • pErrorFolder: La carpeta en el bucket de S3 a la que se moverá el archivo CSV de origen si no se puede validar.

  • pArchiveFolder : el nombre de la carpeta en el bucket de S3 que se usará para cargar el archivo CSV de origen.

  • pEmailforNotification: una dirección de correo electrónico válida para recibir notificaciones de éxito o error.

  • pPrefix─ Una cadena de prefijo que se utilizará en el nombre del rastreador AWS Glue.

  • pDatasetSchema: el esquema del conjunto de datos con el que se validará el archivo de origen. Para la validación del conjunto de datos de origen se usa el paquete Python Cerberus. Para obtener más información, consulte el sitio web de Cerberus.

Desarrollador

Cargue el código fuente en el bucket de S3.

Antes de implementar la CloudFormation plantilla que automatiza la canalización de ETL, debe empaquetar los archivos fuente de la CloudFormation plantilla y subirlos a un bucket de S3. Para ello, ejecute el siguiente comando de AWS CLI con el perfil preconfigurado:

aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name>

donde:

  • <bucket_name> es el nombre de un bucket de S3 existente en la región de AWS en la que desea implementar la pila. Este depósito se utiliza para almacenar el paquete de código fuente de la CloudFormation plantilla.

  • <profile_name> es un perfil de AWS CLI válido que preconfiguró al configurar AWS CLI.

Desarrollador
TareaDescripciónHabilidades requeridas

Implemente la CloudFormation plantilla.

Para implementar la CloudFormation plantilla, ejecute el siguiente comando de la AWS CLI:

aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name>

donde:

  • <stack_name>es un identificador único de la CloudFormation pila.

  • <profile-name> es su perfil de AWS CLI preconfigurado.

Desarrollador

Compruebe el progreso.

En la CloudFormation consola de AWS, compruebe el progreso del desarrollo de la pila. Cuando el estado sea CREATE_COMPLETE, la pila se habrá implementado correctamente.

Desarrollador

Anote el nombre de la base de datos de AWS Glue.

La pestaña Resultados de la pila muestra el nombre de la base de datos de AWS Glue. El nombre de la clave es GlueDBOutput.

Desarrollador
TareaDescripciónHabilidades requeridas

Inicie el proceso de ETL.

  1. Navegue hasta la carpeta de origen (source, o el nombre de carpeta que haya establecido en el archivo parameter.json) en el bucket de S3.

  2. Cargue un archivo CSV de muestra en esta carpeta. (El repositorio de código proporciona un archivo de muestra llamado Sample_Bank_Transaction_Raw_Dataset.csv para su uso). Al cargar el archivo, se iniciará el proceso de ETL a través de Step Functions.

  3. En la consola de Step Functions, compruebe el estado del proceso de ETL.

Desarrollador

Compruebe el conjunto de datos particionado.

Cuando se complete el proceso de ETL, compruebe que el conjunto de datos particionado esté disponible en la carpeta de transformación de Amazon S3 (transform, o el nombre de carpeta que haya establecido en el archivo parameter.json).

Desarrollador

Compruebe la base de datos de AWS Glue particionada.

  1. En la consola de AWS Glue, seleccione la base de datos de AWS Glue creada por la pila (es la base de datos que anotó en la épica anterior).

  2. Compruebe que la tabla particionada esté disponible en el catálogo de datos de AWS Glue.

Desarrollador

Ejecutar consultas.

(Opcional) Use Amazon Athena para ejecutar consultas ad hoc en la base de datos particionada y transformada. Para obtener más instrucciones, consulte Ejecutar consultas SQL con Amazon Athena en la documentación de AWS.

Análisis de la base de datos

Resolución de problemas

ProblemaSolución

Permisos de AWS Identity and Access Management (IAM) para el trabajo y el rastreador de AWS Glue

Si sigue personalizando la tarea de AWS Glue o el rastreador, asegúrese de conceder los permisos de IAM adecuados en la función de IAM utilizada por la tarea de AWS Glue o de proporcionar permisos de datos a AWS Lake Formation. Para obtener más información, consulte la documentación de AWS.

Recursos relacionados

Documentación de servicio de AWS

Información adicional

El siguiente diagrama muestra el flujo de trabajo de AWS Step Functions en un proceso de ETL exitoso desde el panel Inspector de Step Functions.

Flujo de trabajo de Step Functions para validar el archivo.csv de entrada, rastrear los datos y ejecutar el trabajo de AWS Glue.

El siguiente diagrama muestra el flujo de trabajo de AWS Step Functions en un proceso de ETL fallido debido a un error de validación de entrada desde el panel Inspector de Step Functions.

El flujo de trabajo de Step Functions presenta errores, por lo que el archivo se mueve a la carpeta de errores.