agentic-awesome-skills 实战:用 azure-storage-blob-py 技能驾驭 Azure Blob Storage 全生命周期
agentic-awesome-skills 实战用 azure-storage-blob-py 技能驾驭 Azure Blob Storage 全生命周期【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址: https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills导读azure-storage-blob-py是 agentic-awesome-skills 技能仓库中面向 Azure Blob Storage 的 Python 客户端技能定位为上传、下载、列举、容器管理与生命周期操作的统一入口。本文以 SKILL.md 为主体结合仓库索引与配置完整讲解从安装认证、客户端层级、核心增删查改到性能调优、SAS 令牌签发与异步编程的端到端用法帮助你或你的 Agent在项目中直接落地可靠的对象存储代码。技能定位与索引信息在 data/catalog.json 中该技能被登记为canonical_id / idazure-storage-blob-pydescriptionAzure Blob Storage SDK for Python用于上传、下载、列举 blob、管理容器与 blob 生命周期categorycloudriskcriticalsourcecommunitytags / triggersazure、storage、blob、py、sdk、python、uploading、downloading、listing、managing、containers同一主题在仓库中还提供了 Java、Rust、TypeScript 等语言版本如 catalog.json 中的azure-storage-blob-java当任务匹配 Azure 存储 Python 场景时即可触发本技能。技能文档同时声明了使用边界仅在任务与上述范围明确匹配时使用不替代环境级验证与专家评审缺少必要输入、权限或安全边界时应停下询问。安装与环境变量安装依赖技能要求安装两个核心包pip install azure-storage-blob azure-identityazure-storage-blobBlob 存储客户端库BlobServiceClient、ContainerClient、BlobClient等azure-identity提供DefaultAzureCredential等统一的 Azure 认证凭据链避免在代码中硬编码密钥。配置环境变量AZURE_STORAGE_ACCOUNT_NAMEyour-storage-account # 或者直接使用完整 URL AZURE_STORAGE_ACCOUNT_URLhttps://account.blob.core.windows.net两种配置等价前者只声明账号名后者给出完整的服务端点。在代码中account_url最终都会以https://account.blob.core.windows.net的形式传入BlobServiceClient建议在环境变量或配置中心统一维护避免散落于源码。认证优先使用 DefaultAzureCredential技能明确推荐使用托管身份链路而非连接字符串connection string核心示例from azure.identity import DefaultAzureCredential from azure.storage.blob import BlobServiceClient credential DefaultAzureCredential() account_url https://account.blob.core.windows.net blob_service_client BlobServiceClient(account_url, credentialcredential)DefaultAzureCredential会按环境自动尝试多种凭据来源如环境变量、Azure CLI 登录态、托管身份等好处是本地开发与云端部署共用同一段代码无需在源码中暴露存储账户密钥。这是本技能最佳实践清单中的第一条原则。客户端层级模型技能用一张表格定义了三个客户端及其获取方式这是理解整个 SDK 的骨架客户端用途获取方式BlobServiceClient账户级操作账户属性、创建容器等直接实例化ContainerClient容器操作创建、列举、删除容器blob_service_client.get_container_client()BlobClient单个 blob 的操作上传、下载、删除、属性container_client.get_blob_client()实践中可以跨级获取blob_service_client.get_blob_client(containermycontainer, blobsample.txt)也能直接拿到BlobClient适用于已知容器与 blob 名的快速操作而get_container_client()则用于需要多次操作同一容器的场景。核心工作流容器与 Blob 的增删查改创建容器container_client blob_service_client.get_container_client(mycontainer) container_client.create_container()容器是 blob 的逻辑分组单元。注意容器名需遵循 Azure 命名规则小写字母、数字和连字符363 个字符重复创建同名容器会抛出异常可按需结合container_client.exists()做幂等判断。上传 Blob# 从文件路径上传 blob_client blob_service_client.get_blob_client( containermycontainer, blobsample.txt ) with open(./local-file.txt, rb) as data: blob_client.upload_blob(data, overwriteTrue) # 从 bytes/字符串上传 blob_client.upload_blob(bHello, World!, overwriteTrue) # 从流上传 import io stream io.BytesIO(bStream content) blob_client.upload_blob(stream, overwriteTrue)关键点upload_blob同时接受文件对象、字节串与流式对象底层会自动选择合适的上传策略小对象单次 PUT大对象分块上传overwriteTrue必须显式声明默认情况下对已存在 blob 再次上传会失败显式传参既保证行为可预期也避免误覆盖对应最佳实践第 3 条。下载 Blobblob_client blob_service_client.get_blob_client( containermycontainer, blobsample.txt ) # 下载到文件 with open(./downloaded.txt, wb) as file: download_stream blob_client.download_blob() file.write(download_stream.readall()) # 下载到内存 download_stream blob_client.download_blob() content download_stream.readall() # bytes # 读入现有缓冲区内存友好 stream io.BytesIO() num_bytes blob_client.download_blob().readinto(stream)三种读取方式的取舍readall()简单直接但会把整个 blob 载入内存当 blob 很大或内存受限时优先使用readinto()写入预分配缓冲区最佳实践第 5 条。大文件场景还可配合下文max_concurrency做并行下载。列举 Blobcontainer_client blob_service_client.get_container_client(mycontainer) # 列举所有 blob for blob in container_client.list_blobs(): print(f{blob.name} - {blob.size} bytes) # 按前缀过滤模拟文件夹结构 for blob in container_client.list_blobs(name_starts_withlogs/): print(blob.name) # 按分隔符遍历层级虚拟目录 for item in container_client.walk_blobs(delimiter/): if item.get(prefix): print(fDirectory: {item[prefix]}) else: print(fBlob: {item.name})list_blobs返回分页迭代器适合大数据量场景name_starts_with通过前缀过滤快速定位目录片段而walk_blobs(delimiter/)则返回前缀虚拟目录 blob混合条目是技能推荐的分层列举方式最佳实践第 6 条用于在扁平命名空间之上还原目录树视图。删除 Blobblob_client.delete_blob() # 连带删除快照 blob_client.delete_blob(delete_snapshotsinclude)delete_snapshotsinclude表示删除 blob 本体及其全部快照也可以传only仅删除快照而保留当前版本。结合保留策略使用时删除是不可逆操作建议在自动化流程中加入确认环节。性能调优分块大小与并行度技能针对大文件传输给出了两个维度的调优blob_client BlobClient( account_urlaccount_url, container_namemycontainer, blob_namelarge-file.zip, credentialcredential, max_block_size4 * 1024 * 1024, # 4 MiB 分块大小 max_single_put_size64 * 1024 * 1024 # 单次 PUT 上限 64 MiB ) # 并行上传 blob_client.upload_blob(data, max_concurrency4) # 并行下载 download_stream blob_client.download_blob(max_concurrency4)参数语义max_single_put_size文件小于该阈值时走单次 PUT 上传超过则自动转为分块上传max_block_size分块上传时每个 block 的大小技能示例取 4 MiB需要与账户的 block 数量上限每个 blob 最多 50000 个 block统筹考虑max_concurrency上传/下载时的并发请求数示例取 4对带宽充足、延迟较高的网络能显著提升吞吐但过高的并发会占用更多连接与内存需按环境实测调整。SAS 令牌生成与使用SASShared Access Signature用于向第三方授予限时限权的 blob 访问能力技能给出的签发示例from datetime import datetime, timedelta, timezone from azure.storage.blob import generate_blob_sas, BlobSasPermissions sas_token generate_blob_sas( account_nameaccount, container_namemycontainer, blob_namesample.txt, account_keyaccount-key, # 或使用 user delegation key permissionBlobSasPermissions(readTrue), expirydatetime.now(timezone.utc) timedelta(hours1) ) # 使用 SAS 令牌 blob_url fhttps://account.blob.core.windows.net/mycontainer/sample.txt?{sas_token}要点BlobSasPermissions(readTrue)按位组合权限read / write / delete / list / create / add / tags 等最小权限原则下只给所需权限expiry使用带timezone.utc的 UTC 时间避免本地时区偏差导致令牌立即过期或长期有效注释中提到的 user delegation key 需要先通过托管身份获取委托密钥安全性更高适合企业级生产环境生成的 URL 可直接用于浏览器直链下载、临时授权给第三方系统无需暴露账户密钥。Blob 属性与元数据# 获取属性 properties blob_client.get_blob_properties() print(fSize: {properties.size}) print(fContent-Type: {properties.content_settings.content_type}) print(fLast modified: {properties.last_modified}) # 设置元数据 blob_client.set_blob_metadata(metadata{category: logs, year: 2024}) # 设置 Content-Type from azure.storage.blob import ContentSettings blob_client.set_http_headers( content_settingsContentSettings(content_typeapplication/json) )get_blob_properties()返回大小、内容类型、最后修改时间等 HTTP 头与系统属性可用于校验上传结果、判断是否需重新处理set_blob_metadata()写入自定义键值对技能示例以业务维度如category、year标记 blob元数据随后可随list_blobs()一并读取用于过滤与审计set_http_headers(content_settings...)显式设置 Content-Type对应最佳实践第 7 条——对于通过 URL 直接对外提供服务的 blob正确的 MIME 类型如application/json决定浏览器与客户端如何解析响应避免文本内容被误下载。异步客户端async/await 版本技能同时覆盖了异步编程模型适合高并发 I/O 场景from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient async def upload_async(): credential DefaultAzureCredential() async with BlobServiceClient(account_url, credentialcredential) as client: blob_client client.get_blob_client(mycontainer, sample.txt) with open(./file.txt, rb) as data: await blob_client.upload_blob(data, overwriteTrue) # 异步下载 async def download_async(): async with BlobServiceClient(account_url, credentialcredential) as client: blob_client client.get_blob_client(mycontainer, sample.txt) stream await blob_client.download_blob() data await stream.readall()要点异步客户端位于azure.storage.blob.aio与azure.identity.aio方法名与同步版一一对应务必使用async with上下文管理器最佳实践第 2 条确保连接池与底层 socket 被正确关闭防止异步事件循环中资源泄漏该模式适合在 FastAPI / asyncio 服务中并发处理多个文件的上传下载避免阻塞事件循环。最佳实践汇总技能文档给出七条可操作的最佳实践与上文各节一一对应优先使用DefaultAzureCredential而非连接字符串或硬编码密钥异步客户端务必使用上下文管理器async with保证资源释放重复上传时显式传overwriteTrue行为可预期且防误覆盖大文件传输使用max_concurrency提升吞吐内存敏感场景优先readinto()而非一次性readall()分层列举使用walk_blobs()配合分隔符还原目录结构对外服务的 blob 设置正确的 Content-Type保证 Web 场景的正确解析。适用场景与使用边界适用场景该技能适用于以下典型任务日志与备份文件上传、数据文件下载与迁移、容器与 blob 生命周期管理、为外部系统签发限时访问令牌、以及任何Azure Blob Storage Python的增删查改需求。限制与注意仅在任务与技能描述的范围内使用不要滥用技能输出不能替代针对具体环境的验证、测试与专家评审如存储账户的网络策略、软删除、版本控制等账户级配置需结合目标环境确认当缺少必要输入、权限、安全边界或成功标准时应停下来向用户澄清而不是凭猜测执行破坏性操作。技能文档本体位于 plugins/agentic-awesome-skills-claude/skills/azure-storage-blob-py/SKILL.md同一技能在 plugins/agentic-awesome-skills/skills/azure-storage-blob-py/SKILL.md 有等价版本完整的技能目录索引可参考 data/catalog.json 与 data/skills_index.json 中的azure-storage-blob-py条目。将本文的示例代码与仓库索引信息结合使用即可在项目中快速构建可靠、可维护的 Azure 对象存储能力。【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址: https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考