如何创建可安全写入Data Lake Gen2的Azure函数应用?
实现步骤与示例代码
1. 创建Timer触发的Azure函数
选择Python Timer触发器,设置CRON表达式实现每月执行(比如0 0 2 1 * *表示每月1号凌晨2点执行,可按需调整)。
2. 配置托管标识访问Data Lake Gen2
由于你无角色修改权限,需联系Azure管理员完成以下操作:
- 为你的函数应用启用系统分配托管标识
- 给该托管标识分配目标Data Lake Gen2存储账户的
Storage Blob Data Contributor角色(可限定到特定容器或路径)
通过托管标识认证无需硬编码密钥,Azure会自动处理身份校验。
3. 代码改造与依赖配置
首先在函数应用的requirements.txt中添加依赖:
azure-functions pandas azure-storage-file-datalake azure-identity
以下是函数核心代码(__init__.py):
import azure.functions as func import pandas as pd from azure.storage.filedatalake import DataLakeServiceClient from azure.identity import ManagedIdentityCredential import os def main(mytimer: func.TimerRequest) -> None: # 从API拉取CSV数据 base_url = "https://www.example.com/id=" target_id = 108 # 可改为从环境变量读取:os.getenv("TARGET_ID") csv_url = base_url + str(target_id) data = pd.read_csv(csv_url) # 从应用配置读取ADLS参数 storage_account = os.getenv("STORAGE_ACCOUNT_NAME") container_name = os.getenv("CONTAINER_NAME") adls_file_path = f"your-folder/{target_id}.csv" # 托管标识认证并上传文件 credential = ManagedIdentityCredential() service_client = DataLakeServiceClient( account_url=f"https://{storage_account}.dfs.core.windows.net", credential=credential ) file_system_client = service_client.get_file_system_client(container_name) file_client = file_system_client.create_file(adls_file_path) # 将DataFrame转为CSV字节流上传 csv_content = data.to_csv(index=False, sep=',').encode('utf-8') file_client.append_data(data=csv_content, offset=0, length=len(csv_content)) file_client.flush_data(len(csv_content)) print(f"文件 {target_id}.csv 已成功上传至ADLS路径: {adls_file_path}")
4. 配置函数应用环境变量
在Azure门户的函数应用→配置→应用设置中添加以下变量:
STORAGE_ACCOUNT_NAME:你的Data Lake Gen2存储账户名称CONTAINER_NAME:目标容器名称- 可选:
TARGET_ID:若需动态调整ID值,可将代码中的target_id改为读取该变量
关键注意事项
- 必须由管理员完成托管标识的权限分配,否则会出现访问拒绝错误
- Timer触发器的CRON表达式可根据需求调整,例如每月15号凌晨3点执行:
0 0 3 15 * *
内容的提问来源于stack exchange,提问作者Mahix
相关产品推荐
相关产品推荐

