Skip to content
Learni
View all tutorials
Cloud & Data

Comment créer un job ETL avec AWS Glue en 2026

18 minBEGINNER

Introduction

AWS Glue est un service ETL serverless d'AWS qui simplifie l'extraction, la transformation et le chargement de données. Il permet aux entreprises de cataloguer leurs données et d'exécuter des jobs sans gérer d'infrastructure. En 2026, maîtriser Glue est essentiel pour tout data engineer débutant souhaitant automatiser ses pipelines. Ce tutoriel vous guide pas à pas pour créer un job ETL fonctionnel.

Prérequis

  • Compte AWS avec permissions Glue et S3
  • AWS CLI installé et configuré
  • Connaissances de base en Python
  • Un bucket S3 contenant des données CSV

Configuration IAM

glue-role-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket",
        "glue:*"
      ],
      "Resource": "*"
    }
  ]
}

Cette politique IAM accorde les permissions minimales nécessaires à Glue pour lire et écrire dans S3 et gérer les métadonnées.

Création du crawler

terminal
aws glue create-crawler \
  --name mon-premier-crawler \
  --role arn:aws:iam::123456789012:role/GlueServiceRole \
  --database-name glue-demo-db \
  --targets '{"S3Targets":[{"Path":"s3://mon-bucket-donnees/raw/"}]}' \
  --table-prefix demo_

Cette commande CLI crée un crawler qui analyse automatiquement les données CSV dans S3 et génère le schéma dans le catalogue Glue.

Script ETL Python

etl_job.py
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

datasource = glueContext.create_dynamic_frame.from_catalog(
    database="glue-demo-db",
    table_name="demo_raw_data"
)

transformed = ApplyMapping.apply(
    frame=datasource,
    mappings=[("id", "int", "id", "int"), ("name", "string", "nom", "string")]
)

glueContext.write_dynamic_frame.from_options(
    frame=transformed,
    connection_type="s3",
    connection_options={"path": "s3://mon-bucket-donnees/processed/"},
    format="parquet"
)
job.commit()

Ce script complet lit les données via le catalogue, applique une transformation simple et écrit le résultat en Parquet dans S3.

Création du job Glue

terminal
aws glue create-job \
  --name mon-job-etl \
  --role arn:aws:iam::123456789012:role/GlueServiceRole \
  --command Name=glueetl,ScriptLocation=s3://mon-bucket-scripts/etl_job.py,PythonVersion=3 \
  --glue-version 4.0 \
  --default-arguments '{"--job-language":"python"}'

Cette commande enregistre le job ETL dans AWS Glue en pointant vers le script Python stocké dans S3.

Exécution du job

terminal
aws glue start-job-run --job-name mon-job-etl

Lance l'exécution du job ETL. Surveillez la progression dans la console AWS Glue ou via CloudWatch.

Bonnes pratiques

  • Utilisez toujours le catalogue de données pour éviter les schémas codés en dur
  • Préférez le format Parquet pour les données transformées
  • Activez les bookmarks pour traiter uniquement les nouvelles données
  • Surveillez les coûts avec les tags et les alertes CloudWatch

Erreurs courantes à éviter

  • Oublier d'accorder les permissions IAM correctes au rôle Glue
  • Ne pas configurer de bookmarks sur les sources S3
  • Utiliser des versions de Glue obsolètes (privilégiez 4.0+)
  • Ignorer la journalisation CloudWatch pour le débogage

Pour aller plus loin

Approfondissez vos compétences ETL avec nos formations Learni dédiées à AWS et aux pipelines de données modernes.