Terraform 实例枚举

Terraform Instance enumeration

我正在尝试将枚举的 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 引用枚举实例的方式上:

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_recovery_services_protected_vm.consul_and_vault 资源枚举到与 azurerm_virtual_machine.consul 资源相同的长度。然后,您可以将每个 azurerm_virtual_machine.consul.id 引用为 count.index 中与 azurerm_virtual_machine.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.consul.*.id 语法将 id 作为列表输出。