Organice una canalización 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.

Organice una canalización de ETL con validación, transformación y particionamiento mediante AWS Step Functions

Sandip Gangapadhyay, Amazon Web Services

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 está organizado AWS Step Functions e incluye funciones de gestión de errores, reintentos automatizados y notificación al usuario.

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 

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 las cuotas de servicio de Step Functions en la AWS Step Functions documentación.

Versiones de producto

  • Python 3.13 para AWS Lambda

  • AWS Glue versión 4.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 AWS Lambda función que inicia la máquina de AWS Step Functions estados.

  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 AWS Glue rastreador crea el esquema del archivo sin procesar a partir de la carpeta del escenario en Amazon S3.

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

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

  8. El AWS Glue rastreador 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.

Todos los AWS recursos utilizados en este patrón no tienen servidor. No es necesario administrar servidores.

Herramientas

Servicios de AWS

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

  • AWS Step Functions— AWS Step Functions es un servicio de organización sin servidor que le permite combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones críticas para la empresa. A través de la consola AWS Step Functions gráfica, 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 de alta disponibilidad, duradero, seguro y totalmente pub/sub gestionado que le permite desvincular microservicios, sistemas distribuidos y aplicaciones sin servidor.

  • AWS Lambda— AWS Lambda es un servicio informático que permite ejecutar código sin aprovisionar ni administrar servidores. AWS Lambda ejecuta el código solo cuando es necesario y se escala automáticamente, desde unas pocas solicitudes por día hasta miles por segundo.

Código

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

  • template.yml— AWS CloudFormation plantilla con la que crear la canalización de ETL 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.

  • myLayer/pythoncarpeta: contiene los paquetes de Python necesarios para crear la AWS Lambda capa requerida 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 AWS Glue rastreador tantas veces como lo haya configurado la variable de RETRYLIMIT  entorno antes de enviar un mensaje de error.

    • start_crawler.py— Inicia el AWS Glue rastreador.

    • start_step_function.py— Empieza AWS Step Functions.

    • start_codebuild.py— Inicia el AWS CodeBuild proyecto.

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

    • s3object.py— Crea la estructura de directorios necesaria dentro del bucket de Amazon 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 la canalización de ETL con el AWS Step Functions repositorio.

  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 depósito de Amazon 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 incluida en el bucket de Amazon S3 que se utilizará para cargar el archivo CSV de origen.

  • pStageFolder─ El nombre de la carpeta incluida en el bucket de Amazon S3 que se utilizará como área de almacenamiento provisional durante el proceso.

  • pTransformFolder─ El nombre de la carpeta dentro del bucket de Amazon S3 que se utilizará para almacenar conjuntos de datos transformados y particionados.

  • pErrorFolder─ La carpeta dentro del bucket de Amazon S3 a la que se moverá el archivo CSV de origen si no se puede validar.

  • pArchiveFolder ─ El nombre de la carpeta incluida en el bucket de Amazon S3 que se utilizará para archivar el archivo CSV de origen.

  • pEmailforNotification─ Una dirección de correo electrónico válida para recibir success/error notificaciones.

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

  • 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 Amazon S3.

Antes de implementar la AWS CloudFormation plantilla que automatiza la canalización de ETL, debe empaquetar los archivos fuente de la plantilla y subirlos a un bucket de Amazon S3. Para ello, ejecute el siguiente AWS CLI comando con su 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 Amazon S3 existente Región de AWS en el 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 AWS CLI perfil válido que preconfiguró al configurarla. AWS CLI

Desarrollador
TareaDescripciónHabilidades requeridas

Implemente la CloudFormation plantilla.

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

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 AWS CLI perfil preconfigurado.

Desarrollador

Compruebe el progreso.

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

Desarrollador

Anote el nombre AWS Glue de la base de datos.

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

Desarrollador
TareaDescripciónHabilidades requeridas

Inicie el proceso de ETL.

  1. Navegue hasta la carpeta de origen (sourceo el nombre de la carpeta que haya establecido en el parameter.json archivo) dentro del bucket de Amazon 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

Comprueba la base de AWS Glue datos particionada.

  1. En la AWS Glue consola, selecciona la AWS Glue base de datos creada por la pila (esta es la base de datos que mencionaste en la epopeya anterior).

  2. Comprueba que la tabla particionada esté disponible en. AWS Glue Data Catalog

Desarrollador

Ejecutar consultas.

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

Análisis de la base de datos

Solución de problemas

ProblemaSolución

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

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

Recursos relacionados

Servicio de AWS documentación

Información adicional

El siguiente diagrama muestra el AWS Step Functions flujo de trabajo para una canalización de ETL exitosa, desde el panel del AWS Step Functions Inspector.

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 AWS Step Functions flujo de trabajo de una canalización de ETL que falla debido a un error de validación de entrada, desde el panel Step Functions Inspector.

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