【Airflow】Apache Airflow ~ CLI ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/10/10/000000

でリトライ(Re-run)を扱ったが、その調査の過程で、
以下のサイト

https://blog.imind.jp/entry/2019/02/22/000049

などで コマンド(CLI; Command Line Interface)からでも、
タスクをクリアするとか色々できることをした。

そんなことを含めて、CLIについて、まとめておく。

 また、今回のブログを書いていて思ったのだが、
上記のサイトだとAirflow v1がベースなようだが
今回は、MWAA(v2.0.2)に合わせて、v2ベースで書いていく。

Airflow v1とv2だとCLIの構文が異なっている模様。
v3 も出るらしいし、この記事もすぐに古くなっていくな、、、

目次

【0】Airflowの CLI
 1)API仕様
 2)基本的な構文
 補足:MWAAにおける CLI
【1】cheat-sheet / help
 1)cheat-sheet
 2)help
【2】dag
 1)backfill
 2)pause
 3)unpause
【3】tasks
 1)clear
 2)run
【4】connections
 1)add
 2)list
【5】variables
 1)import
【6】airflow CLI あれこれ
 1)DAGから airflow CLIを実行するには

【0】Airflowの CLI

1)API仕様

* 公式サイトは、以下。

v2.0.2
https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html
最新版(stable)
https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html

2)基本的な構文

airflow [-h] GROUP_OR_COMMAND ...

# GROUP_OR_COMMAND : 「tasks」「users」や「add」「delete」など

補足:MWAAにおける CLI

Amazon MWAA(Managed Workflows for Apache Airflow) だと
若干異なることもあるようなので、メモ。(必要だったら、別記事で扱うかも)

* 使用できないコマンドとかあるらしい

https://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/airflow-cli-command-reference.html

* 実行するのに、トークンの発行とかもあるみたい

https://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/call-mwaa-apis-cli.html

【1】cheat-sheet / help

1)cheat-sheet

* help 的なコマンド
 => コマンドをど忘れた際に、、、

コマンド例

airflow cheat-sheet

以下、出力結果
Miscellaneous commands
airflow cheat-sheet                       | Display cheat sheet
・・・略・・・
airflow version                           | Show the version
・・・略・・・

2)Help

コマンド例

airflow connections add -h

以下、出力結果
usage: airflow connections add [-h] [--conn-description CONN_DESCRIPTION]
・・・略・・・

【2】dag

* DAGをコントロールするコマンド

基本的な構文
https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html#dags

airflow dags [-h] COMMAND ...

# COMMAND : 
# backfill, delete, list, list-jobs, list-runs, next-execution, pause, report, show,
# state, test, trigger, unpause

1)backfill

https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html#backfill

Run subsections of a DAG for a specified date range.
指定された日付範囲におけるサブセクションのDAGを実行する

If reset_dag_run option is used,
 backfill will first prompt users whether airflow should clear all the previous dag_run and task_instances
 within the backfill date range.
もし、reset_dag_run オプションを使った場合
backfill は、そのbackfill が指定された日付範囲内で、
airflow が全ての前回のdag_run とtask_instancesをクリアするかどうかを
ユーザに促します

If rerun_failed_tasks is used,
 backfill will auto re-run the previous failed task instances within the backfill date range
もし、rerun_failed_tasks オプションを使った場合
backfill は、そのbackfill が指定された日付範囲内で、
自動的に前回エラーになったタスクインスタンスを再実行します。

構文

airflow dags backfill
 [-h] [-c CONF] [--delay-on-limit DELAY_ON_LIMIT] [-x]
 [-n] [-e END_DATE] [-i] [-I] [-l] [-m] [--pool POOL]
 [--rerun-failed-tasks] [--reset-dagruns] [-B]
 [-s START_DATE] [-S SUBDIR] [-t TASK_REGEX] [-v] [-y]
 dag_id

2)pause

* DAG の一時停止

構文

airflow dags pause [-h] [-S SUBDIR] dag_id

3)unpause

* DAG の再開

構文

airflow dags unpause [-h] [-S SUBDIR] dag_id

【3】tasks

* タスクをコントロールするコマンド

基本的な構文
https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html#tasks

airflow tasks [-h] COMMAND ...

# COMMAND : 
#  clear, failed-deps, list, render, run, state, states-for-dag-run, test

1)clear

* タスクのクリア

構文
https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html#clear

airflow tasks clear
 [-h] [-R] [-d] [-e END_DATE] [-X] [-x] [-f] [-r]
 [-s START_DATE] [-S SUBDIR] [-t TASK_REGEX] [-u] [-y]
 dag_id

コマンド例

# -s  START_DATE : Override start_date YYYY-MM-DD
# -t TASK_REGEX : The regex to filter specific task_ids to backfill (optional)
# -d : Include downstream tasks
# -y : Do not prompt to confirm reset. Use with care! (defalut: False)

airflow tasks clear -s 2021-10-21 -t task1 -d -y clear_upstream_task

2)run

* タスクの実行

構文
https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html#run

airflow tasks run
 [-h] [--cfg-path CFG_PATH] [--error-file ERROR_FILE] [-f]
 [-A] [-i] [-I] [-N] [-l] [-m] [-p PICKLE] [--pool POOL]
 [--ship-dag] [-S SUBDIR]
 dag_id task_id execution_date

【4】connections

* Airflow の connections を管理するコマンド
* connections については、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2021/10/16/000454

基本的な構文

airflow connections [-h] COMMAND ...

# COMMAND: 
#  add, delete, export, get, list

1)add

構文

airflow connections add
 [-h] [--conn-description CONN_DESCRIPTION]
 [--conn-extra CONN_EXTRA] [--conn-host CONN_HOST]
 [--conn-login CONN_LOGIN]
 [--conn-password CONN_PASSWORD]
 [--conn-port CONN_PORT] [--conn-schema CONN_SCHEMA]
 [--conn-type CONN_TYPE] [--conn-uri CONN_URI]
 conn_id

コマンド例

airflow connections add --conn-type http --conn-host https://hooks.slack.com/services --conn-extra {"webhook_token":"/A00000000/B111111/XXXXXXXXXXXXXXXXXXXXXXXX"} slack_webhook_demo

2)list

コマンド例

airflow connections list

【5】variables

* Airflow の connections を管理するコマンド
* connections については、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2021/10/16/000454

基本的な構文

airflow variables [-h] COMMAND ...

# COMMAND: 
#  delete, export, get, import, list, set

注意点

* add がない
 => 逆に、connections は import がない!!!??

1)import

* JSON形式のファイルでインポートするコマンド

https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html#import_repeat2
構文

airflow variables import [-h] file

【6】airflow CLI あれこれ

1)DAGから airflow CLIを実行するには

* 以下のサイトにあるように「BashOperator」を使えば可能。
 => 因みに、このサンプルをMWAA(v2.0.2)上で実行したら、
  無限ループした。。。(同等のことをやりたい場合、制御が必要)

https://stackoverflow.com/questions/43270820/how-to-restart-a-failed-task-on-airflow

使用イメージ

from airflow.operators.bash_operator import BashOperator

def on_failure(context):
    # ★ここ★
    sample_job = BashOperator(
        task_id='sample_job',
        bash_command='airflow cheat-sheet'
    )
    return sample_job.execute(context=context)

# ・・・略・・・

    job1= BashOperator(
        task_id='job1',
        bash_command='exit 1',
        on_failure_callback=on_failure
    )

    job1

参考文献

https://blog.imind.jp/entry/2019/04/22/184759

関連記事

Apache Airflow ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/09/28/135510
Apache Airflow ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/07/18/004531
Apache Airflow ~ 環境構築 / Docker 編 ~
https://dk521123.hatenablog.com/entry/2021/10/11/134840
Apache Airflow ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/07/24/233012
Apache Airflow ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/07/28/234319
Apache Airflow ~ リトライ ~
https://dk521123.hatenablog.com/entry/2021/10/10/000000
Apache Airflow ~ タイムアウト
https://dk521123.hatenablog.com/entry/2021/10/12/000000
Apache Airflow ~ 同時実行 / 並列関連 ~
https://dk521123.hatenablog.com/entry/2021/10/19/144148
Apache Airflow ~ Variable / Connection ~
https://dk521123.hatenablog.com/entry/2021/10/16/000454
Apache Airflow ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2021/09/30/163020
Apache Airflow ~ 通知あれこれ編 ~
https://dk521123.hatenablog.com/entry/2021/10/06/141323
Apache Airflow ~ 通知サンプル編 ~
https://dk521123.hatenablog.com/entry/2021/10/09/000000
Apache Airflow に関するトラブル
https://dk521123.hatenablog.com/entry/2021/10/03/000000
MWAA ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/09/29/131101
Docker ~ 基本編 / dockerコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000