

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.

# Ejecute pruebas unitarias para trabajos ETL de Python AWS Glue utilizando el marco pytest
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

*Praveen Kumar Jeyarajan y Vaidy Sankaran, Amazon Web Services*

## Resumen
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-summary"></a>

Puede ejecutar pruebas unitarias para trabajos de extracción, transformación y carga (ETL) de Python AWS Glue en un [entorno de desarrollo local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), pero replicar esas pruebas en una DevOps canalización puede resultar difícil y llevar mucho tiempo. Las pruebas unitarias pueden resultar especialmente complicadas cuando se moderniza el proceso de ETL de un mainframe basándolo en AWS tecnologías. Este patrón le muestra cómo simplificar las pruebas unitarias y, al mismo tiempo, mantener intacta la funcionalidad existente, evitar interrupciones de funcionalidad de la aplicaciones clave cuando se lanzan nuevas características y mantener un software de alta calidad. Puede usar los pasos y los ejemplos de código de este patrón para ejecutar pruebas unitarias para trabajos ETL de Python AWS Glue utilizando el marco pytest en AWS CodePipeline. También puedes usar este patrón para probar e implementar varios AWS Glue trabajos.

## Requisitos previos y limitaciones
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Un URI de imagen de Amazon Elastic Container Registry (Amazon ECR) para AWS Glue su biblioteca, descargado de la galería pública de [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR
+ Un terminal Bash (en cualquier sistema operativo) con un perfil para el destino y Cuenta de AWS Región de AWS
+ [Python 3.10](https://www.python.org/downloads/) o posterior
+ [Pytest](https://github.com/pytest-dev/pytest)
+ Biblioteca [Moto](https://github.com/getmoto/moto) Python para pruebas Servicios de AWS

## Arquitectura
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-architecture"></a>

El siguiente diagrama describe cómo incorporar las pruebas unitarias para los procesos de AWS Glue ETL basados en Python en una canalización típica de escala empresarial AWS DevOps .

![Pruebas unitarias para los procesos de ETL de AWS Glue](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. En la fase de código fuente, AWS CodePipeline utiliza un bucket versionado de Amazon Simple Storage Service (Amazon S3) para almacenar y gestionar los activos del código fuente. Estos activos incluyen un ejemplo de trabajo ETL de Python (`sample.py`), un archivo de prueba unitaria (`test_sample.py`) y una AWS CloudFormation plantilla. A continuación, CodePipeline transfiere el código más reciente de la rama principal al AWS CodeBuild proyecto para su posterior procesamiento.

1. En la fase de creación y publicación, el código más reciente de la fase fuente anterior se somete a pruebas unitarias con la ayuda de una imagen AWS Glue pública de Amazon ECR. A continuación, el informe de la prueba se publica en los grupos de CodeBuild informes. La imagen del contenedor del repositorio público de Amazon ECR para AWS Glue bibliotecas incluye todos los binarios necesarios para ejecutar tareas ETL [PySparkbasadas](https://spark.apache.org/docs/latest/api/python/) en AWS Glue pruebas unitarias de forma local. El repositorio de contenedores público tiene tres etiquetas de imagen, una para cada versión compatible con AWS Glue. Con fines de demostración, este patrón usa la etiqueta de imagen `glue_libs_4.0.0_image_01`. Para usar esta imagen de contenedor como imagen en tiempo de ejecución CodeBuild, copie el URI de la imagen que corresponda a la etiqueta de imagen que pretende usar y, a continuación, actualice el `pipeline.yml` archivo en el GitHub repositorio del recurso. `TestBuild`

1. En la fase de despliegue, el CodeBuild proyecto se lanza y publica el código en un bucket de Amazon S3 si se aprueban todas las pruebas.

1. El usuario implementa la AWS Glue tarea mediante la CloudFormation plantilla de la `deploy` carpeta.

## Tools (Herramientas)
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-tools"></a>

**Servicios de AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) es un servicio de ETL completamente administrado. Ayuda a clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento líderes del sector.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación de uso general interpretado de alto nivel.
+ [Moto](https://github.com/getmoto/moto) es una biblioteca de Python para realizar pruebas Servicios de AWS.
+ [Pytest](https://github.com/pytest-dev/pytest) es un marco para escribir pruebas unitarias pequeñas que se escalan para permitir pruebas funcionales complejas para aplicaciones y bibliotecas.
+ La [biblioteca ETL de Python](https://github.com/awslabs/aws-glue-libs) para AWS Glue es un repositorio de bibliotecas de Python que se utilizan en el desarrollo local de trabajos PySpark por lotes para AWS Glue.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [aws-glue-jobs-unit-testing](https://github.com/aws-samples/aws-glue-jobs-unit-testing). El repositorio incluye los siguientes recursos:
+ Un ejemplo de AWS Glue trabajo basado en Python en la carpeta `src`
+ Los casos de pruebas unitarias asociados (creados con el marco pytest) están en la carpeta `tests`
+ Una CloudFormation plantilla (escrita en YAML) en la carpeta `deploy`

## Prácticas recomendadas
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-best-practices"></a>

**Seguridad de los recursos CodePipeline **

Se recomienda utilizar el cifrado y la autenticación en los repositorios de origen que se conectan a tus canalizaciones. CodePipeline Para obtener más información, consulta [las prácticas recomendadas de seguridad](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) en la CodePipeline documentación.

**Supervisión y registro de los CodePipeline recursos**

Se recomienda utilizar las funciones de AWS registro para determinar qué acciones realizan los usuarios en tu cuenta y qué recursos utilizan. Los archivos de registro muestran lo siguiente:
+ La fecha y la hora de las acciones
+ Dirección IP de origen de las acciones
+ Las acciones que han fallado debido a permisos inadecuados

Las funciones de registro están disponibles en AWS CloudTrail Amazon CloudWatch Events. Puede utilizarlas CloudTrail para registrar las llamadas a la AWS API y los eventos relacionados realizados por usted o en su nombre Cuenta de AWS. Para obtener más información, consulta Cómo [registrar las llamadas a la CodePipeline API AWS CloudTrail](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) en la CodePipeline documentación.

Puede usar CloudWatch Events para supervisar Nube de AWS los recursos y las aplicaciones que se estén ejecutando AWS. También puede crear alertas en CloudWatch Eventos. Para obtener más información, consulte [Supervisión de CodePipeline eventos](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) en la CodePipeline documentación.

## Epics
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-epics"></a>

### Implementar el código fuente
<a name="deploy-the-source-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Prepare el archivo de códigos para su implementación. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps ingeniero | 
| Crea la CloudFormation pila. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)La pila crea una CodePipeline vista con Amazon S3 como fuente. En los pasos anteriores, la canalización es **aws-glue-unit-test-pipeline**. | AWS DevOps, DevOps ingeniero | 

### Ejecute las pruebas unitarias
<a name="run-the-unit-tests"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute las pruebas unitarias en la canalización. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingeniero | 

### Limpia todos los AWS recursos
<a name="clean-up-all-aws-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie los recursos del entorno. | Para evitar costos de infraestructura adicionales, asegúrese de eliminar la pila después de experimentar con los ejemplos que se proporcionan en este patrón.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingeniero | 

## Resolución de problemas
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El rol CodePipeline de servicio no puede acceder al bucket de Amazon S3. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| CodePipeline devuelve un error que indica que el bucket de Amazon S3 no está versionado. | CodePipeline requiere que el bucket Amazon S3 de origen esté versionado. Habilite el control de versiones en el bucket de origen de Amazon S3 Para obtener instrucciones, consulte [Habilitar el control de versiones en buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html). | 

## Recursos relacionados
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-resources"></a>
+ [AWS Glue](https://aws.amazon.com/glue/)
+ [Desarrollar y probar AWS Glue trabajos a nivel local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation para AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Información adicional
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

Además, puede implementar las AWS CloudFormation plantillas mediante AWS Command Line Interface (AWS CLI). Para obtener más información, consulte [Implementación rápida de plantillas con transformaciones](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html) en la CloudFormation documentación.