通过API触发airflow的DAG任务

news/2024/10/8 6:20:29

背景

以前编写的DAG都是通过定时触发的,当前有一个场景需要通过手动提交API来触发,这样能够在用户需要的时候,主动触发执行任务,于是就有了这篇内容的摸索。
之前只知道airflow支持通过API来触发任务,但是具体如何操作是真不会,看了官方的API文档,也没找到具体方法,特别是认证这块一直没解决,最后查看了一些其他用户发表的文章,找到了点苗头,这里就简单做个记录。

完整请求代码结构

import requests
import base64
username = "test"
password = "test"auth_string = f"{username}:{password}"base64_auth_string = base64.b64encode(auth_string.encode()).decode()
print(base64_auth_string)
# url = 'http://x.x.x.x:8080/api/v1/dags/{dag_id}/dagRuns'
url = 'http://x.x.x.x:8080/api/v1/dags/25_PC_Repo_Sync/dagRuns'
headers = {'Cache-Control': 'no-cache','Content-Type': 'application/json','Authorization':f'Basic {base64_auth_string}'
}
data = {"conf": {},
}
response = requests.post(url, headers=headers, json=data)print(response.text)

可以看到整个请求所涉及到的东西其实非常少:

  • 请求地址:url = 'http://x.x.x.x:8080/api/v1/dags/{dag_id}/dagRuns' -- 这里关键就是dag_id这个参数,是你需要触发的dag的名称,如下,我的就是25_PC_Repo_Sync
    dag =  DAG('25_PC_Repo_Sync',description='同步仓库到PC设备',schedule_interval=None,start_date=datetime(2024, 5, 6),tags=['Rsync','PC_Repo_Sync']
    )
    
  • heardes构造中核心其实就是 'Authorization':f'Basic {base64_auth_string}' --这里就是认证的关键,后面再展开说一下这部分的构造过程。
  • 请求用的post方式
  • data部分也是需要的,构造一个空字典就行。

Authorization构造过程

参考官方文档
先将配置文件修改一下:airflow.cfg
在[api]模块中将enable_experimental_apiauth_backends设置成如下值

enable_experimental_api = Trueauth_backends= airflow.api.auth.backend.basic_auth

设置完成后记得重启服务

引用官方内容

基本身份验证

目前是基本的用户名密码身份验证 支持 API。这适用于通过 LDAP 登录或 在 Airflow 元数据数据库中使用密码。

若要启用基本身份验证,请在配置中设置以下内容:

[api]
auth_backends = airflow.api.auth.backend.basic_auth
用户名和密码需要进行 base64 编码,并通过 HTTP 标头按以下格式发送:AuthorizationAuthorization: Basic Base64(username:password)
下面是一个示例 curl 命令,可用于验证设置:ENDPOINT_URL="http://localhost:8080/"
curl -X GET  \--user "username:password" \"${ENDPOINT_URL}/api/v1/pools"

请注意,您仍然可以启用此设置以允许通过用户名进行 API 访问 密码凭据,即使 Airflow 网络服务器可能正在使用另一个 身份验证方法。在此设置下,只有通过 LDAP 或命令创建的用户才能通过 API 身份验证。airflow users create

通过上面这段内容,我们可以知道这里的Authorization 是使用用户名和密码然后通过base64编码得到的一个字符串。

存在的坑

直接将我之前创建的用户名和密码提供编码后,仍旧会提示我请求是401,也就是没有权限,最后通过命令重新创建新的用户,则可以达到目的。

创建新用户

airflow users create --username test --firstname admin --lastname admin --role Admin --email babyfengfjx@163.com --password test

通过上面的命令可以创建一个新用户test,密码也是test,角色是管理员,然后使用这个test:test去编码,具体过程上面代码中已经展现。

发送请求触发任务

通过上面的操作后,即可正常触发任务执行了。

接口返回的信息如下:

{"conf": {},"dag_id": "25_PC_Repo_Sync","dag_run_id": "manual__2024-05-06T07:00:53.063345+00:00","data_interval_end": "2024-05-06T07:00:53.063345+00:00","data_interval_start": "2024-05-06T07:00:53.063345+00:00","end_date": null,"execution_date": "2024-05-06T07:00:53.063345+00:00","external_trigger": true,"last_scheduling_decision": null,"logical_date": "2024-05-06T07:00:53.063345+00:00","note": null,"run_type": "manual","start_date": null,"state": "queued"
}

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28144.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

某塑料科技公司网络与机房监控运维项目

通过部署智和信通综合监控运维方案实时监控用户网络与机房内大量异构的交换机、路由器、服务器、AC/AP、数据库、防火墙、虚拟机、语音网关、硬盘录像机、行为管理等设备,及时发现并预警潜在问题,从而避免或减少故障带来的负面影响。 某塑料科技公司是由日本知名株式会…

ITIL4 服务价值系统(SVS):一场服务管理的革新之旅

在这个数字化时代,每一家企业都在追求高效的服务管理和卓越的客户体验。今天,我们就来聊一聊ITIL4中的服务价值系统(Service Value System, SVS)——一个让服务管理变得更加直观和高效的框架。 ITIL4服务价值系统:简明解读 SVS的核心理念非常朴素:一切始于客户需求,终于客…

[西湖论剑 2022]easy_api

源码审计 下载附件得war包,bandzip解压一下,审一下源码:这个没啥东西。反序列化入口,但是访问这里是需要绕过的:其实绕过也很简单,双斜杠就绕了:web.xml filter 绕过匹配访问(针对jetty)_jetty权限绕过-CSDN博客看lib里有啥依赖:fastjson1.2.48,这不老熟人了吗.....…

Linux 和 Windows11双系统安装

阅读目录 1.下载Linux系统 2. 制作Linux系统启动盘 3. 电脑分盘 4. 安装Ubuntu系统 5. 安装完成后可能遇到的黑屏问题解决 回到顶部 1.下载Linux系统 下载Linux系统的镜像文件,Linux系统有很多版本,Linux指的是系统内核,笔者下载的是Ubuntu系统,大家可以根据需要下载其他系…

深入解析CSS

层叠、优先级和继承 层叠层叠指的就是这一系列规则。 它决定了如何解决css样式规则冲突,是 CSS 语言的基础。 虽然有经验的开发人员对层叠有大体的了解,但是层叠里有些规则还是容易让人误解。当声明冲突时,层叠会依据三种条件解决冲突:样式表的来源:样式是从哪里来的,包括…

宝塔面板如何删除一个站点

我们一般的网站都是PHP+MySQL开发的,所以删除站点,就要先删数据库,再删网站目录 注意:一点要确保无用的再删 删除站点目录 十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR146260…

AnsysEM安装教程(Linux)

前期准备 解压相关安装文件 unzip Crack.zip将安装iso文件挂载到/mnt/AnsysEM目录下 sudo mkdir /mnt/AnsysEm sudo mount Ansys.Electronics.2021.R1.Linux64.iso /mnt/AnsysEM/ -o loop转到/mnt/AnsysEM/目录下,打开Readme文件查看安装步骤教程 创建AnsysEM安装目录 sudo mk…

百舸实践之「埋点数据深度治理与应用」 | 京东云技术团队

一、背景 随着公司和业务的不断发展,百舸平台也从单一内容投放转向了以流量和数据为基础的流量运营模式。在这个转变过程中,数据深度治理与应用的重要性尤为凸显,在数据深度治理过程中,需要将用户行为数据、投放素材以及投放效果三者紧密的串联起来。数据深度治理和应用,一…