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.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/054c8e9d-76a2-4334-b21a-cbe76af45923.png)
El flujo de trabajo que se muestra en el diagrama consta de los siguientes pasos de alto nivel:
El usuario carga un archivo CSV en la carpeta de origen de Amazon S3.
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.
La función de Lambda valida el esquema y el tipo de datos del archivo CSV sin procesar.
En función de los resultados de la validación:
Si la validación del archivo de origen se realiza correctamente, el archivo se mueve a la carpeta transitoria para su posterior procesamiento.
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).
Un rastreador de AWS Glue crea el esquema del archivo sin procesar a partir de la carpeta transitoria en Amazon S3.
Un trabajo de AWS Glue transforma, comprime y particiona el archivo sin procesar en formato Parquet.
El trabajo de AWS Glue también mueve el archivo a la carpeta de transformación de Amazon S3.
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.
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.
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
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 entornoRETRYLIMIT
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
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Clone el repositorio de código de muestra. |
| Desarrollador |
Actualice los valores de los parámetros. | En la copia local del repositorio, edite el archivo
| 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:
donde:
| Desarrollador |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Implemente la CloudFormation plantilla. | Para implementar la CloudFormation plantilla, ejecute el siguiente comando de la AWS CLI:
donde:
| Desarrollador |
Compruebe el progreso. | En la CloudFormation consola de AWS | 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 | Desarrollador |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Inicie el 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 ( | Desarrollador |
Compruebe la base de datos de AWS Glue particionada. |
| 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
Problema | Solució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.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/bd77de7b-4d04-44bb-95d2-3ec4599b3770.png)
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.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/5fd7dd79-ba4c-4c20-b1f0-ad4b5f22bdfc.png)