

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exécutez des tests unitaires pour les tâches ETL Python en AWS Glue utilisant le framework pytest
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

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

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

Vous pouvez exécuter des tests unitaires pour des tâches d'extraction, de transformation et de chargement (ETL) en Python AWS Glue dans un [environnement de développement local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), mais la réplication de ces tests dans un DevOps pipeline peut s'avérer difficile et chronophage. Les tests unitaires peuvent être particulièrement difficiles lorsque vous modernisez le processus ETL du mainframe sur des piles AWS technologiques. Ce modèle vous montre comment simplifier les tests unitaires, tout en préservant les fonctionnalités existantes, en évitant d'interrompre les fonctionnalités clés de l'application lorsque vous publiez de nouvelles fonctionnalités et en maintenant des logiciels de haute qualité. Vous pouvez utiliser les étapes et les exemples de code de ce modèle pour exécuter des tests unitaires pour les tâches ETL Python en AWS Glue utilisant le framework pytest dans AWS CodePipeline. Vous pouvez également utiliser ce modèle pour tester et déployer plusieurs AWS Glue tâches.

## Conditions préalables et limitations
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Une URI d'image Amazon Elastic Container Registry (Amazon ECR) pour AWS Glue votre bibliothèque, téléchargée depuis la galerie publique [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR
+ terminal Bash (sur n'importe quel système d'exploitation) avec un profil pour la cible Compte AWS et Région AWS
+ [Python 3.10 ou version](https://www.python.org/downloads/) ultérieure
+ [Pytest](https://github.com/pytest-dev/pytest)
+ bibliothèque [Moto](https://github.com/getmoto/moto) Python pour les tests Services AWS

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

Le schéma suivant décrit comment intégrer les tests unitaires pour les processus AWS Glue ETL basés sur Python dans un pipeline typique à l'échelle AWS DevOps d'une entreprise.

![\[Tests unitaires pour les processus ETL d'AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


Le schéma suivant illustre le flux de travail suivant :

1. Au stade source, AWS CodePipeline utilise un bucket Amazon Simple Storage Service (Amazon S3) versionné pour stocker et gérer les actifs du code source. Ces ressources incluent un exemple de tâche ETL Python (`sample.py`), un fichier de test unitaire (`test_sample.py`) et un AWS CloudFormation modèle. CodePipeline Transfère ensuite le code le plus récent de la branche principale vers le AWS CodeBuild projet pour un traitement ultérieur.

1. Au cours de la phase de création et de publication, le code le plus récent de l'étape source précédente est testé à l'unité à l'aide d'une image Amazon ECR AWS Glue publique. Le rapport de test est ensuite publié dans les groupes de CodeBuild rapports. L'image du conteneur dans le référentiel public Amazon ECR pour les AWS Glue bibliothèques inclut tous les fichiers binaires nécessaires à l'exécution locale de tâches ETL [PySparkbasées sur](https://spark.apache.org/docs/latest/api/python/) des tests unitaires. AWS Glue Le référentiel de conteneurs public comporte trois balises d'image, une pour chaque version prise en charge par AWS Glue. À des fins de démonstration, ce modèle utilise la balise `glue_libs_4.0.0_image_01` image. Pour utiliser cette image de conteneur comme image d'exécution CodeBuild, copiez l'URI de l'image qui correspond à la balise d'image que vous souhaitez utiliser, puis mettez à jour le `pipeline.yml` fichier dans le GitHub référentiel de la `TestBuild` ressource.

1. Lors de la phase de déploiement, le CodeBuild projet est lancé et le code est publié dans un compartiment Amazon S3 si tous les tests sont réussis.

1. L'utilisateur déploie la AWS Glue tâche à l'aide du CloudFormation modèle figurant dans le `deploy` dossier.

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

**Services AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)est un service ETL entièrement géré. Il vous aide à classer, nettoyer, enrichir et déplacer les données de manière fiable entre les magasins de données et les flux de données.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets offrant une évolutivité, une disponibilité des données, une sécurité et des performances de pointe.

**Autres outils**
+ [Python](https://www.python.org/) est un langage de programmation de haut niveau interprété à usage général.
+ [Moto](https://github.com/getmoto/moto) est une bibliothèque Python pour les tests Services AWS.
+ [Pytest](https://github.com/pytest-dev/pytest) est un framework permettant d'écrire de petits tests unitaires évolutifs pour prendre en charge des tests fonctionnels complexes pour les applications et les bibliothèques.
+ [La bibliothèque Python ETL](https://github.com/awslabs/aws-glue-libs) for AWS Glue est un référentiel pour les bibliothèques Python utilisées dans le développement local de tâches PySpark par lots pour AWS Glue.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [aws-glue-jobs-unit-testing](https://github.com/aws-samples/aws-glue-jobs-unit-testing). Le référentiel inclut les ressources suivantes :
+ Exemple de AWS Glue tâche basée sur Python dans le dossier `src`
+ Cas de tests unitaires associés (créés à l'aide du framework pytest) dans le dossier `tests`
+ Un CloudFormation modèle (écrit en YAML) dans le dossier `deploy`

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

**Sécurité des CodePipeline ressources**

Il est recommandé d'utiliser le chiffrement et l'authentification pour les référentiels sources qui se connectent à vos pipelines. CodePipeline Pour plus d'informations, consultez [la section Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) dans la CodePipeline documentation.

**Surveillance et journalisation des CodePipeline ressources**

Il est recommandé d'utiliser les fonctionnalités de AWS journalisation pour déterminer les actions que les utilisateurs effectuent sur votre compte et les ressources qu'ils utilisent. Les fichiers journaux contiennent les informations suivantes :
+ Heure et date des actions
+ Adresse IP source des actions
+ Quelles actions ont échoué en raison d'autorisations inadéquates

Les fonctionnalités de journalisation sont disponibles dans AWS CloudTrail et Amazon CloudWatch Events. Vous pouvez l'utiliser CloudTrail pour enregistrer les appels d' AWS API et les événements connexes effectués par ou pour votre compte Compte AWS. Pour plus d'informations, consultez la section [Journalisation des appels d' CodePipeline API AWS CloudTrail](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) dans la CodePipeline documentation.

Vous pouvez utiliser CloudWatch les événements pour surveiller vos AWS Cloud ressources et vos applications en cours d'exécution AWS. Vous pouvez également créer des alertes dans CloudWatch Événements. Pour plus d'informations, consultez la section [Surveillance CodePipeline des événements](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) dans la CodePipeline documentation.

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

### Déployer le code source
<a name="deploy-the-source-code"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Préparez l'archive de code pour le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps ingénieur | 
| Créez la CloudFormation pile. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)La pile crée une CodePipeline vue en utilisant Amazon S3 comme source. Dans les étapes ci-dessus, le pipeline est **aws-glue-unit-test-pipeline**. | AWS DevOps, DevOps ingénieur | 

### Exécutez les tests unitaires
<a name="run-the-unit-tests"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez les tests unitaires dans le pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingénieur | 

### Nettoyez toutes les AWS ressources
<a name="clean-up-all-aws-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez les ressources de votre environnement. | Pour éviter des coûts d'infrastructure supplémentaires, assurez-vous de supprimer la pile après avoir testé les exemples fournis dans ce modèle.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingénieur | 

## Résolution des problèmes
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le rôle CodePipeline de service ne peut pas accéder au compartiment Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| CodePipeline renvoie une erreur indiquant que le compartiment Amazon S3 n'est pas versionné. | CodePipeline nécessite que le compartiment Amazon S3 source soit versionné. Activez le versionnement sur votre compartiment Amazon S3. Pour obtenir des instructions, consultez la section [Activation de la gestion des versions sur les buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html). | 

## Ressources connexes
<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/)
+ [Développer et tester des AWS Glue emplois au niveau local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation pour AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Informations supplémentaires
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

En outre, vous pouvez déployer les AWS CloudFormation modèles à l'aide du AWS Command Line Interface (AWS CLI). Pour plus d'informations, consultez la section [Déploiement rapide de modèles avec transformations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html) dans la CloudFormation documentation.