我一直在尝试使用相同的Terraform堆栈在多个Azure订阅中部署资源。还需要在不同订阅中的这些资源之间传递参数。我曾尝试使用多个提供程序,但不支持。
Error: provider.azurerm: multiple configurations present; only one configuration is allowed per provider
如果您有关于如何完成此操作的方法或想法,请告诉我。
答案 0 :(得分:3)
您可以通过使用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"
}
答案 1 :(得分:0)
Markus的答案是正确的,但是如果您需要访问同一套Terraform源中的多个订阅,这是正确的解决方案。
如果您的目的是使用一个订阅作为沙箱,而另一个则用作真正的订阅,则只需将提供者信息移出Terraform脚本即可。有多种方法可以解决此问题:
由于工作空间太僵硬,无法满足我们的需求,因此我将最后三个结合使用。
答案 2 :(得分:0)
我作为Terraform初学者的一个愚蠢的原因得到了此错误代码,也许这里有人遇到了相同的问题:
我将main.tf
文件的备份保存为mymainbackup1.tf
之类的文件,即使不是main.tf
,Terraform也将其解释为真实的.tf文件,因此它认为我已经注册了多个提供商。
我将文件更改为.txt扩展名,Terraform停止解释该文件并停止提供错误。