如何在Azure存储生命周期管理中排除指定容器?
Azure Blob Storage 排除指定容器实现7天后自动删除方案
方案一:使用Azure存储生命周期管理规则(自动化)
这是Azure原生的自动清理方案,无需编写脚本,适合长期自动执行:
- 登录Azure门户,进入目标存储账户,找到生命周期管理选项
- 点击“添加规则”,设置规则名称和范围为「所有容器」
- 在筛选器区域,选择「排除容器」,输入需要保留的容器名称(支持通配符,比如
prod-*可匹配所有前缀为prod的容器) - 设置清理操作:
- 若要删除7天前创建的Blob:选择「删除Blob」,触发条件设为「基于创建时间」,时间间隔填7天
- 若要删除7天前创建的空容器:新增一条规则,范围选「所有容器」,同样排除指定容器,操作选择「删除容器」,触发条件设为「基于创建时间」7天(注意:此操作仅删除空容器,若容器内有Blob需先删除Blob)
方案二:使用脚本手动/按需执行(PowerShell/Azure CLI)
如果需要更灵活的控制,可编写脚本实现:
PowerShell脚本示例
# 配置参数 $storageAccountName = "你的存储账户名" $resourceGroupName = "你的资源组名" $excludedContainers = @("要保留的容器1", "要保留的容器2") $retentionDays = 7 # 获取存储账户上下文 $ctx = (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context # 列出所有容器并排除指定容器 $containers = Get-AzStorageContainer -Context $ctx | Where-Object { $_.Name -notin $excludedContainers } foreach ($container in $containers) { # 检查容器创建时间是否超过指定天数 $creationTime = $container.LastModified.DateTime if ((Get-Date) - $creationTime -gt (New-TimeSpan -Days $retentionDays)) { # 删除容器(会连带删除容器内所有Blob) Remove-AzStorageContainer -Name $container.Name -Context $ctx -Force Write-Host "已删除容器: $($container.Name)" } }
Azure CLI脚本示例
# 配置参数 STORAGE_ACCOUNT="你的存储账户名" RESOURCE_GROUP="你的资源组名" EXCLUDED_CONTAINERS=("要保留的容器1" "要保留的容器2") RETENTION_DAYS=7 # 获取存储账户密钥 ACCOUNT_KEY=$(az storage account keys list --resource-group $RESOURCE_GROUP --account-name $STORAGE_ACCOUNT --query "[0].value" -o tsv) # 列出所有容器 CONTAINERS=$(az storage container list --account-name $STORAGE_ACCOUNT --account-key $ACCOUNT_KEY --query "[].name" -o tsv) for container in $CONTAINERS; do # 跳过排除列表中的容器 if [[ ! " ${EXCLUDED_CONTAINERS[@]} " =~ " ${container} " ]]; then # 获取容器创建时间并计算天数差 CREATION_TIME=$(az storage container show --name $container --account-name $STORAGE_ACCOUNT --account-key $ACCOUNT_KEY --query "properties.lastModified" -o tsv) CREATION_TIMESTAMP=$(date -d "$CREATION_TIME" +%s) CURRENT_TIMESTAMP=$(date +%s) DIFF_DAYS=$(((CURRENT_TIMESTAMP - CREATION_TIMESTAMP) / 86400)) if [ $DIFF_DAYS -ge $RETENTION_DAYS ]; then # 删除容器 az storage container delete --name $container --account-name $STORAGE_ACCOUNT --account-key $ACCOUNT_KEY --yes echo "已删除容器: $container" fi fi done
注意事项
- 若只需清理容器内的Blob而非删除容器,可修改脚本:遍历容器内的Blob,筛选出7天前创建的Blob进行删除
- 正式执行前务必在测试环境验证规则或脚本,避免误删重要数据
- 生命周期规则生效可能有延迟(通常不超过24小时),脚本则可立即执行
内容的提问来源于stack exchange,提问作者Phoebe
相关产品推荐
相关产品推荐

