在同一资源组中创建两个VM,而Terraform不想存储第一个VM

时间:2019-05-07 09:50:09

标签: terraform azure-virtual-machine

我正在尝试使用Terraform将同一资源组中的两个虚拟机部署到我们的Azure平台。成功创建第一个Terraform后,然后在我更改了第二个VM名称和Azure标记后,想要销毁第一个,从而创建第二个。

我一直在遵循Terraform指南:https://www.terraform.io/docs/providers/azurerm/r/virtual_machine.html

resource "azurerm_virtual_machine" "main" {
  location = "${var.location}"
  name = "${var.vm_name}"
  network_interface_ids = ["${azurerm_network_interface.main.id}"]
  resource_group_name = "${var.resourcegroup_vm}"
  vm_size = "${var.vm_size}"
  tags {
    application = "${var.tag}"
  }

我希望Terraform在更改其变量名和标记后仅创建第二个VM。由于名称和标签更改,不想破坏第一个。

1 个答案:

答案 0 :(得分:0)

Terraform基于HCL(Hashicorp配置语言),它是以*.tf文件的格式编写的。它是一种声明性语言(与命令式相反),这意味着您可以描述所需的状态您要使用的基础架构,Terraform会找出需要进行哪些更改才能达到目的。

如果先创建一个实例,然后更改其名称,这是在告诉Terraform您不再希望您的实例使用旧名称,而是使用新名称。

要部署多个实例,可以使用the count attribute。然后,您可以使用插值在计数器中获取名称和标签,类似于以下内容:

resource "azurerm_virtual_machine" "main" {
  location = "${var.location}"
  name = "${var.vm_name}-${count.index + 1}"
  network_interface_ids = ["${azurerm_network_interface.main.id}"]
  resource_group_name = "${var.resourcegroup_vm}"
  vm_size = "${var.vm_size}"
  tags {
    application = "${var.tag}-${count.index + 1}"
  }

  count = 2
}

注意-${count.index + 1}name标签上附加的application