如何通过Bicep配置Azure存储生命周期策略排除develop分支Blob
解决方案及示例
核心思路
Azure存储生命周期管理不支持否定过滤规则,因此只能通过明确匹配需要执行删除操作的Blob范围,或是将需保留的Blob隔离到单独容器来实现排除效果。
方案1:通过prefixMatch匹配所有需删除的Blob前缀
如果你的Blob有明确命名规则(比如除develop/前缀外,其他Blob都有固定前缀如prod/、test/等),可以把这些需要删除的前缀全部加入prefixMatch数组,规则仅对匹配这些前缀的Blob生效,自动排除develop/开头的Blob。
Bicep示例代码
resource storageAccountManagementPolicies 'Microsoft.Storage/storageAccounts/managementPolicies@2023-01-01'{ name: 'Storage Account Name' properties: { policy: { rules: [ { enabled: true name: 'Delete non-develop blobs' type: 'Lifecycle' definition: { actions: { baseBlob: { delete: { daysAfterCreationGreaterThan: 100 } } } filters: { blobTypes: [ 'blockBlob' ] // 列出所有需执行删除的Blob前缀,自动排除develop/开头的Blob prefixMatch: [ 'prod/' 'test/' 'staging/' // 补充所有非develop的Blob前缀 ] } } } ] } } }
方案2:将develop分支Blob迁移到单独容器
如果无法穷举非develop的Blob前缀,最稳妥的方式是把develop分支的Blob移到单独容器(比如container-develop),然后让生命周期策略仅应用到其他需要清理的容器。
Bicep示例代码
resource storageAccountManagementPolicies 'Microsoft.Storage/storageAccounts/managementPolicies@2023-01-01'{ name: 'Storage Account Name' properties: { policy: { rules: [ { enabled: true name: 'Delete blobs in non-develop containers' type: 'Lifecycle' definition: { actions: { baseBlob: { delete: { daysAfterCreationGreaterThan: 100 } } } filters: { blobTypes: [ 'blockBlob' ] // 指定需要应用规则的容器,排除存放develop分支的容器 containerNameMatch: [ 'container-prod' 'container-test' // 补充所有非develop的容器名称 ] } } } ] } } }
注意事项
- 使用
prefixMatch时,要确保所有需删除的Blob都能被列出的前缀覆盖,避免遗漏或误删。 - 容器隔离方案更适合Blob命名规则不固定的场景,管理更清晰,能避免因前缀变化导致规则失效。
内容的提问来源于stack exchange,提问作者ninja
相关产品推荐
相关产品推荐

