You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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传感器的标准流程

  1. 安装依赖
    pip install apache-airflow-providers-microsoft-azure==12.7.0
    
  2. 准备服务主体与权限
    • 在Azure门户创建应用注册(服务主体)
    • 给该服务主体分配目标存储账户的「存储Blob数据读取者」角色(确保有权限访问目标容器和Blob)
  3. 配置Airflow连接
    • 连接类型选Wasb
    • 填写account_name、tenant_id、client_id、client_secret四个核心参数
  4. 编写并测试DAG
    使用WasbBlobSensor编写检测逻辑,确保wasb_conn_id、container_name、blob_name参数准确,触发DAG验证传感器功能

内容的提问来源于stack exchange,提问作者awesome_sangram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 05:13:15