跨存储账户复制Blob存储目录的Python SDK方案及Azure服务咨询
答复内容
1 Python Azure Blob SDK实现方案
- 完全可以实现同等功能,不需要自行实现串行逐个blob复制的逻辑
- 核心依赖Azure Blob存储的服务端复制能力:复制操作全程由Azure存储后台执行,不会占用你的服务带宽资源,客户端仅需提交任务即可
- 实现逻辑:
- 安装v12及以上版本的
azure-storage-blobPython SDK,推荐使用异步接口提升提交效率 - 调用源容器客户端的
list_blobs(name_starts_with="待复制目录前缀/")接口拉取blob列表,该接口为轻量分页查询,性能开销极低 - 批量提交目标blob的
start_copy_from_url任务,传入带SAS令牌的源blob地址即可,所有任务提交后由服务端异步执行,可按需监听复制完成状态
- 安装v12及以上版本的
- 核心代码示例:
from azure.storage.blob.aio import ContainerClient async def copy_dir(src_container_sas: str, src_dir: str, dest_container_url: str): async with ContainerClient.from_container_url(src_container_sas) as src_client: async with ContainerClient.from_container_url(dest_container_url) as dest_client: async for blob in src_client.list_blobs(name_starts_with=f"{src_dir.rstrip('/')}/"): src_blob_url = f"{src_container_sas.rstrip('/')}/{blob.name}" dest_blob_client = dest_client.get_blob_client(blob.name) # 仅提交复制任务,无需等待执行完成 await dest_blob_client.start_copy_from_url(src_blob_url)
2 支持API触发的Azure复制服务
有三款原生支持API触发复制操作的Azure服务可选,无需自行维护整套传输服务的运行资源:
- Azure Functions:无服务计算产品,你可以开发一个HTTP触发的函数,接收传入的源SAS URL和目录参数后自动执行复制逻辑,执行完成后支持调用你指定的回调地址推送结果,按需计费资源开销极低
- Azure Logic Apps:低代码工作流产品,无需编码即可配置HTTP触发端点、Blob目录复制组件、回调通知组件,直接对外暴露API地址即可触发复制流程
- Azure Data Factory:专业数据集成服务,适合大批量、高频次的传输场景,提前配置好固定目标容器的复制管道后,可通过管道触发API传入源参数启动复制任务,内置进度监控、错误重试、回调通知等全链路能力
内容的提问来源于stack exchange,提问作者harish chava
相关产品推荐
相关产品推荐

