如何在Azure Synapse Notebook和Pipeline中读取Azure资源标签环境参数
完全可以实现,以下分别是Synapse Pipelines和Notebooks的具体实现思路:
1. Synapse 管道(Pipelines)读取资源标签的方法
- 首先配置权限:给Synapse工作区的系统分配托管身份(MSI)授予对应资源/资源组的
标签读取者权限,确保管道有权限调用Azure资源管理接口拉取标签。 - 调用Azure资源管理器(ARM)接口获取标签:
在管道中新增Web活动,按以下规则配置:- 请求方法选
GET,URL填入对应资源的ARM查询地址,示例查询Synapse工作区本身标签的地址为:https://management.azure.com/subscriptions/{你的订阅ID}/resourceGroups/{你的资源组名称}/providers/Microsoft.Synapse/workspaces/{你的Synapse工作区名称}?api-version=2021-06-01 - 身份验证选择
系统分配的托管身份,资源字段固定填https://management.azure.com/
- 请求方法选
- 活动运行后,返回结果的
tags字段即为该资源的所有标签,后续活动可以直接用@activity('你的Web活动名称').output.tags.标签Key的格式引用对应标签值,实现参数配置。 - 若需要读取其他Azure资源的标签,仅需修改Web活动的URL为对应资源的ARM查询地址即可。
2. Synapse Notebooks 读取资源标签的方法
- 提前配置权限:确保Notebook运行使用的身份(工作区托管身份或当前登录的Azure AD账号)有对应资源的标签读取权限。
- 以PySpark内核为例,可以通过Azure官方管理库直接拉取标签,示例代码如下:
from azure.identity import DefaultAzureCredential from azure.mgmt.resource import ResourceManagementClient # 初始化凭证,默认会自动调用Synapse工作区的系统托管身份鉴权 credential = DefaultAzureCredential() subscription_id = "替换为你的订阅ID" resource_client = ResourceManagementClient(credential, subscription_id) # 拉取指定Synapse工作区的标签 resource = resource_client.resources.get( resource_group_name="替换为你的资源组名称", resource_provider_namespace="Microsoft.Synapse", parent_resource_path="", resource_type="workspaces", resource_name="替换为你的Synapse工作区名称", api_version="2021-06-01" ) tags = resource.tags # 直接读取对应标签的值,比如环境标签的Key为env时: env = tags.get("env")
- 拿到标签值后可以直接赋值给连接串、存储路径、接口参数等变量,实现多环境下代码无修改复用。
建议所有环境的资源标签使用统一的Key命名规则(比如统一用
env表示环境类型,region表示部署区域),避免不同环境标签Key不一致导致代码运行异常。
内容的提问来源于stack exchange,提问作者fbglv
相关产品推荐
相关产品推荐

