terraform 可以并行运行“应用”多个基础设施/工作空间吗?

kar*_*s27 7 python azure terraform terraform0.12+

我们有一个 terraform 实例和脚本,可以在 azure 中创建基础设施。我们希望使用相同的脚本为 azure 上的每位客户创建/更新/销毁隔离的基础设施。我们通过为每个客户端分配一个工作区、不同的 var 文件并使用 azure 上的后端远程状态文件来实现这一目标。

我们的目的是创建一个包装器 python 程序,它可以创建多个线程并触发 terraform 并行应用于所有工作区。这似乎不起作用,因为 terraform 一次只运行一个工作区。关于如何实现适用于不同工作空间的 terraform 并行执行的任何建议/建议?

Mar*_*ins 8

同时运行多个 Terraform 进程是安全的,只要:

  • 它们在状态存储和锁配置方面都具有完全不同的后端配置。(如果它们具有重叠的锁定配置,那么它们将相互互斥,从而有效地序列化操作,尽管您运行多个副本。)
  • 它们使用一组完全不相交的远程对象,包括由托管资源(resource块)和数据资源(data块)表示的对象。

大多数远程 API 本身不直接支持任何类型的事务或互斥概念,因此 Terraform 通常无法为单个对象提供细粒度的互斥。然而,使用完全独立的远程对象的多次运行不会相互交互。

在删除工作空间(使用terraform workspace delete)的同时对该工作空间执行操作将导致未定义的行为,因为它可能会删除 Terraform 用来跟踪操作的对象。

没有用于同时运行多个操作的内置 Terraform 命令,因此要做到这一点将需要包装 Terraform 的自定义自动化。