使用Apache Airflow连接Azure Blob失败:client_id错误排查与ADLS传感器创建
问题描述
我在Airflow中创建了一个用于检测Azure Blob存储(ADLS)中文件是否存在的DAG传感器任务,但反复报错:
ValueError: client_id should be the id of a Microsoft Entra application
我已安装所需依赖包apache-airflow-providers-microsoft-azure==12.7.0,并创建了包含以下配置的Azure Blob连接:
{"account_name": "source","tenant_id": "<service principal的tenant_id>","client_id": "<service principal的client_id>","client_secret": "***"}
但执行以下代码仍触发相同错误:
from airflow.sdk import dag, task from airflow.providers.microsoft.azure.sensors.wasb import WasbBlobSensor from datetime import datetime, timedelta default_args = {"owner": "airflow","retries": 6,"retry_delay": timedelta(seconds=30)} @dag(dag_id="azure_blob_sensor_dag",default_args=default_args,start_date=datetime(2025, 10, 13),schedule=None,catchup=False,tags=["azure", "sensor"]) def sensor_dag(): wait_for_blob = WasbBlobSensor( wasb_conn_id="azure_blob_connection", container_name="source", blob_name="citizens/citizens.csv", poke_interval=30, timeout=5 * 60 ) @task def task_action(): print("File is present in ADLS") wait_for_blob >> task_action() sensor_dag()
我已填写服务主体的client_id,为何仍出现该错误?如何创建首个ADLS传感器?
问题排查与解决方案
一、报错核心原因
这个错误本质是Airflow无法识别你填写的client_id为有效的Microsoft Entra应用ID,常见触发场景包括:
- 误用了服务主体的对象ID而非应用程序(客户端)ID
- 连接配置的格式/键名不符合Airflow Wasb连接的要求
- Airflow连接类型选择错误
二、具体修复步骤
1. 确认client_id的正确性
Microsoft Entra应用(服务主体)的client_id是应用程序(客户端)ID,不是服务主体的对象ID。获取方式:
- 进入Azure门户 → 应用注册 → 找到目标服务主体 → 复制页面中的"应用程序(客户端)ID"
2. 修正Airflow连接配置
- 连接类型必须选择
Wasb(不要选其他Azure相关类型) - 配置JSON要去掉
<>占位符,确保键名严格匹配:{ "account_name": "你的存储账户名", "tenant_id": "服务主体的租户ID", "client_id": "服务主体的应用程序ID", "client_secret": "服务主体的客户端密码" } - 进入Airflow UI的「Admin→Connections」,找到该连接点击「Test」验证连通性
3. 代码适配(部分版本需要)
部分Airflow版本中airflow.sdk模块已被弃用,需替换导入路径:
# 替换原导入语句 from airflow.decorators import dag, task
三、创建ADLS传感器的标准流程
- 安装依赖
pip install apache-airflow-providers-microsoft-azure==12.7.0 - 准备服务主体与权限
- 在Azure门户创建应用注册(服务主体)
- 给该服务主体分配目标存储账户的「存储Blob数据读取者」角色(确保有权限访问目标容器和Blob)
- 配置Airflow连接
- 连接类型选
Wasb - 填写
account_name、tenant_id、client_id、client_secret四个核心参数
- 连接类型选
- 编写并测试DAG
使用WasbBlobSensor编写检测逻辑,确保wasb_conn_id、container_name、blob_name参数准确,触发DAG验证传感器功能
内容的提问来源于stack exchange,提问作者awesome_sangram
相关产品推荐
相关产品推荐

