读取 Airflow rest API 在脚本中传递了 conf

Reading Airflow rest API passed conf in script

您好,我正在尝试使用实验性 Airflow 休息 API。下面是我的 Dag 定义:

from airflow import DAG
from airflow.operators import BashOperator,PythonOperator
from datetime import datetime, timedelta

seven_days_ago = datetime.combine(datetime.today() - timedelta(7),
                                  datetime.min.time())

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': seven_days_ago,
    'email': ['airflow@airflow.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG('python_test', default_args=default_args)
t1 = BashOperator(
    task_id='testairflow',
    bash_command='python ${AIRFLOW_HOME}/dags/python_test.py',
    dag=dag)

下面是我的脚本,它只是读取传递的参数并打印它。


import argparse


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Argument... ')
    parser.add_argument('--env', metavar='path', required=True, default='dev', help='Execution Environment')
    parser.add_argument('--config_path', required=True, help='Custom config s3 path..')
    parser.add_argument('--data_lake_bucket', required=False, default="s3://dl_bucket")
    args = parser.parse_args()

    print("--------------------------------------")

    print(args.env)
    print(args.config_path)
    print(args.data_lake_bucket)


    print("--------------------------------------")

下面是我触发它的 curl 命令。

curl -X POST \
  http://localhost:8080/api/experimental/dags/python_test/dag_runs \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{"conf":"{\"--env\":\"dev\", \"--config_path\":\"this_is_conf\"}"}'

我想弄清楚如何在 python 脚本或任何其他作业中使用 -d 读取传递的参数?目前我看到作业正在被触发,但没有读取参数。

实验性 API 已在 Airflow 2 中弃用,并将在 Airflow 3 中删除。我衷心建议切换到 Airflow 2 并切换到成熟的 REST API,它已实现为Airflow 2 工作的一部分,提供了相当全面、结构良好、文档化的 REST API 以及您能想象到的所有功能。它是用 OpenAPI 规范构建的,它有 Swagger UI,身份验证支持,我们甚至生成了 Python 客户端来使用 API:https://github.com/apache/airflow-client-python.

而且它是“稳定的”并遵循 Airflow 2 SemVer 版本控制,因此只要您使用 Airflow 2,就可以保证向后兼容。

https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html

Airflow 1.10(如果您仍在使用它)已于 6 月 17 日终止使用,并且不会再收到任何修复(即使是关键修复)。事实上,Airflow 2 中已经有安全修复程序,但尚未(也不会)向后移植到 1.10,因此现在是升级的最佳时机。

您还可以观看 Airflow 峰会的讨论面板,了解为什么您应该升级 https://airflowsummit.org/sessions/2021/panel-airflow-security/