Data Engineering
2026-03-20
9 min
Équipe Blent

Prefect : l'orchestration moderne de workflows

Prefect propose une approche radicalement différente de la gestion des workflows. Conçu pour être simple à prendre en main tout en offrant une puissance considérable, il permet aux équipes de transformer n'importe quel code Python en workflow orchestré en quelques lignes seulement. Utilisé par des entreprises comme Waymo, Snowflake ou encore Patreon, Prefect s'est rapidement imposé comme une référence pour celles qui souhaitent moderniser leurs pipelines de données sans sacrifier la flexibilité.

Prefect : l'orchestration moderne de workflows

Dans un contexte où les pipelines de données deviennent de plus en plus complexes et critiques pour les entreprises, l'orchestration de workflows est devenue un enjeu majeur pour les équipes Data et DevOps. Si Apache Airflow a longtemps dominé ce domaine, une nouvelle génération d'outils a émergé pour répondre aux limites des solutions traditionnelles. Parmi eux, Prefect s'est imposé comme une alternative moderne et élégante.

Véritable plateforme d'orchestration nouvelle génération, Prefect propose une approche radicalement différente de la gestion des workflows. Conçu pour être simple à prendre en main tout en offrant une puissance considérable, il permet aux équipes de transformer n'importe quel code Python en workflow orchestré en quelques lignes seulement. Utilisé par des entreprises comme Waymo, Snowflake ou encore Patreon, Prefect s'est rapidement imposé comme une référence pour celles qui souhaitent moderniser leurs pipelines de données sans sacrifier la flexibilité.

Qu'est-ce que Prefect ?

Prefect est une plateforme d'orchestration de workflows open source qui permet de coordonner, observer et réagir à l'exécution de tâches Python. Lancé en 2018 par Jeremiah Lowin, ancien contributeur d'Airflow, le projet est né d'une volonté de repenser l'orchestration en éliminant les frictions qui ralentissent les équipes Data.

Logo Prefect

La philosophie de Prefect repose sur un principe simple : le code d'abord. Contrairement à Airflow qui impose une structure rigide avec des DAGs (Directed Acyclic Graphs) définis de manière déclarative, Prefect permet d'orchestrer n'importe quel code Python existant avec un minimum de modifications. Cette approche offre plusieurs avantages :

  • Adoption progressive : il suffit d'ajouter quelques décorateurs à du code existant pour le transformer en workflow orchestré.
  • Tests simplifiés : les flows Prefect peuvent être exécutés et testés localement comme n'importe quelle fonction Python.
  • Flexibilité maximale : pas de contrainte sur la structure du code, les dépendances dynamiques sont gérées nativement.
  • Expérience développeur optimisée : l'outil s'adapte au code plutôt que l'inverse.

Prefect existe en deux versions : Prefect Cloud, une offre SaaS managée qui fournit l'interface de monitoring et la coordination des exécutions, et Prefect Server, une version auto-hébergée pour les organisations souhaitant garder le contrôle total de leur infrastructure. Dans les deux cas, l'exécution des workflows se fait dans votre propre environnement, Prefect ne faisant qu'orchestrer et observer.

Concepts fondamentaux : Flows, Tasks et Runs

Pour maîtriser Prefect, il est essentiel de comprendre ses concepts centraux qui structurent l'ensemble de la plateforme.

Flows et Tasks

Un flow est l'unité de base de l'orchestration dans Prefect. Il s'agit simplement d'une fonction Python décorée avec @flow qui représente un workflow complet. À l'intérieur d'un flow, on peut définir des tasks (tâches) avec le décorateur @task, qui représentent des unités de travail individuelles pouvant être réessayées, mises en cache ou exécutées en parallèle.

from prefect import flow, task

@task(retries=3, retry_delay_seconds=60)
def extract_data(source: str) -> dict:
    """Extrait les données depuis une source externe."""
    # Logique d'extraction
    return {"data": "..."}

@task
def transform_data(raw_data: dict) -> dict:
    """Transforme les données brutes."""
    # Logique de transformation
    return {"transformed": "..."}

@task
def load_data(data: dict, destination: str) -> None:
    """Charge les données vers la destination."""
    # Logique de chargement
    pass

@flow(name="ETL Pipeline")
def etl_pipeline(source: str, destination: str):
    """Pipeline ETL complet."""
    raw = extract_data(source)
    transformed = transform_data(raw)
    load_data(transformed, destination)

python

Ce qui distingue Prefect, c'est que ce code peut être exécuté directement comme une fonction Python standard (etl_pipeline("source", "dest")), tout en bénéficiant automatiquement de l'observabilité, des retries et du tracking fournis par la plateforme.

Runs et états

Chaque exécution d'un flow génère un flow run, et chaque exécution d'une task génère un task run. Ces runs sont associés à des états (states) qui reflètent leur progression : Pending, Running, Completed, Failed, Cancelled, etc. Cette granularité permet un suivi précis de chaque exécution et facilite le debugging en cas de problème.

Exemple de run dans Prefect UI

L'interface Prefect UI offre une visualisation complète de ces runs avec leurs états, durées, logs et dépendances, permettant aux équipes de comprendre rapidement ce qui s'est passé lors de chaque exécution.

Deployments

Les deployments représentent le mécanisme par lequel un flow devient exécutable de manière programmée ou à la demande. Un deployment associe un flow à une configuration d'exécution : où le code se trouve, comment l'exécuter, avec quels paramètres par défaut, et selon quel planning.

from prefect import flow

@flow
def my_pipeline():
    pass

if __name__ == "__main__":
    my_pipeline.serve(
        name="my-pipeline-deployment",
        cron="0 8 * * *",  # Tous les jours à 8h
        tags=["production", "etl"]
    )

python

Les deployments peuvent être déclenchés par des schedules (cron, intervalle), via l'API, l'interface Web, ou par des automations réagissant à des événements. Cette flexibilité permet d'adapter l'orchestration aux besoins spécifiques de chaque workflow.

À lire : découvrez notre formation Data Engineer

Variables, Blocs et configuration

Prefect propose des mécanismes élégants pour gérer la configuration et les secrets, essentiels dans tout pipeline de production.

Variables

Les variables Prefect permettent de stocker des valeurs de configuration réutilisables à travers les flows. Elles sont idéales pour les paramètres non sensibles comme des chemins de fichiers, des noms d'environnement ou des seuils de configuration.

from prefect.variables import Variable

# Récupération d'une variable
env = Variable.get("environment", default="development")

# Utilisation dans un flow
@flow
def my_flow():
    bucket = Variable.get("data_bucket")
    # Utiliser bucket...

python

Les variables peuvent être créées et modifiées via l'UI, le CLI ou l'API, offrant une flexibilité maximale pour adapter les pipelines sans modifier le code.

Blocs

Les blocs sont un concept plus puissant permettant de stocker et réutiliser des configurations complexes, notamment pour les connexions à des systèmes externes. Prefect fournit des blocs prédéfinis pour les cas d'usage courants : stockage S3, bases de données, notifications Slack, credentials AWS, etc.

from prefect_aws import S3Bucket

# Chargement d'un bloc configuré via l'UI
s3_block = S3Bucket.load("my-data-bucket")

@flow
def process_files():
    # Téléchargement depuis S3
    s3_block.download_folder_to_path("input/", "./local_data/")
    
    # Traitement...
    
    # Upload des résultats
    s3_block.upload_from_path("./results/", "output/")

python

L'avantage des blocs réside dans leur capacité à encapsuler les secrets et configurations de manière sécurisée. Les credentials ne sont jamais exposés dans le code, et les blocs peuvent être partagés entre plusieurs flows tout en étant gérés centralement.

Type de configurationVariablesBlocs
UsageValeurs simplesConfigurations complexes
SecretsNon recommandéSupporté nativement
IntégrationsNonAWS, GCP, Slack, etc.
RéutilisabilitéLecture seuleMéthodes et actions

Prefect vs Airflow : quelle différence ?

La comparaison entre Prefect et Airflow est inévitable, ces deux outils étant les principales références de l'orchestration de workflows Python. Leurs approches philosophiques diffèrent fondamentalement.

CritèrePrefectAirflow
ParadigmeCode-first, décorateurs PythonDAGs déclaratifs
Exécution localeNative, comme une fonctionNécessite un scheduler
Dépendances dynamiquesSupportées nativementLimitées (DAGs statiques)
Courbe d'apprentissageDoucePlus raide
InfrastructureLégère (workers distribués)Plus lourde (scheduler, webserver, DB)
TestsTests unitaires standardsConfiguration spécifique
MaturitéPlus récent (2018)Établi (2014)
ÉcosystèmeEn croissanceTrès large

Airflow reste pertinent pour les organisations ayant des pipelines établis, une équipe familière avec l'outil, ou des besoins spécifiques couverts par son vaste écosystème de providers. Sa maturité et son adoption massive garantissent un support communautaire solide.

Prefect s'impose lorsque la vélocité de développement est prioritaire, que les workflows nécessitent une logique dynamique complexe, ou que l'équipe souhaite une expérience développeur plus moderne. Son approche "negative engineering" (réduire le code à écrire) permet de se concentrer sur la logique métier plutôt que sur la plomberie d'orchestration.

En pratique, de nombreuses équipes migrent progressivement vers Prefect pour les nouveaux projets tout en maintenant leurs pipelines Airflow existants, profitant ainsi du meilleur des deux mondes.

À découvrir : notre formation Data Engineer

Cas d'usage et mise en œuvre

Prefect trouve sa place dans de nombreux scénarios où l'orchestration de workflows Python est nécessaire.

Pipelines ETL/ELT : c'est le cas d'usage le plus courant. Prefect orchestre l'extraction de données depuis diverses sources (APIs, bases de données, fichiers), leur transformation et leur chargement vers des data warehouses ou data lakes. Les retries automatiques et le caching des résultats intermédiaires garantissent la robustesse des pipelines.

Machine Learning Operations (MLOps) : Prefect s'intègre naturellement dans les workflows ML pour orchestrer l'entraînement de modèles, la validation, le déploiement et le monitoring. Sa capacité à gérer des dépendances dynamiques est particulièrement utile lorsque les étapes varient selon les résultats intermédiaires (hyperparameter tuning, feature selection).

Automatisation d'infrastructure : au-delà des données, Prefect peut orchestrer des tâches DevOps comme le provisioning de ressources, les backups automatisés ou la synchronisation entre environnements. Son intégration avec les services Cloud (AWS, GCP, Azure) via les blocs facilite ces automatisations.

Event-driven workflows : grâce aux automations et webhooks, Prefect peut réagir à des événements externes : arrivée de nouveaux fichiers, webhooks d'applications tierces, ou alertes de monitoring. Cette réactivité permet de construire des architectures data modernes orientées événements.

Pour démarrer avec Prefect, l'installation se résume à un simple pip install prefect, et un flow peut être créé et exécuté en quelques minutes. La documentation exhaustive et les nombreux exemples fournis permettent une montée en compétence rapide, même pour les équipes découvrant l'orchestration de workflows.

Conclusion

Prefect s'est imposé comme une alternative moderne et élégante à Airflow pour l'orchestration de workflows Python. Sa philosophie code-first, sa simplicité d'adoption et sa flexibilité en font un choix privilégié pour les équipes souhaitant accélérer le développement de leurs pipelines sans sacrifier la robustesse en production.

En éliminant la complexité inhérente aux outils d'orchestration traditionnels, Prefect permet aux Data Engineers et aux équipes DevOps de se concentrer sur ce qui compte vraiment : la logique métier de leurs workflows. Que ce soit pour des pipelines ETL, des workflows ML ou de l'automatisation d'infrastructure, Prefect offre une plateforme mature et évolutive qui s'adapte aux besoins des architectures data modernes. Son adoption croissante et sa communauté active garantissent sa pertinence pour les années à venir.