python - 在脚本中读取 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 读取传递的参数?当前我看到工作被触发但没有读取参数。
解决方案
实验性 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/
推荐阅读
- opengl - 如何使用鼠标拖动事件 OpenGL(带透视投影)添加场景平移?
- ios - 锁定 iOS 设备时与 chromecast 断开连接
- selenium - 我在 selenium 中执行多个类,但无法在另一个类中找到驱动程序
- c# - 在应用程序内部和通过外部应用程序调用 api 返回不同的结果
- c# - 实体框架嵌套查询 Select() 问题
- openstack - 如何登录部署在 Openstack 基础架构上的 ubuntu-cloud 实例
- sql - 如何从 Oracle LISTAGG 聚合查询的结果中消除重复值
- windows - CIS中“No One”的定义是什么,Windows系统的SID选择
- python - Tkinter + matplot 动画填充内存
- javascript - 如何使用node.js在mongodb中获取按组名分组的聚合值?