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 dans AWS Glue à l'aide du framework pytest
Dépôt de code : aws-glue-jobs-unit-testing | Environnement : Production | Technologies : DevOps mégadonnées, développement et tests de logiciels |
Services AWS : AWS CloudFormation ; AWS CodeBuild ; AWS CodeCommit ; AWS CodePipeline ; AWS Glue |
Récapitulatif
Vous pouvez exécuter des tests unitaires pour des tâches d'extraction, de transformation et de chargement (ETL) en Python pour AWS Glue dans un environnement de développement local, mais la réplication de ces tests dans un DevOps pipeline peut s'avérer difficile et fastidieuse. Les tests unitaires peuvent être particulièrement difficiles lorsque vous modernisez le processus ETL du mainframe sur les piles technologiques AWS. 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 dans AWS Glue en utilisant le framework pytest dans AWS CodePipeline. Vous pouvez également utiliser ce modèle pour tester et déployer plusieurs tâches AWS Glue.
Conditions préalables et limitations
Prérequis
Un compte AWS actif
Une URI d'image Amazon Elastic Container Registry (Amazon ECR) pour votre bibliothèque AWS Glue, téléchargée depuis la galerie publique Amazon
ECR Terminal Bash (sur n'importe quel système d'exploitation) avec un profil pour le compte AWS cible et la région AWS
Python 3.10 ou version
ultérieure Bibliothèque Moto
Python pour tester les services AWS
Architecture
Pile technologique
Amazon Elastic Container Registry (Amazon ECR)
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
AWS Glue
Pytest
Python
bibliothèque ETL Python pour AWS Glue
Architecture cible
Le schéma suivant décrit comment intégrer les tests unitaires pour les processus ETL AWS Glue basés sur Python dans un pipeline AWS DevOps classique à l'échelle d'une entreprise.
![Tests unitaires pour les processus ETL d'AWS Glue](images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/bb4d67e8-cefb-4018-aef3-44d655adf705.png)
Le schéma suivant illustre le flux de travail suivant :
Au stade source, CodePipeline utilise un CodeCommit référentiel pour le code source, y compris un exemple de tâche ETL Python (
sample.py
), un fichier de test unitaire (test_sample.py
) et un CloudFormation modèle AWS. CodePipeline Transfère ensuite le code le plus récent de la branche principale vers le CodeBuild projet pour un traitement ultérieur.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 publique d'AWS Glue. 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 bibliothèques AWS Glue inclut tous les fichiers binaires nécessaires pour exécuter des tâches ETL PySparkbasées sur
des tests unitaires dans AWS Glue localement. 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 lepipeline.yml
fichier dans le GitHub référentiel de laTestBuild
ressource.Au cours de la phase de déploiement, le CodeBuild projet est lancé et le code est publié dans un bucket Amazon Simple Storage Service (Amazon S3) si tous les tests sont réussis.
L'utilisateur déploie la tâche AWS Glue à l'aide du CloudFormation modèle figurant dans le
deploy
dossier.
Outils
Outils AWS
Amazon Elastic Container Registry (Amazon ECR) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
AWS CodeBuild 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 CodeCommit est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
AWS vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
AWS Glue 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.
Autres outils
Python
est un langage de programmation de haut niveau interprété à usage général. Moto
est une bibliothèque Python permettant de tester les services AWS. 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
pour 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.
Code
Le code de ce modèle est disponible dans le dépôt GitHub aws-glue-jobs-unit-testing
Exemple de tâche AWS Glue 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
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é dans la CodePipeline documentation.
Surveillance et journalisation des CodePipeline ressources
Il est recommandé d'utiliser les fonctionnalités de journalisation d'AWS 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 consigner les appels d'API AWS et les événements connexes effectués par ou pour le compte de votre compte AWS. Pour plus d'informations, consultez la section Journalisation des appels d' CodePipeline API avec AWS CloudTrail dans la CodePipeline documentation.
Vous pouvez utiliser CloudWatch les événements pour surveiller les ressources de votre cloud AWS et les applications exécutées sur AWS. Vous pouvez également créer des alertes dans CloudWatch Événements. Pour plus d'informations, consultez la section Surveillance CodePipeline des événements dans la CodePipeline documentation.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Préparez l'archive de code pour le déploiement. |
| DevOps ingénieur |
Créez la CloudFormation pile. |
La pile crée automatiquement un CodeCommit référentiel avec le code initial qui a été enregistré à partir du fichier .zip et chargé dans le compartiment S3. En outre, la pile crée une CodePipeline vue en utilisant le CodeCommit référentiel comme source. Dans les étapes ci-dessus, le CodeCommit référentiel est aws-glue-unit-test et le pipeline est aws-glue-unit-test-pipeline. | AWS DevOps, DevOps ingénieur |
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.
| AWS DevOps, DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Exécutez les tests unitaires dans le pipeline. |
| AWS DevOps, DevOps ingénieur |
Résolution des problèmes
Problème | Solution |
---|---|
Un pipeline avec un Amazon S3, Amazon ECR ou CodeCommit une source ne démarre plus automatiquement | Si vous modifiez les paramètres de configuration d'une action qui utilise des règles relatives aux événements dans Amazon EventBridge ou CloudWatch des événements pour la détection des modifications, il est possible que l'AWS Management Console ne détecte pas de modification lorsque les identifiants de source sont similaires et comportent des caractères initiaux identiques. Comme la nouvelle règle d'événement n'est pas créée par la console, le pipeline ne démarre plus automatiquement. Par exemple, la modification du nom d'une CodeCommit branche de Cela s'applique aux actions source suivantes qui utilisent des CloudWatch événements dans Events pour détecter les modifications :
Pour résoudre le problème, effectuez l'une des opérations suivantes :
|
Ressources connexes
Informations supplémentaires
En outre, vous pouvez déployer les CloudFormation modèles AWS à l'aide de l'interface de ligne de commande AWS. Pour plus d'informations, consultez la section Déploiement rapide de modèles avec transformations dans la CloudFormation documentation.