HTTP経由でリクエストを取得したときに、気流タスクを実行できるかどうかを知りたかった。 Airflowのスケジューリング部分には興味がありません。セロリの代わりに使いたいだけです。
したがって、操作例は次のようになります。
私がオンラインで読んだものなら何でも、airflow ...
コマンドラインで。同じことを実行できるpython apiがあるかどうか疑問に思っていました。
ありがとう。
Airflow REST APIプラグイン は、ここで役立ちます。プラグインをインストールするための指示に従えば、次のURLにアクセスする必要があります:http://{Host}:{PORT}/admin/rest_api/api/v1.0/trigger_dag?dag_id={dag_id}&run_id={run_id}&conf={url_encoded_json_parameters}
、dag_idをdagのidに置き換え、run_idを省略するか、一意のidを指定し、confにURLエンコードされたjsonを(トリガーされたdagに必要なパラメーターとともに)渡します。
JQueryを使用してAirflow APIを呼び出すJavaScript関数の例を次に示します。
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');
}
});
}
気流の新しいオプションはexperimentalですが、1.7および1.8のより新しいビルドの組み込みのAPIエンドポイントです。これにより、RESTサービスをエアフローサーバーで実行して、ポートをリッスンし、cliジョブを受け入れることができます。
経験は限られていますが、テストダグを実行して成功しています。ドキュメントごと:
/api/experimental/dags/<DAG_ID>/dag_runs
は、指定されたdag id(POST)のdag_runを作成します。
これにより、実行したいDAGの即時実行がスケジュールされます。ただし、DAGが実行されていることを確認し、タスクをワーカーに渡すためにハートビートを待機するスケジューラは引き続き使用されます。ただし、これはCLIとまったく同じ動作であるため、ユースケースに適合すると考えています。
設定方法のドキュメントはこちらから入手できます。 https://airflow.Apache.org/api.html
Githubには、airflow/api/clientsの下にいくつかの簡単なサンプルクライアントもあります。
Airflow HTTP Sensor を確認してください。これを使用して、ダグをトリガーできます。
Airflowの実験的なREST APIインターフェースは、この目的に使用できます。
次のリクエストは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\"}'
次のリクエストは、特定のDAG IDのDag Runのリストを取得します。
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://<Host>:8080/api/experimental/dags/process_data/dag_runs
GET APIが機能するには、rbac
フラグをairflow.cfg
でTrue
に設定します。