Workflow Automation

Kestra : L'approche moderne et code-first pour l'orchestration de workflows

Dans le paysage en rapide évolution de l'ingénierie des données et du DevOps, l'orchestration de workflows est devenue un composant critique de toute pile technique robuste. Alors que des géants comme Apache Airflow et Prefect dominent les discussions, un nouveau joueur fait sensation grâce à sa conception centrée sur le développeur et sa simplicité : Kestra. Kestra est une plateforme universelle d'orchestration et de planification qui permet aux développeurs de définir les workflows comme du code. Contrairement aux outils traditionnels qui reposent lourdement sur des représentations complexes de DAG (Directed Acyclic Graph) en Python ou en Java, Kestra utilise le YAML pour les définitions de workflow. Cette approche offre un mélange unique d'accessibilité pour les analystes de données et de puissance pour les ingénieurs logiciels.

Pourquoi choisir Kestra ?

Le principal différenciateur de Kestra est sa philosophie de « l'infrastructure en tant que code » appliquée aux workflows de données. En définissant l'intégralité de votre pipeline dans un seul fichier YAML, vous obtenez plusieurs avantages clés : 1. **Simplicité et lisibilité** : Le YAML est lisible par les humains. Un job ETL complexe peut être compris en un coup d'œil, réduisant la charge cognitive lors de l'intégration ou du débogage. 2. **Intégration native** : Kestra se connecte nativement à des centaines d'outils, notamment PostgreSQL, Kafka, Slack, S3 et AWS, réduisant ainsi le besoin de code boilerplate personnalisé. 3. **Reproductibilité** : Puisque le workflow est du code, il peut être versionné, testé et déployé via des pipelines CI/CD comme n'importe quelle autre application. 4. **Pas de verrouillage fournisseur** : Kestra est open-source, vous permettant de l'héberger vous-même sur n'importe quelle infrastructure, des environnements Docker locaux aux clusters Kubernetes.

Concepts clés : Tâches et Flux

Dans Kestra, tout tourne autour du concept de Flux (Flow). Un flux est un ensemble de tâches exécutées dans un ordre spécifique. Les tâches sont les unités atomiques de travail, telles que l'exécution d'une requête SQL, la copie d'un fichier ou le déclenchement d'une API. Contrairement à Airflow, où vous définissez les tâches en Python et les liez avec des opérateurs logiques, Kestra vous permet de définir l'ordre d'exécution directement dans la structure YAML. Cette approche déclarative minimise les erreurs et rend le chemin d'exécution explicite.

Pour commencer : Un exemple pratique

Regardons un exemple pratique. Imaginez un job ETL simple qui extrait des données d'un fichier CSV, les transforme à l'aide d'une requête SQL et charge le résultat dans une base de données PostgreSQL. Voici comment vous définiriez cela dans Kestra :
id: simple_etl
namespace: com.example

tasks:
  - id: extract
    type: io.kestra.plugin.csv.Extract
    resource: "s3://my-bucket/data/input.csv"

  - id: transform
    type: io.kestra.plugin.jdbc.postgresql.Query
    sql: |
      SELECT 
        customer_id, 
        SUM(order_amount) as total_spent
      FROM raw_data
      GROUP BY customer_id
    
  - id: load
    type: io.kestra.plugin.jdbc.postgresql.Insert
    table: monthly_sales_summary
    from: "{{ outputs.transform.outputs }}"

  - id: notify
    type: io.kestra.plugin.slack.SlackWebhook
    title: "ETL Job Completed"
    channel: "#data-alerts"
    text: "Successfully loaded data into {{ flow.namespace }}.{{ flow.id }}"
Dans cet extrait : - La tâche extract récupère les données depuis un bucket S3. - La tâche transform exécute une requête d'agrégation SQL contre votre instance PostgreSQL. - La tâche load prend la sortie de la tâche de transformation et l'insère dans une table de résumé. Notez l'utilisation d'expressions de modèle ({{ outputs.transform.outputs }}) pour transmettre les données entre les tâches de manière transparente. - Enfin, la tâche notify envoie une notification Slack une fois l'exécution terminée.

Intégration avec CI/CD

L'une des fonctionnalités les plus puissantes de Kestra est sa capacité à s'intégrer à vos pipelines CI/CD existants. Puisque vos workflows sont stockés sous forme de fichiers YAML dans votre dépôt Git, vous pouvez déclencher des déploiements automatiquement lorsque des modifications sont poussées. Par exemple, vous pouvez utiliser une GitHub Action pour valider la syntaxe de votre YAML et déployer le flux vers votre instance Kestra :
name: Deploy Kestra Flows
on:
  push:
    paths:
      - 'kestra/**'

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Deploy to Kestra
        run: |
          curl -X POST https://kestra.example.com/api/v1/executions/run \
            -H "Authorization: Bearer ${{ secrets.KESTRA_TOKEN }}" \
            -F "flowId=simple_etl" \
            -F "namespace=com.example"

Conclusion

Kestra représente un changement vers une orchestration de workflows plus simple et plus transparente. Pour les équipes fatiguées de la complexité associée aux outils traditionnels basés sur les DAG, Kestra offre une alternative rafraîchissante. Son approche code-first, combinée à un riche écosystème de plugins, en fait un excellent choix pour les pratiques modernes d'ingénierie des données et du DevOps. Que vous orchestreriez un job ETL simple ou un pipeline de données multi-cloud complexe, Kestra offre la flexibilité et la puissance nécessaires pour le gérer efficacement. Essayez-le en lançant une instance locale avec Docker et voyez comment il transforme votre stratégie de gestion des workflows.
Share: