🎯 Situation

Une analyste data chez un client logistique a construit un solide script Python sur trois semaines : il récupérait les données d'expédition quotidiennes depuis une API, les nettoyait avec pandas, et les chargeait dans Azure SQL. Le script fonctionnait parfaitement. Elle le lançait manuellement chaque matin à 7h depuis son laptop. Quand elle était en vacances, les données s'arrêtaient. Quand son laptop était en réparation, le dashboard Power BI montrait une semaine de vides. Le script était bon. Le déploiement ne l'était pas.

👉 Un script qui tourne manuellement est un prototype. Un script qui tourne selon un planning, journalise sa sortie, alerte en cas d'échec, et ne dépend pas d'un laptop spécifique est un pipeline. Le code est le même. Le déploiement fait la différence.

⚠️ Challenge

📋 Options 1 & 2 : planification locale

  • Planificateur de tâches Windows — clic droit sur votre script → Créer une tâche → Déclencheurs → quotidiennement à 7h. Fonctionne tant que la machine est allumée. Coût zéro.
  • cron macOS/Linux — ajouter : 0 7 * * * /usr/bin/python3 /chemin/vers/script.py dans crontab. Même limitation : nécessite que la machine tourne.
  • Approprié pour : scripts personnels, machines de développement, données peu critiques qui tolèrent des exécutions ratées occasionnelles.
  • Pas approprié pour : pipelines en production où Power BI dépend des données être à jour chaque matin.

⛅ Options 3 & 4 : planification cloud — niveau production

  • Azure Functions (plan Consommation) — déployer votre script Python comme une Function, définir un déclencheur Timer (syntaxe cron), tourne dans le cloud selon le planning sans dépendre d'un laptop. Coût : ~0,20 $/mois pour des exécutions quotidiennes.
  • Azure Data Factory (ADF) — orchestration de pipeline avec une activité Python. Plus complexe à configurer, mais inclut la gestion des dépendances, la logique de réessai et la surveillance intégrées. Approprié pour les pipelines multi-étapes.
  • GitHub Actions — gratuit pour les dépôts publics, 0 $/mois pour 2 000 minutes/mois sur les dépôts privés. Planifier un workflow pour tirer votre dépôt et exécuter le script. Les logs sont automatiques. Bon compromis entre local et Azure complet.

🔍 Analyse

Les trois exigences de production pour tout script planifié :

  • Logging — écrire la sortie de chaque exécution dans un fichier ou une base de données : heure de début, heure de fin, lignes traitées, erreurs. Si quelque chose se casse, il faut savoir ce qui s'est passé et quand.
  • Alertes d'erreur — si le script échoue, un email ou une notification Teams part immédiatement. Pas le lendemain matin quand quelqu'un remarque que le dashboard est vide.
  • Idempotence — si le script tourne deux fois (ex. une reprise après un échec), il doit produire le bon résultat, pas insérer les données en double. Utiliser UPSERT (INSERT ... ON CONFLICT UPDATE) ou des patterns de tronquage-puis-rechargement.

✓️ Bonne pratique

L'enveloppe de production minimale pour tout script Python de pipeline :

import logging, sys
from datetime import datetime

logging.basicConfig(
    filename='pipeline.log',
    level=logging.INFO,
    format='%(asctime)s %(levelname)s %(message)s'
)

def run_pipeline():
    logging.info("Pipeline started")
    try:
        # --- your pipeline code here ---
        rows = extract_from_api()
        cleaned = transform(rows)
        load_to_sql(cleaned)
        logging.info(f"Success: {len(cleaned)} rows loaded")
    except Exception as e:
        logging.error(f"Pipeline failed: {e}")
        send_alert(str(e))  # Teams / email notification
        sys.exit(1)

if __name__ == "__main__":
    run_pipeline()

💡 Synthèse

La planification est les 10 % finaux de la construction d'un pipeline — et la partie qui détermine si ça fonctionne vraiment en production. Un script lancé manuellement est une dépendance : il dépend d'une personne, d'un laptop, et d'une routine. Un script planifié, avec logs et alertes est une infrastructure.

👉 Le script est terminé quand il tourne tout seul.

Logs, alertes, planification — c'est les 20 % qui rendent les 80 % fiables.