【问题标题】:Creating two VMs in the same resource group without Terraform wanting to destoy the first one在同一资源组中创建两个 VM,但 Terraform 不希望销毁第一个
【发布时间】:2019-09-24 22:58:08
【问题描述】:

我正在尝试使用 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。不想因为名称和标签的变化而破坏第一个。

【问题讨论】:

  • 我认为您需要复制代码或使用迭代才能使其工作。或将此代码复制到一个新文件夹并在该文件夹中启动一个新的 terraform“项目”
  • @4c74356b41 - 是的,如果我只是将代码复制到一个带有辅助 VM 的名称 + 标记的新项目中,它可能会起作用,但如果你可以使用相同的项目,它会容易得多创建多个名称更改的虚拟机。
  • @4c74356b41 - 从新项目部署第二个虚拟机时它工作正常。但是我仍然有兴趣知道是否可以在同一个项目中做。将多个 VM 部署到同一个资源组时更容易。
  • 如果要在同一个项目中创建多个vm,只需在vm块中设置count即可。

标签: terraform azure-virtual-machine


【解决方案1】:

Terraform 基于 HCL(Hashicorp 配置语言),这是编写 *.tf 文件的格式。它是一种声明性语言(与命令式相反),这意味着您可以描述您希望基础架构所需的状态to be 和 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}nameapplication 标签。

【讨论】:

  • 好吧,我明白你在说什么。我刚刚尝试了 count 属性,但这并不是我想要的。但是,我知道 Terraform 不是为了以这种方式使用而构建的。
猜你喜欢
  • 2021-02-15
  • 2022-07-13
  • 1970-01-01
  • 2019-06-16
  • 2020-12-27
  • 2022-07-28
  • 2020-12-17
  • 2020-10-24
  • 1970-01-01
相关资源
最近更新 更多