【问题标题】:Trigger multiple azure devops Pipelines in Parallel to create VM's on Azure using same Terraform module并行触发多个 azure devops Pipelines 以使用相同的 Terraform 模块在 Azure 上创建 VM
【发布时间】:2021-07-21 17:46:26
【问题描述】:

我有 terraform 模块,例如在 Azure 上创建一个 VM,它在我触发管道时工作。

但是当我触发管道两次时,它无法创建两个 VM。如何操作 terraform State 文件?我能想到的唯一方法是两个在不同的代理中运行多个管道,这行得通吗?

【问题讨论】:

  • 如果每个虚拟机都是独立管理的,那么每个虚拟机都应该有自己的状态文件。
  • Terraform 旨在跟踪创建的资源并在定义更改时更新它们,而不是一次性的、即发即弃的脚本。您可以移动/删除状态文件以使 terraform“忘记”创建的资源 - 但随后它会失去对它们的跟踪。或者,考虑使用 countfor_each 参数 - 即管道可能有一个参数来定义所需 VM 的总数。
  • 移动/删除状态文件是最佳实践吗?开始考虑 Count 和 for each 但我们并不要求每次都创建 2 到 3 个实例。我们没有其他选择吗?我已经寻找答案,但没有运气

标签: azure-devops terraform terraform-provider-azure


【解决方案1】:

我们所做的是创建 terraform“通用”模块(基本上是一个包含 tf 文件的子目录),我们使用不同的参数多次将其导入到 terraform 环境中。

这些我们通常用循环放入一个列表中。

在您的环境中 terraform:

locals {
  azure_vms = [
    { name = "vm1", size = "Standard_B2s" },
    { name = "vm2", size = "Standard_B4s" }
  ]
}

module "my_azure_vm" {
  source   = "./common/my_azure_vm"
  for_each = { for vm in local.azure_vms : vm.name => vm }
  size = each.value.size
  name = each.value.name
}

在常见的 my_azure_vm 中,您可以定义大小和名称的输入,然后使用它们通过您的标准参数创建 VM。

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2022-11-03
    • 1970-01-01
    • 2020-07-04
    • 2021-09-15
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多