如何为Azure资源设置过期日期并发送停用提醒邮件
解决方案:Azure资源过期提醒与自动清理
一、通用方案(覆盖Terraform/手动创建的资源)
1. 给资源添加ExpirationDate标签
无论通过Terraform还是手动创建,给目标资源(VM、应用网关等)添加格式为YYYY-MM-DD的ExpirationDate标签:
- Terraform配置示例(VM资源):
resource "azurerm_virtual_machine" "test_vm" { # 其他VM配置项... tags = { ExpirationDate = "2024-12-31" Environment = "Test" } }
- 手动创建资源:在Azure门户进入资源详情页,切换到「标签」栏目直接添加键值对。
2. 创建Azure Monitor警报实现到期提醒
通过日志查询筛选即将过期的资源,再配置邮件通知:
- 编写Kusto查询语句(示例:提前3天触发提醒):
Resources | where tags.ExpirationDate != "" | parse tags.ExpirationDate with ExpirationDate:datetime | where ExpirationDate <= now() + 3d | project ResourceId, ResourceName, ResourceType, ExpirationDate
- 基于该查询创建警报规则:设置触发条件为「查询结果数大于0」,通知方式选择「电子邮件/SMS/推送/语音」,添加需要接收提醒的邮箱地址。
3. (可选)自动化删除过期资源
配合Azure自动化账户的PowerShell Runbook,实现到期自动清理:
- Runbook脚本示例:
# 以托管身份连接Azure Connect-AzAccount -Identity # 获取已过期的资源 $expiredResources = Get-AzResource | Where-Object { $_.Tags.ExpirationDate -ne $null -and [datetime]$_.Tags.ExpirationDate -le (Get-Date) } # 遍历删除资源 foreach ($resource in $expiredResources) { Write-Output "Deleting expired resource: $($resource.Name)" Remove-AzResource -ResourceId $resource.ResourceId -Force }
- 给Runbook设置每日执行的计划触发器,同时可在警报规则中关联该Runbook,实现「提醒+自动清理」的闭环。
二、Terraform专属简化方案
在Terraform代码中直接集成标签逻辑,确保所有通过代码创建的测试资源都带有ExpirationDate标签,后续复用上述Monitor+自动化流程即可,无需额外配置。
三、资源组级批量管理(适合测试环境)
若测试资源集中在单个资源组,可直接给资源组添加ExpirationDate标签,通过相同的Monitor查询逻辑识别过期资源组,到期后直接删除整个资源组,比单独清理资源更高效。
内容的提问来源于stack exchange,提问作者Amrit Jha
相关产品推荐
相关产品推荐

