Ce guide pratique explique comment tester localement les jobs AWS Glue, un service serverless d'intégration de données. L'article souligne l'importance du test local pour accélérer le développement, réduire les coûts et faciliter le débogage. Il détaille ensuite une méthode en trois étapes pour configurer un environnement de test local. Ce tutoriel vise à optimiser le processus de développement des jobs AWS Glue, permettant aux data engineers de tester efficacement leur code avant le déploiement en production.
AWS Glue est un service serverless phare d’AWS pour l’intégration de données. Pour les data engineers spécialisés en big data, sa magie réside principalement dans le fait qu’il nous permet de nous concentrer entièrement sur Spark et son optimisation, tout en déléguant à AWS la gestion de l'infrastructure avec un paramétrage minimal pour commencer. Bien sûr, il est possible de peaufiner la configuration pour les jobs les plus complexes.
Le serverless, bien qu'extrêmement pratique pour le calcul distribué, peut également rendre la phase d'implémentation et de test complexe. Chaque modification implique de lancer le job, d'attendre que le cluster soit prêt, et de découvrir parfois que le job échoue dès le début à cause d'une policy IAM manquante, d'une erreur sur les colonnes d'un DataFrame, ou d'autres problèmes similaires.
Qui a déjà réussi à lancer ses scripts dès le début sans aucun bug ? Si vous avez le secret, faites-le-moi savoir, je suis très intéressé !
Le coût de l’itération de développement est élevé :
Tester en local devient alors une nécessité pour accélérer le développement et réduire les coûts en ressources humaines et matérielles.
En bonus, cela permet d’implémenter des tests unitaires, une pratique essentielle pour un développement serein.
Pour réussir à tester en local, voici les trois étapes principales :
Pour Glue version 2.0, 3.0 ou 4.0, utilisez la commande suivante dans le terminal :
Docker Pull amazon/aws-glue-libs:glue_libs_{glue_version}.0.0_image_01
Dans cette section, nous allons voir comment exécuter notre code dans l’IDE (Pycharm) pour qu’il se lance avec l’environnement Glue de l’image Docker.
Une fois votre projet pyspark ouvert. ( et si vous n’en avez pas, vous pouvez simplement créer un projet et rajouter ce fichier glue_script.py qu’on pourra tester tout à l’heure. )
Dans la conf, nous allons principalement modifier les variables d’environnement ainsi que docker container settings
Maintenant qu’on a configuré l’interpréteur, il faut faire attention à bien spécifier à pycharm où est-ce qu’il va trouver les fichiers sources python utilisés dans le conteneur Docker.
On devra ajouter une variable d’environnement PYTHONPATH
Pour glue 4.0, on devra la compléter avec
/home/glue_user/aws-glue-libs/PyGlue.zip:/home/glue_user/spark/python/lib/py4j-0.10.9-src.zip:/home/glue_user/spark/python/
Pour les autres versions, il faut aller voir le build docker de l’image
https://hub.docker.com/r/amazon/aws-glue-libs/tags
Choisir la version qui nous intéresse et récupérer la variable Python Path comme ci-dessous.
Concrètement c’est là où on va faire la configuration de run du Docker.
Les fameux paramètre -v ou -p par ex. lorsqu’on fait un Docker Run sur terminal.
Petit rappel :
v pour volume mounting, p port binding par ex: -v local_path:docker_path -p 8080:80 etc.
Ici pour l’intégration avec AWS, il ne faudra pas oublier d’inclure les Credentials AWS dans Volume bindings.
N’oublions pas de rajouter les variables d’environnement dans le AWS_PROFILE et AWS_REGION avec vos paramètres.
À partir de là, vous pouvez lancer le script ou le déboguer exactement comme un script normal dans Pycharm. L’exécution sera légèrement plus longue car le conteneur doit se lancer et charger Spark avant que le code ne s’exécute, mais cela ne prend que quelques secondes, bien moins que de devoir déployer le code sur Glue et tester directement sur le job.
Les modules et objets Glue de votre projet ou script peuvent ne pas être reconnus et être soulignés en rouge dans Pycharm. Cela est dû au fait que Pycharm ne les reconnaît pas, car votre interpréteur Python est dans l’image Docker.
Une astuce simple est de cloner le repo sur Github : https://github.com/awslabs/aws-glue-libs
Clonez la branche qui vous intéresse. La branche master est pour la dernière version GLUE dispo. Ici c’est la 4.0.
git clone -b master https://github.com/awslabs/aws-glue-libs.git
Ensuite, dans Pycharm, allez dans File > Settings > Project Structure > Add Content Roots et ajoutez le chemin local où vous avez cloné aws-glue-libs.
Conclusion
Le cloud computing a révolutionné l’industrie tech, notamment celle de la data, en permettant de gérer de grandes quantités de stockage et de calcul sans avoir besoin de lourdes infrastructures physiques. Le calcul distribué est au cœur de ces architectures à grande échelle, mais il nécessite une expertise poussée pour être géré efficacement.
Le serverless, en ajoutant une couche d’abstraction, permet de se concentrer directement sur le côté fonctionnel sans le moindre overhead opérationnel. Il y a bien des serveurs derrière, mais vous n’avez pas besoin de les gérer ou de les administrer. Vous pouvez vous concentrer à 100 % sur la fonctionnalité.
Tester vos jobs AWS Glue en local vous permet de gagner du temps et de l'argent tout en vous assurant que votre code est prêt pour la production, réduisant ainsi les risques de bugs après déploiement.
• Latest new on data engineering
• How to design Production ready AI Systems
• Curated list of material to Become the ultimate AI Engineer