首页 > 其他分享 >通过API触发airflow的DAG任务

通过API触发airflow的DAG任务

时间:2024-05-06 15:56:27浏览次数:14  
标签:00 DAG airflow api base64 auth -- API

背景

以前编写的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 = True

auth_backends= airflow.api.auth.backend.basic_auth

设置完成后记得重启服务

引用官方内容

基本身份验证

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

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

[api]
auth_backends = airflow.api.auth.backend.basic_auth
用户名和密码需要进行 base64 编码,并通过 HTTP 标头按以下格式发送:Authorization

Authorization: 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 [email protected] --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

标签:00,DAG,airflow,api,base64,auth,--,API
From: https://www.cnblogs.com/babyfengfjx/p/18175142

相关文章

  • [西湖论剑 2022]easy_api
    源码审计下载附件得war包,bandzip解压一下,审一下源码:这个没啥东西。反序列化入口,但是访问这里是需要绕过的:其实绕过也很简单,双斜杠就绕了:web.xmlfilter绕过匹配访问(针对jetty)_jetty权限绕过-CSDN博客看lib里有啥依赖:fastjson1.2.48,这不老熟人了吗..... EXPfastjso......
  • 【详细教程】手把手教你开通YouTube官方API接口(youtube data api v3)
    一、背景调查1.1youtube介绍众所周知,youtube是目前全球最大的视频社交平台,该平台每天产生大量的视频内容,涵盖各种主题和类型,从音乐视频到教育内容,再到娱乐节目和新闻报道等。YouTube的用户群体也非常广泛,包括了各个年龄段、地区和兴趣爱好的人群。由于其庞大的用户基数和丰富的......
  • Camunda 整合SpringBoot基本Api
    代码实现:需要接口@AutowiredprivateRuntimeServiceruntimeService;@AutowiredprivateRepositoryServicerepositoryService;@AutowiredprivateTaskServicetaskService;发布流程:@GetMapping("/deploy")publicObjectdeploy(){......
  • Direct3D 11(D3D11)是Microsoft DirectX API 中的一部分,Direct3D 12(D3D12)是微软开发的一
    Direct3D11编程指南-Win32apps|MicrosoftLearn什么是Direct3D12-Win32apps|MicrosoftLearnDirect3D12编程指南-Win32apps|MicrosoftLearn你可以使用以下命令来查询系统是否支持D3D12:CopyCodedxdiag运行此命令将打开DirectX诊断工具,你可以在其中......
  • ollama + ollama web + fastapi app (langchain) demo
    ollama+ollamaweb+fastapiapp(langchain)demohttps://github.com/fanqingsong/ollama-dockerWelcometotheOllamaDockerComposeSetup!ThisprojectsimplifiesthedeploymentofOllamausingDockerCompose,makingiteasytorunOllamawithallitsd......
  • View Transitions API 使用
    ViewTransitionsAPI提供了一种机制,可以在更新DOM内容的同时,轻松地创建不同DOM状态之间的动画过渡,这是官方对他的描述,详情请看这里。下方创建好了<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="......
  • ffmpeg常用API笔记
    1.ffmpeg日志系统<libavutil/log.h>1)av_log_set_level(AV_LOG_DEBUG)2)av_log(NULL,AV_LOG_INFO,"fmt...",op) 2.<libavformat/avformat.h>操作目录:1)avio_open_dir()打开一个目录。结构体AVIODirContext,表示目录的上下文信息。//参数1:上下文;参数2:要访问的目录的ur......
  • webapi添加添加websocket中间件
    添加位置我按照MSDN的例子添加了一个复述客户端响应的中间件。需要注意的时,中间件采用那种方式添加,添加在哪。哪种方式我选择创建一条管道分支,只要时ws的连接请求,就转到这个分支因此,我们需要使用的是MapWhen()来创建管道分支。添加在哪要注意授权的问题,所以应该添加到授权......
  • webapi中间件没有使用终结点中间件时的注意事项
    最小webapi默认的中间件配置是这样的app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();最小webapi没有使用app.UseRouting()和app.UseEndpoints。这种情况下我们添加的所有中间件其实都是位于终结点路由中间件EndpointRoutingMiddleware......
  • simpread-课程 28:API 接口请求日志【后端】
    1、添加审核日志实体1.1实体定义在项目Electric.Entity,添加文件夹:AuditLogs,并添加类:EleAuditLog。EleAuditLog完整代码如下:namespaceElectric.Entity.AuditLogs;///<summary>///审核日志///</summary>[Index(nameof(AuditLogType))]publicclassEleAuditLog:E......