web-dev-qa-db-ja.com

Webrequestに基づいたAirflowでのジョブの実行

HTTP経由でリクエストを取得したときに、気流タスクを実行できるかどうかを知りたかった。 Airflowのスケジューリング部分には興味がありません。セロリの代わりに使いたいだけです。

したがって、操作例は次のようになります。

  1. ユーザーが何らかのレポートを要求するフォームを送信します。
  2. バックエンドはリクエストを受信し、リクエストを受信したという通知をユーザーに送信します。
  3. バックエンドは、Airflowを使用してジョブをスケジュールし、すぐに実行します。
  4. その後、AirflowはDAGに関連付けられた一連のタスクを実行します。たとえば、最初にredshiftからデータをプルし、MySQLからデータをプルし、2つの結果セットでいくつかの操作を行い、それらを結合してから結果をAmazon S3にアップロードして、Eメールを送信します。

私がオンラインで読んだものなら何でも、airflow ...コマンドラインで。同じことを実行できるpython apiがあるかどうか疑問に思っていました。

ありがとう。

18

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');
        }
    });
}
16
Jeremy Farrell

気流の新しいオプションは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の下にいくつかの簡単なサンプルクライアントもあります。

10
apathyman

Airflow HTTP Sensor を確認してください。これを使用して、ダグをトリガーできます。

6
nehiljain

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.cfgTrueに設定します。

使用可能なAPIのリストは次のとおりです: herethere

2
Arnab Biswas