当你使用多个租户ID时,如何在Azure中创建资源组?

31moq8wy  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(114)

问题是我有2个租户ID(D和V)和2个订阅ID(D和V),因为我为2个不同的客户工作。
此cmd用于更改租户ID

az login --tenant <myTenantID>

此cmd用于更改订阅ID

az login --subscription <mysubscriptionID>

目前我正在处理V订阅/租户ID,我想切换到D订阅/租户ID。
我已经运行了上面提到的这些命令,浏览器页面打开,我可以登录。但是当我运行我的terraform命令init,plan and apply时。terraform代码在V订阅/租户ID中创建新的资源组,而不是在我想要的D订阅/租户ID中。
顺便说一句,目前我的默认帐户是D,但它仍然创建在V帐户。

8zzbczxx

8zzbczxx1#

您可以通过传递relative参数,根据需要定制azurerm terraform提供程序。

地形代码

单个目录结构(取决于您,但从我的视点来看不推荐)

如果您想从一个目录管理两个租户,并且只有一个providers.tf,那么您还必须使用terraform提供程序的alias特性。

*提供者.tf

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.37.0"
    }
  }
}

provider "azurerm" {
  alias = "tenant_D_sub_D"
  features {}
  tenant_id       = "tenant_D_id"
  subscription_id = "subscription_D_id"
}

provider "azurerm" {
  alias = "tenant_V_sub_V"
  features {}
  tenant_id       = "tenant_V_id"
  subscription_id = "subscription_V_id"
}

*资源组.tf

## Create respective variables[name,location] definitions in your variables.tf 
resource "azurerm_resource_group" "stackoverflow_D" {
  provider = azurerm.tenant_D_sub_D

  name     = var.name
  location = var.location
}

resource "azurerm_resource_group" "stackoverflow_V" {
  provider = azurerm.tenant_V_sub_V

  name     = var.name
  location = var.location
}
每个租户的目录结构

*目录树

.
├── tenant1
│   ├── sub1
│   │   └── providers.tf
│   └── sub2
│       └── providers.tf
└── tenant2
    ├── sub1
    │   └── providers.tf
    └── sub2
        └── providers.tf

*任何Sub中的providers.tf

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.37.0"
    }
  }
}

provider "azurerm" {
  features {}
  tenant_id       = "respective_tenant_id"
  subscription_id = "respective_subscription_id"
}

从技术上讲,您可以从此处删除这些tenant_idsubscription_id参数,但您必须通过az cli或环境变量确保选择了正确的租户和订阅ID。类似的providers.tf文件可用于其他订阅。

*资源组.tf

## Create respective variables[name,location] definitions in your variables.tf
resource "azurerm_resource_group" "stackoverflow" {

  name     = var.name
  location = var.location
}

这将大大简化您的配置并减少维护工作。

重要注意事项

  • 请注意,在通过单个目录或每个租户目录结构进行部署时,服务主体/用户应该对租户和订阅都具有权限。

文档URL

  • 更多选项请参考azurerm-terraform-provider官方文档。
  • 请参阅别名多提供程序配置平台文档。
qxgroojn

qxgroojn2#

我认为您需要az account命令。
您可以将您的帐户列示如下(表格便于阅读信息)

az account list --output table

您可以通过查询标志来查询您当前的默认账户是哪个账户。

az account list --query "[?isDefault]"

最后,您可以使用以下命令之一更改帐户,使用前面运行的命令中的订阅名称或订阅ID列出您的订阅/帐户。

az account set --subscription "<YOUR SUBSCRIPTION NAME>"
az account set --subscription "<YOUR SUBSCRIPTION ID>"

相关问题