Skip to content
返回云服务

Azure 存储(Blob、队列、表、文件)

持久、大规模可扩展的对象和结构化存储,包含四项服务:Blob(对象)、队列(消息)、表(NoSQL 键值)和文件(SMB 共享)。

Azure进阶

为什么

Azure Storage 提供单一账户托管高达 500 TB 数据,跨四项服务,LRS 持久性达 99.999999999%(11 个 9)。它是 Azure 中对象存储、异步消息和 NoSQL 的骨干,对简单键值负载比 Cosmos DB 更便宜。

何时使用

Blob 用于静态资源、备份和非结构化文件;队列用于解耦生产者/消费者;表用于简单分区键值数据;文件用于需要 SMB 的迁移应用。需要二级索引、富查询或多区域写入时改用 Cosmos DB。

如何做

1. 创建存储账户(选择冗余:LRS/GRS/ZRS/RAGRS)。 2. 创建容器(Blob)或队列/表。 3. 获取连接字符串或生成具有范围权限和过期时间的 SAS 令牌。 4. 通过 Azure SDK(@azure/storage-blob)或 AzCopy CLI 上传/下载。 5. 为浏览器访问配置 CORS。 6. 设置生命周期策略,将 Blob 分层到 Cool/Archive 并删除旧 Blob。 ```bash az storage account create --name mystore --resource-group rg --sku Standard_LRS --kind StorageV2 az storage container create --name uploads --account-name mystore az storage blob upload --account-name mystore --container-name uploads --name photo.jpg --file ./photo.jpg ```

示例

使用 SAS 令牌的 Node.js 上传,以及 90 天后自动归档 Blob 的生命周期规则: ```ts import { BlobServiceClient } from "@azure/storage-blob"; const conn = process.env.AZURE_STORAGE_CONNECTION_STRING!; const svc = BlobServiceClient.fromConnectionString(conn); const container = svc.getContainerClient("uploads"); const blob = container.getBlockBlobClient("photo.jpg"); await blob.uploadFile("./photo.jpg"); console.log("Uploaded:", blob.url); ``` ```json // 生命周期:90 天后归档,365 天后删除 { "rules": [{ "enabled": true, "name": "archive", "type": "Lifecycle", "definition": { "actions": { "baseBlob": { "tierToArchive": { "daysAfterModificationGreaterThan": 90 } } }, "filters": { "blobTypes": ["blockBlob"] } } }] } ```

常见问题

  • ⚠403 PublicAccess is not permitted —— 容器访问级别为 Private;生成 SAS 令牌或设置 --public-access blob,而非依赖匿名访问。
  • ⚠生产环境 SAS 令牌过期错误 —— 令牌有固定过期时间;使用存储访问策略滚动过期而无需重新签发,或使用托管标识加 RBAC。
  • ⚠跨区域 GRS 复制时出口费用高 —— 确认是否真的需要异地冗余;单区域负载用 LRS 或 ZRS 便宜得多。

最佳实践

  • ✓优先使用托管标识 + RBAC 而非连接字符串,代码和配置中不存密钥,且可通过角色分配撤销访问。
  • ✓始终设置生命周期策略,将不常访问的 Blob 分层到 Cool/Archive —— 仅此一项可降低存储成本 50% 以上。
  • ✓大文件上传用块 Blob(可续传),日志用追加 Blob(可并发追加),VHD 磁盘才用页 Blob。

常见问题解答

什么是Azure 存储(Blob、队列、表、文件)?它解决什么问题?

持久、大规模可扩展的对象和结构化存储,包含四项服务:Blob(对象)、队列(消息)、表(NoSQL 键值)和文件(SMB 共享)。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手Azure 存储(Blob、队列、表、文件)?

两步即可跑通:① 创建存储账户(选择冗余:LRS/GRS/ZRS/RAGRS)。;② 创建容器(Blob)或队列/表。。建议先用免费套餐验证流程,再接入生产环境。

Azure 存储(Blob、队列、表、文件) 最容易踩的坑是什么?

最高频的问题是:403 PublicAccess is not permitted —— 容器访问级别为 Private;生成 SAS 令牌或设置 --public-access blob,而非依赖匿名访问。。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

Azure 存储(Blob、队列、表、文件) 的最佳实践有哪些?

Azure 存储(Blob、队列、表、文件) 的最佳实践包括:优先使用托管标识 + RBAC 而非连接字符串,代码和配置中不存密钥,且可通过角色分配撤销访问。;始终设置生命周期策略,将不常访问的 Blob 分层到 Cool/Archive —— 仅此一项可降低存储成本 50% 以上。;大文件上传用块 Blob(可续传),日志用追加 Blob(可并发追加),VHD 磁盘才用页 Blob。。其中首条「优先使用托管标识 + RBAC 而非连接字符串,代码和配置中不存密钥,且可通过角色分配撤销访问。」应作为团队默认规范写入 IaC 模板。

Azure 存储(Blob、队列、表、文件) 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Azure 存储(Blob、队列、表、文件) 多数提供免费套餐,先在免费额度内验证再放量。