|

Utiliser PHP avec Airflow

Je travaille actuellement sur un projet orienté BI pour lequel des scripts d’analyse et de visualisation de données sont écrits en Python et sont orchestrés par Apache Airflow. Airflow est un outil Python, initialement conçu et pensé pour l’écosystème Python. Mais travaillant essentiellement en PHP, je me suis demandé s’il était possible d’y faire tourner des scripts PHP.

🇻🇬 This blog post is also available in English.

En parcourant la documentation d’Airflow, on peut se rendre compte que l’outil permet bien plus que d’exécuter des scripts Python. Si Python y est fortement intégré, en réalité, Airflow est capable d’exécuter n’importe quelle commande d’un terminal. Il est donc possible d’orchestrer tout type de script, et donc du PHP.

Les tâches (appelées DAG pour Directed Acyclic Graph) Airflow sont lancées au travers d’opérateur. Parmi ceux disponibles, l’opérateur BashOperator permet d’exécuter une commande dans un worker Airflow sur lequel serait présent PHP et le script à lancer.

Prenons par exemple le script PHP suivant:

<?php

echo "Hello from PHP script!\n";
echo "Execution time: " . date('Y-m-d H:i:s') . "\n";

La création d’un DAG passe par l’écriture du script Python (c’est le seul moment où ce denier est nécessaire). La mise en place de notre tâche PHP pourrait se faire ainsi:

from airflow import DAG
from airflow.providers.standard.operators.bash import BashOperator
from datetime import datetime

with DAG(
    dag_id="run_php_script",
    description="A DAG that runs a PHP script",
    schedule=None,
    start_date=datetime(2024, 1, 1),
    catchup=False,
    tags=["php"],
) as dag:

    run_php_script = BashOperator(
        task_id="run_php_script",
        bash_command="php /path/to/scripts/hello.php",
    )

Avec ce simple code Python, Airflow déclenche notre script PHP (qui lui peut être bien plus complexe). Les sorties standard et d’erreur sont automatiquement capturées dans les logs Airflow. On peut également bénéficier de toute la mécanique de retry, de monitoring et d’alerting Airflow.

Si vous désirez tester par vous même, vous trouverez tout le nécessaire dans ce dépôt pour démarrer un environnement Airflow avec tout le nécessaire.

Jérémy DECOOL

Jérémy DECOOL

Développeur depuis plus d'une décennie, je partage mes réflexions sur les bonnes pratiques de développement, d'architecture logicielle et d'organisation d'équipe.