在Terraform中如何配置Blob版本7天后自动删除?是否有对应属性?
解决Azure存储账户Blob版本自动过期删除的Terraform配置方案
Terraform的azurerm_storage_account资源本身没有直接配置Blob版本自动删除天数的属性,但可以通过以下两种官方推荐的方式实现你的需求:
方式一:配置Blob生命周期管理规则(首选)
通过存储账户的生命周期管理策略,专门针对Blob版本设置过期删除规则,这是Azure官方推荐的标准实现方式。
在Terraform中可通过azurerm_storage_account_management_policy资源完成配置,示例代码如下:
resource "azurerm_storage_account" "example" { name = "examplestorageacc" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location account_tier = "Standard" account_replication_type = "GRS" # 启用Blob版本控制 blob_properties { versioning_enabled = true } } resource "azurerm_storage_account_management_policy" "example" { storage_account_id = azurerm_storage_account.example.id rule { name = "delete-old-blob-versions" enabled = true filters { blob_types = ["blockBlob"] # 限定规则仅作用于Blob版本,不影响当前活跃Blob blob_version = true } actions { base_blob { delete { days_after_creation_greater_than = 7 } } } } }
核心要点:
filters块中设置blob_version = true,确保规则只对Blob版本生效days_after_creation_greater_than = 7定义版本创建7天后自动删除
方式二:通过Azure CLI辅助配置(适合特殊场景)
如果不需要用Terraform持久化管理生命周期规则,也可以通过local-exec provisioner调用Azure CLI命令完成配置:
resource "azurerm_storage_account" "example" { # 同上述存储账户配置内容 } provisioner "local-exec" { command = <<EOT az storage account management-policy create \ --account-name ${azurerm_storage_account.example.name} \ --resource-group ${azurerm_resource_group.example.name} \ --policy '{ "rules": [ { "name": "delete-old-blob-versions", "enabled": true, "filters": { "blobTypes": ["blockBlob"], "blobVersion": true }, "actions": { "baseBlob": { "delete": { "daysAfterCreationGreaterThan": 7 } } } } ] }' EOT }
注意:使用该方式需要确保执行Terraform的环境已安装并配置好Azure CLI的权限。
补充说明
delete_retention_policy确实仅针对软删除的Blob生效,与Blob版本的自动清理逻辑无关- 生命周期管理规则还支持更复杂的配置,比如将旧版本归档到冷存储/归档存储后再删除,可根据需求调整
内容的提问来源于stack exchange,提问作者Onki
相关产品推荐
相关产品推荐

