9

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

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

如果您对如何完成此操作有任何方法或想法,请告诉我。

4

3 回答 3

21

您可以使用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"
}
于 2018-08-07T05:58:43.987 回答
1

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

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

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

于 2018-08-07T07:45:28.493 回答
0

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

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

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

于 2019-05-19T22:58:39.460 回答