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.
Ejecutar pruebas unitarias para trabajos ETL de Python en AWS Glue con el marco pytest
Repositorio de código: aws-glue-jobs-unit -testing | Entorno: producción | Tecnologías: macrodatos DevOps; DevelopmentAndTesting |
Servicios de AWS: AWS CloudFormation CodeBuild; AWS CodeCommit; AWS CodePipeline; AWS Glue |
Resumen
Puede ejecutar pruebas unitarias para trabajos de extracción, transformación y carga (ETL) de Python para AWS Glue en un entorno de desarrollo local, pero replicar esas pruebas en una DevOps canalización puede resultar difícil y llevar mucho tiempo. Las pruebas unitarias pueden resultar especialmente difíciles cuando se moderniza el proceso de ETL de unidad central en las pilas de tecnología de AWS. 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 en AWS Glue mediante el marco pytest de AWS CodePipeline. También puede usar este patrón para probar e implementar varios trabajos de AWS Glue.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa
URI de imagen de Amazon Elastic Container Registry (Amazon ECR) para su biblioteca de AWS Glue, descargada de la galería pública de Amazon ECR
Terminal Bash (en cualquier sistema operativo) con un perfil para la cuenta de AWS y la región de AWS de destino
Python 3.10
o posterior Biblioteca Moto
Python para probar los servicios de AWS
Arquitectura
Pila de tecnología
Amazon Elastic Container Registry (Amazon ECR)
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
AWS Glue
Pytest
Python
Biblioteca ETL de Python para AWS Glue
Arquitectura de destino
En el siguiente diagrama se describe cómo incorporar las pruebas unitarias para los procesos ETL de AWS Glue basados en Python en una canalización típica de AWS DevOps a escala empresarial.
En el diagrama, se muestra el siguiente flujo de trabajo:
En la fase de código fuente, CodePipeline utiliza un CodeCommit repositorio para el código fuente, que incluye un ejemplo de trabajo ETL de Python (
sample.py
), un archivo de prueba unitaria (test_sample.py
) y una CloudFormation plantilla de AWS. A continuación, CodePipeline transfiere el código más reciente de la rama principal al CodeBuild proyecto para su posterior procesamiento.En la etapa de creación y publicación, el código más reciente de la etapa de origen anterior se somete a pruebas unitarias con la ayuda de una imagen de Amazon ECR pública de AWS Glue. A continuación, el informe de la prueba se publica en los grupos de CodeBuild informes. La imagen del contenedor en el repositorio público de Amazon ECR para las bibliotecas de AWS Glue incluye todos los binarios necesarios para ejecutar tareas de ETL PySparkbasadas
en pruebas unitarias en AWS Glue 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 elpipeline.yml
archivo en el GitHub repositorio del recurso.TestBuild
En la fase de despliegue, el CodeBuild proyecto se lanza y publica el código en un bucket de Amazon Simple Storage Service (Amazon S3) si se aprueban todas las pruebas.
El usuario implementa la tarea AWS Glue mediante la CloudFormation plantilla de la
deploy
carpeta.
Herramientas
Herramientas de AWS
Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
AWS CodeBuild es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
AWS CodeCommit es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
AWS le CodePipeline ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
AWS Glue es un servicio ETL completamente administrado. Ayuda a clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos.
Otras herramientas
Python
es un lenguaje de programación de uso general interpretado de alto nivel. Moto
es una biblioteca de Python para probar los servicios de AWS. 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
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.
Código
El código de este patrón está disponible en el repositorio GitHub aws-glue-jobs-unit-testing
Un ejemplo de trabajo de AWS Glue 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
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 en la CodePipeline documentación.
Supervisión y registro de los CodePipeline recursos
Se recomienda utilizar las funciones de registro de AWS para determinar qué acciones realizan los usuarios en su 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 y Amazon CloudWatch Events. Puede utilizarlo CloudTrail para registrar las llamadas a las API de AWS y los eventos relacionados realizados por su cuenta de AWS o en su nombre. Para obtener más información, consulte Registrar llamadas a la CodePipeline API con AWS CloudTrail en la CodePipeline documentación.
Puede usar CloudWatch Events para monitorear los recursos y las aplicaciones de la nube de AWS que se ejecutan en AWS. También puede crear alertas en CloudWatch Events. Para obtener más información, consulte Supervisión de CodePipeline eventos en la CodePipeline documentación.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Prepare el archivo de códigos para su implementación. |
| DevOps ingeniero |
Crea la CloudFormation pila. |
La pila crea automáticamente un CodeCommit repositorio con el código inicial que se registró en el archivo.zip y se cargó en el depósito de S3. Además, la pila crea una CodePipeline vista utilizando el CodeCommit repositorio como fuente. En los pasos anteriores, el CodeCommit repositorio es aws-glue-unit-testy la canalización es aws-glue-unit-test-pipeline. | AWS DevOps, DevOps ingeniero |
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.
| AWS DevOps, DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Ejecute las pruebas unitarias en la canalización. |
| AWS DevOps, DevOps ingeniero |
Resolución de problemas
Problema | Solución |
---|---|
Una canalización con Amazon S3, Amazon ECR o una CodeCommit fuente ya no se inicia automáticamente | Si cambia los ajustes de configuración de una acción que utiliza reglas de CloudWatch eventos en Amazon EventBridge o Events para la detección de cambios, es posible que la consola de administración de AWS no detecte ningún cambio en el que los identificadores de origen sean similares y tengan caracteres iniciales idénticos. Como la consola no crea la nueva regla de eventos, la canalización ya no se inicia automáticamente. Por ejemplo, cambiar el nombre de una CodeCommit sucursal de Esto se aplica a las siguientes acciones de origen que utilizan eventos de CloudWatch Events para la detección de cambios:
Para resolver este problema, siga uno de estos pasos:
|
Recursos relacionados
Información adicional
Además, puede implementar las CloudFormation plantillas de AWS mediante la CLI de AWS. Para obtener más información, consulte Implementación rápida de plantillas con transformaciones en la CloudFormation documentación.