Terraform - 部署到多个 Azure 订阅

Posted

技术标签:

【中文标题】Terraform - 部署到多个 Azure 订阅【英文标题】:Terrafrom - Deploy to multiple azure subscriptions 【发布时间】:2019-01-13 19:51:07 【问题描述】:

我一直在尝试使用相同的 terraform 堆栈在多个 Azure 订阅中部署资源。还需要在不同订阅中的这些资源之间传递参数。我曾尝试使用多个提供程序,但不支持。

Error: provider.azurerm: multiple configurations present; only one configuration is allowed per provider

如果您有实现此目的的方法或想法,请告诉我。

【问题讨论】:

在单独的容器中启动每个 terraform 进程? 【参考方案1】:

您可以通过alias (doku) 使用多个提供程序。

# The default provider configuration
provider "azurerm" 
  subscription_id = "xxxxxxxxxx"


# Additional provider configuration for west coast region
provider "azurerm" 
  alias  = "y"
  subscription_id = "yyyyyyyyyyy"

然后指定何时要使用替代提供者:

resource "azurerm_resource_group" "network_x" 
  name     = "production"
  location = "West US"


resource "azurerm_resource_group" "network_y" 
  provider = "azurerm.y"
  name     = "production"
  location = "West US"

【讨论】:

完美,感谢 Markus 和 @giulio-vian Hii @Markus ...我正在解决一个问题并遇到了类似的问题,我可以通过您的方法解决,所以谢谢。还要感谢 Parvez 提出这个问题。我只是想像任何其他资源一样询问我是否希望将策略分配给 azure 中的多个订阅并准备使用多个分配块但只使用一个 policy_set_definition 块,那么它可以完成吗? (使用多个提供者的这种技术,使用单个定义块?) 嗨@SwarnabjaBhaumik:为了获得更好的帮助,请提出一个单独的问题,展示您为解决和提供初始代码示例所做的努力。很高兴这个答案对您有所帮助。 嗨@Markus,谢谢。正如你所建议的,我已经提出了一个单独的问题,与我的疑问有关。【参考方案2】:

Markus 的答案是正确的,但它是正确的解决方案如果您需要在同一组 Terraform 源中访问多个订阅。

如果您的目的是将一个订阅用作沙盒,而将另一个用作真实订阅,您只需将提供程序信息移出 Terraform 脚本即可。管理此问题的方法不止一种:

Workspaces Backend configuration Terragrunt 样式的 bash/Powershell/python 中的包装脚本 符号链接也可用于共享多个文件夹中的文件

我使用最后三个的组合,因为工作空间对我们的需求来说太死板了。

【讨论】:

【参考方案3】:

作为 Terraform 初学者,我得到这个错误代码的原因很愚蠢,也许这里有人有同样的问题:

我将main.tf 文件的备份保存为mymainbackup1.tf 之类的文件,即使不是main.tf,Terraform 也将其解释为真实的 .tf 文件,因此它认为我注册了多个提供商。

我将文件更改为 .txt 扩展名,Terraform 停止解释该文件并停止给出错误。

【讨论】:

以上是关于Terraform - 部署到多个 Azure 订阅的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 terraform 将多个 IP 动态添加到 azure servicebus 防火墙

如何使用一个 terraform 脚本和不同的变量值管理多个不同环境的部署

Terraform - 将类型对象作为参数传递给 Azure 模板部署

Terraform 部署 azure 函数导致“无法下载 ZIP FILE.txt”

使用 Terraform 部署 Azure 资源时如何解决插件错误?

使用 Terraform Azure 的多个 VM 和磁盘