如何使用地形模板将 Azure VM 添加到恢复服务保管库



我正在开发一个地形模板,以自动将新构建的 Azure VM 注册到 Azure 恢复服务保管库。我可以在 Azurerm 提供程序中找到的所有资源都是

azurerm_recovery_services_protection_policy_vm

azurerm_recovery_services_protected_vm

azurerm_recovery_services_vault

似乎他们都无法将 VM 注册到恢复服务保管库。Terraform有这个功能吗?

您可以在 Terraform 中看到azurerm_recovery_services_protected_vm,参数source_vm_id显示:

指定要备份的 VM 的 ID

它可以引用要在恢复服务保管库中备份的 VM。使用azurerm_recovery_services_protection_policy_vm创建策略,使用azurerm_recovery_services_vault创建恢复服务保管库。

更新

可以使用恢复保管库备份 VM,并通过 Terraform azurerm_recovery_services_protected_vm。代码是这样的:

data "azurerm_virtual_machine" "azurevm" {
    name    = "vm_name"
    resource_group_name = "group_name"
}
resource "azurerm_resource_group" "rg" {
    name    = "recovery_group_name"
    location = "eastus"
}
resource "azurerm_recovery_services_vault" "vault" {
    name    = "azurerecoveryvaulti1"
    location = "${azurerm_resource_group.rg.location}"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    sku     = "Standard"
}
resource "azurerm_recovery_services_protection_policy_vm" "test" {
  name                = "azurerecoveryvaultpolicy1"
  resource_group_name = "${azurerm_resource_group.rg.name}"
  recovery_vault_name = "${azurerm_recovery_services_vault.vault.name}"
  backup = {
    frequency = "Daily"
    time      = "23:00"
  }
  retention_daily = {
    count = 1
  }
}
resource "azurerm_recovery_services_protected_vm" "example" {
  resource_group_name = "${azurerm_resource_group.rg.name}"
  recovery_vault_name = "${azurerm_recovery_services_vault.vault.name}"
  source_vm_id        = "${data.azurerm_virtual_machine.azurevm.id}"
  backup_policy_id    = "${azurerm_recovery_services_protection_policy_vm.test.id}"
}

对于测试,我创建新的恢复保险箱。您可以将现有的 with 与 data azurerm_recovery_services_vault 一起使用。创建新策略,然后使用上述azurerm_recovery_services_protected_vm创建备份 VM。

资源

类型azurerm_recovery_services_protected_vm不再受支持 hashicorp/azurerm 提供程序

您可以使用azurerm_backup_protected_vm代替azurerm_recovery_services_protected_vm

resource "azurerm_backup_policy_vm" "vm_backup_policy" {
  count               = var.vm_backup_policy_name != "" ? 1 : 0
  name                = var.vm_backup_policy_name
  resource_group_name = var.resource_group_name
  recovery_vault_name = azurerm_recovery_services_vault.vault.name
  timezone = var.vm_backup_policy_timezone
  backup {
    frequency = var.vm_backup_policy_frequency
    time      = var.vm_backup_policy_time
  }
  retention_daily {
    count = var.vm_backup_daily_policy_retention
  }
  dynamic "retention_weekly" {
    for_each = var.vm_backup_weekly != {} ? [var.vm_backup_weekly] : []
    content {
      count    = lookup(retention_weekly.value, "count")
      weekdays = lookup(retention_weekly.value, "weekdays")
    }
  }
  dynamic "retention_monthly" {
    for_each = var.vm_backup_monthly != {} ? [var.vm_backup_monthly] : []
    content {
      count    = lookup(retention_monthly.value, "count")
      weekdays = lookup(retention_monthly.value, "weekdays")
      weeks    = lookup(retention_monthly.value, "weeks")
    }
  }
  dynamic "retention_yearly" {
    for_each = var.vm_backup_yearly != {} ? [var.vm_backup_yearly] : []
    content {
      count    = lookup(retention_yearly.value, "count")
      weekdays = lookup(retention_yearly.value, "weekdays")
      weeks    = lookup(retention_yearly.value, "weeks")
      months   = lookup(retention_yearly.value, "months")
    }
  }
}
resource "azurerm_backup_protected_vm" "vm" {
    resource_group_name             = var.resource_group_name
    recovery_vault_name             = var.recovery_vault_custom_name
    source_vm_id                    = var.source_vm_id
    backup_policy_id                = azurerm_backup_policy_vm.vm_backup_policy.id
}

最新更新