Je voulais savoir si les tâches de flux d'air peuvent être exécutées lors de l'obtention d'une demande via HTTP. Je ne suis pas intéressé par la partie planification de Airflow. Je veux juste l'utiliser comme substitut du céleri.
Donc, un exemple d'opération serait quelque chose comme ça.
D'après ce que j'ai lu en ligne, vous pouvez exécuter des tâches de flux d'air en exécutant airflow ...
sur la ligne de commande. Je me demandais s'il y avait une API Python capable d'exécuter la même chose.
Merci.
Le plugin API Airflow REST vous aiderait ici. Une fois que vous avez suivi les instructions pour installer le plug-in, il vous suffit de cliquer sur l’URL suivante: http://{Host}:{PORT}/admin/rest_api/api/v1.0/trigger_dag?dag_id={dag_id}&run_id={run_id}&conf={url_encoded_json_parameters}
, en remplaçant dag_id par l’id de votre dag, soit en omettant run_id, soit en spécifiant un identifiant unique, et en transmettant un json codé pour url pour conf (avec l'un des paramètres dont vous avez besoin dans le dag déclenché).
Voici un exemple de fonction JavaScript qui utilise jQuery pour appeler l'API Airflow:
function triggerDag(dagId, dagParameters){
var urlEncodedParameters = encodeURIComponent(dagParameters);
var dagRunUrl = "http://airflow:8080/admin/rest_api/api/v1.0/trigger_dag?dag_id="+dagId+"&conf="+urlEncodedParameters;
$.ajax({
url: dagRunUrl,
dataType: "json",
success: function(msg) {
console.log('Successfully started the dag');
},
error: function(e){
console.log('Failed to start the dag');
}
});
}
Une nouvelle option dans airflow est le point de terminaison API experimental, mais intégré, dans les versions plus récentes de 1.7 et 1.8. Cela vous permet d'exécuter un service REST sur votre serveur de flux d'air pour écouter un port et accepter les travaux de la CLI.
Je n’ai moi-même qu’une expérience limitée, mais j’ai testé avec succès des dags. Selon les documents:
/api/experimental/dags/<DAG_ID>/dag_runs
crée un dag_run pour un ID de diagnostic donné (POST).
Cela planifiera une exécution immédiate de tout ce que vous voulez exécuter. Cependant, il utilise toujours le planificateur, attendant une pulsation pour voir que dag est en cours d'exécution et pour passer des tâches à l'agent. Toutefois, il s’agit exactement du même comportement que l’interface de ligne de commande. Je pense donc que cela correspond à votre cas d’utilisation.
La documentation sur sa configuration est disponible ici: https://airflow.Apache.org/api.html
Il existe également quelques exemples de clients simples dans le github, sous airflow/api/clients
Vous devriez regarder Airflow HTTP Sensor pour vos besoins. Vous pouvez l'utiliser pour déclencher un dag.
L'interface API expérimentale REST d'Airflow peut être utilisée à cette fin.
La demande suivante déclenchera un DAG:
curl -X POST \
http://<Host>:8080/api/experimental/dags/process_data/dag_runs \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{"conf":"{\"START_DATE\":\"2018-06-01 03:00:00\", \"STOP_DATE\":\"2018-06-01 23:00:00\"}'
Suite à la requête récupère une liste de Dag Runs pour un ID DAG spécifique:
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://<Host>:8080/api/experimental/dags/process_data/dag_runs
Pour que l'API GET fonctionne, définissez l'indicateur rbac
sur True
à airflow.cfg
.