在多个订阅中部署Terraform资源组

在多个订阅中部署Terraform资源组,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我正在尝试使用Terraform和Terragrunt在Azure中创建一组不同的资源。 除其他外,我正在部署订阅和资源组 我有一个包含一些元数据的中心变量文件,并基于此部署资源。 我可以部署我想要的所有订阅,但我有一个问题,因为我想在这些订阅中部署资源组,我不确定如何以最佳方式进行部署,因为资源组资源没有订阅参数 变量文件类似于: inputs = { departments = [ { name = "test", reg

我正在尝试使用Terraform和Terragrunt在Azure中创建一组不同的资源。 除其他外,我正在部署订阅和资源组

我有一个包含一些元数据的中心变量文件,并基于此部署资源。 我可以部署我想要的所有订阅,但我有一个问题,因为我想在这些订阅中部署资源组,我不确定如何以最佳方式进行部署,因为资源组资源没有订阅参数

变量文件类似于:

inputs = {

    departments = [
    {
        name = "test",
        region = "West Europe"
        email = "something@something.com"

    },
    {
        name = "test2"
        region = "West Europe"
        email = "someone@something.com"
    }
]
}

因此,在我的资源组模块中,我将其定义如下:

resource "azurerm_resource_group" "example" {
for_each = {for dep in var.departments: dep.name => dep}

  name     = "rg-${each.value.name}"
  location = "${each.value.region}"
}
这没关系,但我需要将上下文切换到正确的订阅,以便将资源组放置在适当的sub中。
有什么想法吗?

要在多个订阅中部署资源,您可以使用多个提供者,您可以获得更多详细信息和下面的示例代码:

provider "azurerm" {
    subscription_id = "xxxxxx"
    tenant_id = "xxxxxx"
    client_id = "xxxxxx"
    client_secret = "xxxxxx"
}

provider "azurerm" {
    alias = sub2
    subscription_id = "xxxxxx"
    tenant_id = "xxxxxx"
    client_id = "xxxxxx"
    client_secret = "xxxxxx"
}

resource "azurerm_resource_group" "example1" {
    provider = azurerm
    ...
}

resource "azurerm_resource_group" "example1" {
    provider = azurerm.sub2
    ...
}
如果在terraform中使用for_,则可以在输入中添加别名选项:

inputs = {

    departments = [
      {
        name = "test",
        provider = "azurerm"
        region = "West Europe"
        email = "something@something.com"

      },
      {
        name = "test2"
        provider = "azurerm.sub2"
        region = "West Europe"
        email = "someone@something.com"
      }
    ]
}

这只是一个例子,但这是解决办法。您可以根据需要更改代码。

此问题有任何更新吗?它能解决你的问题吗?如果您有任何回复,请告诉我。很遗憾,这不起作用,因为订阅也是基于输入文件创建的。例如,它将创建一个名为“{name}-sub”的子对象。因此,我实际上无法按照您描述的方式定义提供程序。@jonashoye您似乎只能使用本地exec执行Azure CLI命令来在新订阅中创建资源。首先,使用命令
az account set--subscription subscription\u id
设置当前订阅,然后创建资源。