

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
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions"></a>

*Sandip Gangapadhyay, Amazon Web Services*

## Resumen
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-summary"></a>

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

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](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern). AWS Step Functions

## Requisitos previos y limitaciones
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ AWS Command Line Interface (AWS CLI) instalado y configurado con su Cuenta de AWS, para que pueda crear AWS recursos mediante el despliegue de una AWS CloudFormation pila. Recomendamos usar la AWS CLI versión 2. Para obtener instrucciones, consulte [Instalación o actualización a la última versión de AWS CLI en la](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) AWS CLI documentación. Para obtener instrucciones de configuración, consulte los [ajustes de configuración y del archivo de credenciales](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) en la AWS CLI documentación.
+ Un bucket de Amazon S3.
+ Un conjunto de datos CSV con el esquema correcto. (El [repositorio de código](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern/) 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 con. Consola de administración de AWS(Consulte la [lista de los navegadores compatibles](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/)).
+ AWS Glue acceso a la consola.
+ AWS Step Functions acceso a la consola.

**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](https://docs.aws.amazon.com/step-functions/latest/dg/service-quotas.html) en la AWS Step Functions documentación.

**Versiones de producto**
+ Python 3.13 para AWS Lambda
+ AWS Glue versión 4.0

## Arquitectura
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-architecture"></a>

![\[Proceso de ETL desde el bucket de origen de S3 hasta Step Functions, AWS Glue y Amazon SNS en 10 pasos.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/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:

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

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

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

1. 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.

   1. 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).

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

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

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

1. 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.

1. 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.

1. 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.

## Tools (Herramientas)
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-tools"></a>

**Servicios de AWS**
+ [AWS Glue](https://aws.amazon.com/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](https://aws.amazon.com/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:](https://aws.amazon.com/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](https://aws.amazon.com/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](https://aws.amazon.com/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](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern). 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/python`carpeta: 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 requerida 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
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-epics"></a>

### Preparación del archivo de origen
<a name="prepare-the-source-files"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código de muestra. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 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:<pre>aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name></pre>donde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | Desarrollador | 

### Creación de la pila
<a name="create-the-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la CloudFormation plantilla. | Para implementar la AWS CloudFormation plantilla, ejecute el siguiente AWS CLI comando:<pre>aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name></pre>donde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | Desarrollador | 
| Compruebe el progreso. | En la [consola de AWS CloudFormation](https://console.aws.amazon.com/cloudformation/), 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 AWS Glue 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 | 

### Prueba la canalización
<a name="test-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie el proceso de ETL. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 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. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 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](https://docs.aws.amazon.com/athena/latest/ug/querying-athena-tables.html) en la AWS documentación. | Análisis de la base de datos | 

## Resolución de problemas
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-troubleshooting"></a>


| Problema | Solució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](https://docs.aws.amazon.com/lake-formation/latest/dg/upgrade-glue-lake-formation.html). | 

## Recursos relacionados
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-resources"></a>

**Servicio de AWS documentación**
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/)
+ [AWS Glue](https://docs.aws.amazon.com/glue/)
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/)
+ [Amazon S3](https://docs.aws.amazon.com/s3/)
+ [Amazon SNS](https://docs.aws.amazon.com/sns/)

## Información adicional
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-additional"></a>

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.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/bd77de7b-4d04-44bb-95d2-3ec4599b3770.png)


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.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/5fd7dd79-ba4c-4c20-b1f0-ad4b5f22bdfc.png)


 