• 6 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 03/12/2024

Exécutez des scripts

Dans la première partie du cours, nous avons discuté de la possibilité d'exécuter des scripts avec Kestra, peu importe le langage de programmation utilisé.

Lancez des scripts

Il est possible de lancer des scripts avec Kestra de trois manières différentes:

  1. En inline dans le YAML ;

  2. Avec des Namespace Files ;

  3. En clonant un répertoire distant.

Un point commun à chacune de ces méthodes est la notion de taskRunner. La propriété taskRunner d’une tâche de scripts permet de spécifier sur quel moteur de compute l’exécution du script va se faire. Par défaut, il s’agit de Docker, mais vous pouvez choisir d’autres types de taskRunners si besoin.

Écrivez le script dans le YAML directement

La première façon d'écrire des scripts dans Kestra est d'utiliser le scripting inline.

Voici un simple script Python "Hello World!" dans Kestra :

id: hello_world_python
namespace: open_class_room.kestra
tasks:
  - id: print
    type: io.kestra.plugin.scripts.python.Script
    script: |
      print("Hello World!")

Les tâches de scripting ont également plusieurs autres propriétés telles que :

  • beforeCommands : pratique pour exécuter une commande avant l'instruction principale. Par exemple, installer des dépendances.

  • containerImage : utile pour fournir votre propre image Docker.

  • inputFiles etoutputFiles : ces deux propriétés permettent de passer des fichiers provenant d'une tâche en amont vers le contexte de votre script. De la même manière,outputFiles permet d'amener les fichiers créés par votre script à être utilisé par une tâche en aval via le contexte d’outputs classique.

id: api_python_sql
namespace: open_class_room.kestra

tasks:
  - id: api
    type: io.kestra.plugin.core.http.Request
    uri: https://dummyjson.com/products

  - id: python
    type: io.kestra.plugin.scripts.python.Script
    containerImage: python:slim
    beforeCommands:
      - pip install polars
    outputFiles:
      - products.csv
    warningOnStdErr: false
    script: |
      import polars as pl
      data = {{ outputs.api.body | jq('.products') | first }}
      df = pl.from_dicts(data)
      df.glimpse()
      df.select(["brand", "price"]).write_csv("products.csv")

  - id: sql_query
    type: io.kestra.plugin.jdbc.duckdb.Query
    inputFiles:
      in.csv: "{{ outputs.python.outputFiles['products.csv'] }}"
    sql: |
      SELECT brand, round(avg(price), 2) as avg_price
      FROM read_csv_auto('{{ workingDir }}/in.csv', header=True)
      GROUP BY brand
      ORDER BY avg_price DESC;
    store: true

Découvrez maintenant comment insérer un script Python dans un flux Kestra.

Écrivez le script dans un NamespaceFiles

Les Namespace Files sont des fichiers associés à un namespace spécifique. Vous pouvez les considérer comme l'équivalent d'un projet dans votre IDE local ou d'une copie de votre dépôt Git. Les Namespace Files peuvent contenir des modules Python, des scripts R ou Node.js, des requêtes SQL, des fichiers de configuration, etc. Avec les Namespace Files, vous pouvez stocker votre code et vos fichiers de configuration directement dans le stockage interne de Kestra.

Les Namespace Files facilitent :

  • L'orchestration de Python, R, Node.js, SQL, et plus encore, sans se soucier des dépendances de code et des déploiements — ajoutez simplement votre code dans l'éditeur de code intégré ou synchronisez votre dépôt Git avec un namespace donné.

  • La gestion de votre code pour un projet ou une équipe donné en un seul endroit, même si ces fichiers sont stockés dans différents dépôts Git, ou même différents fournisseurs Git.

  • Le partage de votre code et de vos fichiers de configuration entre les workflows et les membres de votre équipe au sein de votre organisation. L'orchestration de projets complexes nécessitant la séparation du code en plusieurs scripts, requêtes ou modules.

Clonez des scripts depuis un répertoire Git distant

Grâce à la tâche Git.Clone, il est possible de cloner directement des scripts provenant d'un dépôt Git externe lors de l'exécution d'un flux. Cette tâche est souvent intégrée dans une tâcheWorkingDirectory, permettant de partager un répertoire de travail commun entre ses tâches. Par conséquent, vous pouvez utiliser les fichiers du dépôt dans les tâches en aval. C'est une très bonne façon de découpler Kestra de vos scripts qui contiennent généralement votre logique métier.

id: git_python
namespace: open_class_room.kestra

tasks:
  - id: python_scripts
    type: io.kestra.plugin.core.flow.WorkingDirectory
    tasks:
      - id: clone_repository
        type: io.kestra.plugin.git.Clone
        url: https://github.com/kestra-io/scripts
        branch: main
      
      - id: python
        type: io.kestra.plugin.scripts.python.Commands
        warningOnStdErr: false
        taskRunner:
          type: io.kestra.plugin.scripts.runner.docker.Docker
        containerImage: ghcr.io/kestra-io/pydata:latest
        commands:
          - python etl/global_power_plant.py

En résumé

  • Kestra permet de lancer des scripts écrits dans n’importe quel langage de programmation.

  • Vous pouvez insérer les scripts de 3 façons différentes : inline, avec les Namespace Files ou en clonant un projet Git externe.

  • Plusieurs propriétés sont disponibles pour renseigner les dépendances de fichiers, l’image Docker ou même le moteur d’exécution.

Après les scripts, regardons certaines des tâches avancées offertes par Kestra !

Exemple de certificat de réussite
Exemple de certificat de réussite