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:
En inline dans le YAML ;
Avec des Namespace Files ;
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 !