首页 > 解决方案 > 在脚本中读取 Airflow REST API 传递的 conf

问题描述

您好,我正在尝试使用实验性 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 读取传递的参数?当前我看到工作被触发但没有读取参数。

标签: pythonairflowairflow-scheduler

解决方案


实验性 API 已在 Airflow 2 中弃用,并将在 Airflow 3 中删除。我衷心建议切换到 Airflow 2 并切换到成熟的 REST API,该 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 Summit 的讨论小组,了解为什么应该升级https://airflowsummit.org/sessions/2021/panel-airflow-security/


推荐阅读