在 Terraform 中传递大小变量

Passing size variable in Terraform

我不太确定该怎么做。

我得到了一个 Terraform 代码来在 Azure 上构建一个 Linux 虚拟机。尺寸在代码中预先定义。我想知道如何定义 VM 大小,以便用户可以通过 CLI 中的预定义变量传递大小。

当前用户可以在 CLI 中传递的变量仅限 Azure 区域:

variable "location" {
    type = string
    description = "Azure location of Terraform deployment"
    default = "canadacentral"
}

例如,用户将在何处传递 terraform apply -var "location=eastus",但是我希望允许用户也传递类似 的内容-var "size=small".

例如,

small 将代表 Standard_DS1_v2,其中 medium 将而是使用 Standard_B2ms.

您可以在配置中声明另一个变量:

variable "vm_size" {
  type        = string
  description = "The size of the Linux virtual machine"

  # validation block for restricting inputs to recognized sizes
  validation {
    condition     = contains(["small", "medium"], var.vm_size)
    error_message = "Valid vm_size inputs are 'small' or 'medium'."
  }
}

然后用户将能够传递虚拟机大小的字符串。然后我们可以创建一个从用户输入键到 Azure 大小值对应的映射:

locals {
  vm_size = {
    "small"  = "Standard_DS1_v2"
    "medium" = "Standard_B2ms"
  }
}

现在我们可以从 local.vm_size[var.vm_size] 等用户变量输入中解析 A​​zure VM 大小。然后我们可以正常使用资源中的这些:

resource "azurerm_windows_virtual_machine" "this" {
  ...
  size = local.vm_size[var.vm_size]
  ...
}

如果需要,您还可以使用 lookup 函数提供默认值:

# default to small size
lookup(local.vm_size, var.vm_size, "Standard_DS1_v2")