如何通过Terraform配置Azure Backup备份告警?
方案优化及修正说明
原方案存在以下可优化和错误点:
- 模块使用过时:原脚本依赖的AzureRM模块已被微软官方废弃停止维护,和当前主流的Az模块不兼容,易出现调用错误
- 告警配置对象错误:原脚本调用的
Set-AzRecoveryServicesAsrAlertSetting是Azure Site Recovery(站点灾备服务)的告警配置命令,不适用于Azure Backup备份服务,不符合配置备份告警的需求 - 本地执行器隐含问题:原配置未处理PowerShell执行策略限制,也未添加执行触发规则,重复运行Terraform时容易出现无意义的重复执行
修正后的实现方案
1. 修正后的PowerShell脚本(Set-BackupAlert.ps1)
param( [string]$recoveryServiceVaultName, [string]$resourceGroupName ) # 安装并导入备份告警所需的Az模块 Install-Module Az.RecoveryServices -AllowClobber -Force -Scope CurrentUser Import-Module Az.RecoveryServices # 获取目标恢复服务保管库 $recovery_vault = Get-AzRecoveryServicesVault -Name $recoveryServiceVaultName -ResourceGroupName $resourceGroupName # 配置备份服务告警通知规则 Set-AzRecoveryServicesBackupAlertConfig -VaultId $recovery_vault.ID ` -CustomEmailAddress "test@thomasthornton.cloud" ` -SendToSubscriptionOwner $true
2. 修正后的Terraform配置(main.tf)
resource "azurerm_resource_group" "rg" { name = "tfex-recovery_vault" location = "West Europe" } resource "azurerm_recovery_services_vault" "vault" { name = "example_recovery_vault" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name sku = "Standard" soft_delete_enabled = true provisioner "local-exec" { # 配置执行触发器,仅当保管库名称或所属资源组变更时才重新执行告警配置脚本 triggers = { vault_name = self.name resource_group = self.resource_group_name } # 追加ExecutionPolicy参数绕过本地脚本执行限制 command = "PowerShell -ExecutionPolicy Bypass -file ./Set-BackupAlert.ps1 -recoveryServiceVaultName ${self.name} -resourceGroupName ${self.resource_group_name}" } }
注意事项
- 运行Terraform的环境需要提前完成Azure身份验证,本地运行可通过
Connect-AzAccount登录,自动化流水线场景建议使用Azure服务主体完成身份校验 - 本方案配置的是备份服务全局告警,所有备份任务失败、警告类事件都会推送通知到指定邮箱
- 如果需要更细粒度的告警规则(比如仅针对特定虚拟机备份失败告警、备份存储容量超出阈值告警),可直接使用Terraform原生的
azurerm_monitor_scheduled_query_rules_alert资源配置Azure Monitor告警,无需依赖外置脚本,可维护性更强。
内容的提问来源于stack exchange,提问作者Naveen Kumar
相关产品推荐
相关产品推荐

