You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BlobServiceClient创建Azure Blob容器时如何设置TTL?

解决方案

目前Azure Blob存储没有直接在创建容器或Blob时设置容器级TTL的API,但可以通过以下两种低复杂度的方式实现按容器区分Blob生命周期的需求:

1. 容器元数据+账户级生命周期规则(批量管理)

给不同容器添加自定义TTL元数据,再通过生命周期规则的筛选条件,对不同元数据的容器应用对应TTL策略,无需为每个容器单独创建规则:

步骤1:创建容器时添加TTL元数据

from azure.storage.blob import BlobServiceClient

connstr = "..."
bsc = BlobServiceClient.from_connection_string(connstr)
# 创建容器时指定TTL天数(比如30天)
container_client = bsc.create_container(
    name="some_container",
    metadata={"ttl_days": "30"}
)

步骤2:配置账户级生命周期规则

通过Azure Portal或SDK添加规则,基于容器元数据筛选并设置删除动作:

{
  "rules": [
    {
      "name": "30-day-ttl-rule",
      "enabled": true,
      "filters": {
        "blobTypes": ["blockBlob"],
        "containerMetadata": {"ttl_days": "30"}
      },
      "actions": {
        "baseBlob": {
          "delete": {
            "daysAfterModificationGreaterThan": 30
          }
        }
      }
    },
    {
      "name": "7-day-ttl-rule",
      "enabled": true,
      "filters": {
        "blobTypes": ["blockBlob"],
        "containerMetadata": {"ttl_days": "7"}
      },
      "actions": {
        "baseBlob": {
          "delete": {
            "daysAfterModificationGreaterThan": 7
          }
        }
      }
    }
  ]
}

后续创建容器时,只需设置对应ttl_days元数据,就能自动匹配对应的TTL规则。

2. 上传Blob时直接设置过期时间(精准控制)

如果需要每个Blob的TTL与容器一致,可以在上传时根据容器元数据计算过期时间,直接设置Blob的expiry_time,到期后Azure会自动删除该Blob,无需依赖生命周期规则:

from azure.storage.blob import BlobServiceClient
from datetime import datetime, timedelta

connstr = "..."
bsc = BlobServiceClient.from_connection_string(connstr)

# 创建容器并设置TTL元数据
container_client = bsc.create_container(
    name="some_container",
    metadata={"ttl_days": "30"}
)

# 获取容器元数据,计算过期时间
container_props = container_client.get_container_properties()
ttl_days = int(container_props.metadata["ttl_days"])
expiry_time = datetime.utcnow() + timedelta(days=ttl_days)

# 上传Blob时设置过期时间
blob_client = container_client.upload_blob(
    "some_blob",
    data="data_item",
    metadata={},
    expiry_time=expiry_time
)

以上两种方案都能避免大幅增加脚本复杂度,满足按容器设置不同Blob TTL的需求。

内容的提问来源于stack exchange,提问作者Steinn Hauser Magnússon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:25:15