Terraform 地形实例枚举

Terraform 地形实例枚举,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我正在尝试将枚举的VM实例注册到Azure备份服务。但是,我得到一个错误: * azurerm_recovery_services_protected_vm.consul_and_vault: source_vm_id must be a single value, not a list 以下是我在Azure中创建VM实例的代码片段: ###############################################################################

我正在尝试将枚举的VM实例注册到Azure备份服务。但是,我得到一个错误:

* azurerm_recovery_services_protected_vm.consul_and_vault: source_vm_id must be a single value, not a list
以下是我在Azure中创建VM实例的代码片段:

###############################################################################
# Deploy VMs and Configure Consul and Vault Services
###############################################################################

resource "azurerm_virtual_machine" "consul" {
  name                             = "consul${count.index + 1}"
  #name                             = "${var.consul_cluster_prefix}-consul-${count.index + 1}"
  location                         = "${var.deployment_location}"
  resource_group_name              = "${var.resource_group_name}"
  availability_set_id              = "${azurerm_availability_set.consul.id}"
  network_interface_ids            = ["${element(azurerm_network_interface.consul_nic.*.id, count.index + 1)}"]
  vm_size                          = "${var.consul_vm_size}"
  delete_os_disk_on_termination    = true
  delete_data_disks_on_termination = true
  count                            = "${var.consul_instance_count}"
  tags {
    ownerinfo            = "${var.ownerinfo}"
    costcenter           = "${var.costcenter}"
    deploymenttype       = "${var.deploymenttype}"
    notificationdistlist = "${var.notificationdistlist}"
    env_info             = "${var.environmentinfo}"
    application_name     = "${var.applicationname}"
    platform             = "${var.platform}"
  }
  storage_image_reference {
    id  ="${var.consul_image_id}"
 }
...
稍后,在创建备份集时,我将尝试引用枚举的VM实例:

##########################################################################################
# AzureRM Virtual Machine Into Azure Recovery Services Vault
##########################################################################################

resource "azurerm_recovery_services_vault" "backup2vault" {
    name    = "azurerecoveryvaulti1"
    location = "${var.deployment_location}"
    resource_group_name = "${var.resource_group_name}"
    sku     = "Standard"
}

resource "azurerm_recovery_services_protection_policy_vm" "consul_daily" {
  name                = "azurerecoveryvaultpolicy1"
  resource_group_name = "${var.resource_group_name}"
  recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"

  backup = {
    frequency = "Daily"
    time      = "23:00"
  }

  retention_daily = {
    count = 1
  }
}

resource "azurerm_recovery_services_protected_vm" "consul_and_vault" {
  resource_group_name = "${var.resource_group_name}"
  recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
  source_vm_id        = "${azurerm_virtual_machine.consul.*.id}"
  backup_policy_id    = "${azurerm_recovery_services_protection_policy_vm.consul_daily.id}"
}

source_vm_id        = "${azurerm_virtual_machine.consul.*.id}"
问题似乎在于变量
source\u vm\u id
引用枚举实例的方式:

##########################################################################################
# AzureRM Virtual Machine Into Azure Recovery Services Vault
##########################################################################################

resource "azurerm_recovery_services_vault" "backup2vault" {
    name    = "azurerecoveryvaulti1"
    location = "${var.deployment_location}"
    resource_group_name = "${var.resource_group_name}"
    sku     = "Standard"
}

resource "azurerm_recovery_services_protection_policy_vm" "consul_daily" {
  name                = "azurerecoveryvaultpolicy1"
  resource_group_name = "${var.resource_group_name}"
  recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"

  backup = {
    frequency = "Daily"
    time      = "23:00"
  }

  retention_daily = {
    count = 1
  }
}

resource "azurerm_recovery_services_protected_vm" "consul_and_vault" {
  resource_group_name = "${var.resource_group_name}"
  recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
  source_vm_id        = "${azurerm_virtual_machine.consul.*.id}"
  backup_policy_id    = "${azurerm_recovery_services_protection_policy_vm.consul_daily.id}"
}

source_vm_id        = "${azurerm_virtual_machine.consul.*.id}"
…这会导致错误:

 azurerm_recovery_services_protected_vm.consul_and_vault: source_vm_id must be a single value, not a list
问题是,在我的案例中如何引用枚举实例

非常感谢您的反馈


A.

您需要将
azurerm\u恢复\u服务\u受保护的\u虚拟机.concur\u和\u保险库
资源枚举到与
azurerm\u虚拟机.concur
资源相同的长度。然后,您可以引用每个
azurerm\u虚拟机.consul.id
作为
count.index
中的一个元素,其元素编号与
azurerm\u虚拟机.consul
相同。然后看起来像:

resource "azurerm_recovery_services_protected_vm" "consul_and_vault" {
  count               = "${var.consul_instance_count}"
  resource_group_name = "${var.resource_group_name}"
  recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
  source_vm_id        = "${azurerm_virtual_machine.consul.*.id[count.index]}"
  backup_policy_id    = "${azurerm_recovery_services_protection_policy_vm.consul_daily.id}"
}

还要注意,
azurerm_virtual_machine.consur.*.id
语法将
id
作为列表输出。

谢谢Matt,你太棒了!!