如何通过azurerm_backup_protected_vm立即触发Azure VM备份
问题说明
使用Terraform配置Azure恢复服务保管库(Recovery Service Vault)的VM备份时,备份策略、保护关联配置完成后,备份状态显示警告「初始备份待执行」,需要在配置完成后立即触发首次备份,现有配置代码如下:
resource "azurerm_recovery_services_vault" "vault" { name = var.vaultname location = var.location resource_group_name = var.rgname sku = "Standard" soft_delete_enabled = false } resource "azurerm_backup_policy_vm" "example" { name = "test-recovery-vault-policy" resource_group_name = var.rgname recovery_vault_name = azurerm_recovery_services_vault.vault.name timezone = "UTC" backup { frequency = "Daily" time = "23:00" } retention_daily { count = 10 } retention_weekly { count = 42 weekdays = ["Sunday", "Wednesday", "Friday", "Saturday"] } retention_monthly { count = 7 weekdays = ["Sunday", "Wednesday"] weeks = ["First", "Last"] } retention_yearly { count = 77 weekdays = ["Sunday"] weeks = ["Last"] months = ["January"] } } resource "azurerm_backup_protected_vm" "vm1" { resource_group_name = var.rgname recovery_vault_name = var.vaultname source_vm_id = var.vm_id backup_policy_id = azurerm_backup_policy_vm.example.id }
原因说明
azurerm_backup_protected_vm资源仅完成VM和备份策略、保管库的关联绑定,不会自动触发首次备份。默认首次备份会按照你配置的备份策略指定时间(当前配置为UTC每日23:00)执行,在计划时间到达前就会显示「初始备份待执行」的警告状态。
实现方案
通过null_resource配合本地执行Azure CLI命令的方式,在备份保护关联创建完成后自动触发即时备份,操作要求如下:
- 确保Terraform运行环境已安装Azure CLI并完成账号登录,拥有恢复服务保管库的备份操作权限
- 在现有配置基础上新增如下代码块:
resource "null_resource" "trigger_initial_vm_backup" { # 明确依赖备份保护项,等保护项创建完成后再执行 depends_on = [azurerm_backup_protected_vm.vm1] provisioner "local-exec" { command = <<EOT sleep 20 az backup protection backup-now \ --resource-group ${var.rgname} \ --vault-name ${var.vaultname} \ --backup-management-type AzureIaasVM \ --item-name ${var.vm_name} \ --retain-until $(date -d "+10 days" -u +"%Y-%m-%dT%H:%M:%SZ") EOT } }
配置说明
- 开头的
sleep 20是等待Azure后端完成VM备份保护的注册流程,避免接口调用时报保护项不存在的错误,可根据实际环境响应速度调整等待时长 --retain-until参数指定本次即时备份的过期时间,示例设置为10天后过期,和你配置的每日备份保留10天的规则对齐,可根据实际需求调整- 代码中用到的
var.vm_name需要提前定义为目标VM的名称变量,如果你已经通过数据源或其他资源获取到VM名称可直接替换引用
如果你不想依赖本地Azure CLI环境,也可以替换为
azapi_resource调用Azure Backup REST API实现相同效果,适配无CLI的CI/CD流水线场景。
内容的提问来源于stack exchange,提问作者Muthu
相关产品推荐
相关产品推荐

