Glue : Explorons l’outil ETL d’AWS

Guide introductif d’AWS Glue

Alexandre Poupeau
neoxia
6 min readNov 2, 2021

--

Dans notre siècle gouverné par la data, les tâches ETL sont des éléments clés pour son exploitation. ETL, pour Extract, Transform, Load, consiste en l’application de transformations sur des données provenant d’une source pour les déposer par la suite dans un output. Elles sont des pièces centrales pour des projets variés : mise en place d’un data warehouse, datalake, pipeline data ML etc… Le recours à des outils robustes est nécessaire pour mener à bien de telles tâches ETL pour de nombreuses raisons : tailles des jeux de données, workflow, scheduling, corruption des données, temps d’exécution, monitoring et autres.

A travers cet article, vous allez découvrir le service AWS répondant aux besoins ETL sorti en 2017 : AWS Glue, un service d’intégration serverless des données entièrement dédié à la mise en place et l’orchestration de tâches ETL.

AWS Glue — Schema introductif

Vous explorerez AWS Glue sous trois axes :

  • Data Catalog : répertoire de sources et outputs de données
  • ETL : Développement de tâches ETL
  • Retour d’expérience

Data Catalog

Le Data Catalog est un répertoire faisant référence à vos jeux de données. Il recense des metadata ; c’est à dire des informations sur vos jeux de données. Il est composé de trois ressources : les Databases avec ses Tables, les Connections et les Crawlers.

Databases et Tables

Une Database peut contenir plusieurs Tables. On notera que la structure est similaire à une base de données classique. Ces tables peuvent provenir de plusieurs sources (S3, RDS, DynamoDB, RedShift, JDBC on-premise ou non etc…).

Connections

Elles vous permettent de facilement manager des connexions vers des bases de données (PostgreSQL, MySQL, MongoDB, etc…). Une fois la connexion établie, on peut utiliser la ressource de plusieurs façon :

  • Telle quelle dans un Job AWS Glue comme source ou target.
  • Créer une table dans le Data Catalog en analysant les données via un Crawler.

L’avantage majeur des Connections est qu’elles peuvent être utilisées dans plusieurs Jobs ETL. Si jamais vous avez à modifier une connexion, vous pouvez simplement modifier la ressource associée : cela impactera tous les Jobs qui l’utilise sans avoir à éditer la connexion pour chaque Job.

Crawlers

Les Crawlers vous permettent de parcourir de réels jeux de données et d’enregistrer automatiquement pour vous les metadata dans une table et ce, à partir d’une ressource Connection.

ETL

AWS Glue utilise les éléments du Data Catalog comme source ou output afin de réaliser des jobs ETL. Trois ressources sont mises à disposition pour répondre aux besoins ETL : les Jobs, les Triggers et les Workflows.

Jobs

Les Glue Jobs sont au cœur du service et caractérisent vos opérations ETL. Un Job est défini via plusieurs éléments :

  • Script : fichier Python ou Scala déposé sur S3.
  • Role IAM : Permissions pour votre Glue Job.
  • Type : Spark / SparkStreaming / PythonShell (coût décroissant respectivement associé à une puissance décroissante — voir coûts).
  • Job Bookmark : Outil pour du incremental load. Par défaut, votre job utilise toutes les données des datasets. Il existe l’option Pause : les données source sont chargées à partir du dernier checkpoint mais ne met pas à jour le checkpoint à la fin du Job. Cet outil n’est pas disponible en mode PythonShell.
  • Monitoring : Continuous logging ou Spark UI. Vous retrouverez les logs des Jobs dans AWS CloudWatch.
  • Paramétrage : Pratique pour éviter du hard-coding et gain de temps en cas de modification de paramètres utilisés dans vos script ETL (ex : nom de table).
  • Compute : Nombre de Workers — Type de WorkerMax Concurrency Job Timeout.

AWS Glue propose un environnement de travail pour l’édition de scripts directement depuis la console. L’avantage des Glue Jobs est la mise à jour des scripts qui se réalise automatiquement (dans les deux sens AWS Glue — S3). Il faut noter que Glue utilise Spark avec du code spécifique Glue en utilisant ses propres DynamicFrame ; semblables mais différent des DataFrame Spark. Il est néanmoins possible de convertir des Glue DynamicFrame en Spark DataFrame. De plus si vous souhaitez réaliser une transformation très précise, il est toujours possible de l’exécuter en SQL.

L’interface de développement est relativement simple. Vous pouvez modifier le script, le sauvegarder et ensuite exécuter le job ETL. Cela mène cependant à de nombreuses modifications du Job où vous développez à tâtons.

Afin d’éviter ce désagrément, AWS Glue propose aussi la création de Endpoints de Développement où l’on peut se connecter en local ou bien sur des notebooks SageMaker (Jupyter). Cela permet de rapidement tester des tâches et opérations ETL en temps réel avant la création d’un Job. Attention, cela est en revanche très coûteux car contrairement aux Jobs (où l’on paye uniquement pour le temps du job) on paye les DPUs pour chaque heure où le Endpoint de Développement est actif.

Triggers

Les Triggers sont simplement des ressources vous permettant de planifier vos Glue Jobs ou de configurer leur déclenchement. Il existe plusieurs types de Triggers :

  • Schedule : choix via console ou custom (CRON).
  • Job Event : déclenchement d’un Job lorsqu’un autre entre dans l’état Failed, Succeed, Timeout ou Stopped.
  • On-Demand : déclenchement manuel.

Workflows

Les Workflows Glue permettent de gérer l’orchestration de vos tâches ETL. Un Workflow débute par un Trigger qui déclenche un ou des Jobs Glue. Vous pouvez ensuite attacher d’autres Triggers au Workflow pour désigner votre ETL pipeline comme bon vous semble.

UI AWS Glue — Exemple de Workflow

Les Workflows possèdent des limitations :

  • L’interface est basique et moins complète que l’UI d’Airflow par exemple.
  • Ils sont limités à la création de noeuds Triggers, Crawlers et Jobs Glue uniquement. On se retrouve bloqué si l’on souhaite faire plus.
  • Les configurations sont assez limitées

Pour ces raisons, AWS Glue se présente comme un bon outil ETL cependant si vous avez à réaliser des pipelines complexes faisant appel notamment à des ressources extérieures à AWS, nous vous recommandons d’utiliser un outil d’orchestration à part (voir AWS Glue VS Airflow).

Retour d’expérience

Les coups de coeur

  • Une fois votre Data Catalog mis en place, réaliser des tâches ETL selon vos besoins est relativement simple et rapide ! De plus, Glue est un outil puissant adapté pour traiter de larges quantité de données efficacement et, étant un service serverless, vous ne payez que pour le temps d’exécution de chaque Job.
  • Orchestration : Step Functions permet d’exécuter des Jobs Glue et Airflow possède un opérateur (AwsGlueJobOperator) pré-construit pour lancer des Jobs Glue.
  • Il est possible de récupérer des secrets provenant de AWS Secrets Manager si nécessaire dans les scripts AWS Glue Job ; utile pour les credentials de databases entre autres.
  • AWS Glue propose d’autres ressources comme par exemple des tâches ML Transform (nettoyage de données via Machine Learning).

Aspects négatifs relevés

  • AWS Glue est peu user-friendly : les documentations sont plutôt verbeuses et souvent peu informatives. De plus, vous pourrez rencontrer des difficultés pour établir des connexions à des databases à cause de problèmes liés à votre configuration réseau (VPC).
  • Son lien avec AWS Lake Formation (pour le data catalog) fait qu’il est nécessaire de gérer des permissions (en plus des rôles IAM !) pour les databases et tables dans le AWS Lake Formation. Cela peut être vraiment fastidieux car il faut continuellement gérer plusieurs permissions à la fois. Je vous invite à jeter un coup d’oeil à Lake Formation Access Control Overview.
  • Actuellement, un Job Glue ne peut utiliser des connexions JDBC présentes que dans un unique sous-réseau (options pour pallier à ce problème) ! Veillez à considérer ces limitations avant de vous engager dans la conception d’une pipeline ETL.

Mot de la fin

AWS Glue se présente donc comme un service ETL serverless puissant et robuste pour concevoir vos tâches ETL sur AWS. Il vous permet de facilement gérer vos sources et targets pour vos tâches ETL et ce, à partir de jeux de données provenant d’AWS ou non. Il intègre de plus des outils pour vous permettre de facilement mettre en place des pipelines ETL complètes, tels que des Triggers et des Workflows.

Je suis bien entendu heureux d’aider, de répondre à vos questions et en attente de vos retours. N’hésitez pas à m’informer si vous avez apprécié l’angle choisi pour aborder AWS Glue !

--

--

Alexandre Poupeau
neoxia
Writer for

Fond of data science and data engineering, let’s learn plenty of amazing things today together.