Terraform 显式传递多个提供者

Terraform explicitly pass multiple provider

我使用 terraform 来满足所有基础设施需求。

我的所有配置都存储在 Azure KV 中,例如订阅“DEVOPS”。我所有用于测试的基础设施都是在订阅“Staging”中创建的

以下是我的TF代码

variable name {}
variable location {}
variable tags {}
 
provider "azurerm" {
    subscription_id = "Staging"
    features()
}

provider "azurerm" {
    subscription_id = "DEVOPS"
    features()
    alias = "devopskv"
}

module "resource_group" {
  source = "../modules/azure-resource-group"

    name     = var.name
    location = var.location
    tags     = var.tags
    
    providers = {
        azurerm = azurerm
        azurerm.devopskv = azurerm.devopskv
    }   
}

## Module



data "azurerm_key_vault" "kv" {
  name                = "my-kv"
  resource_group_name = "my-kv-rg"
  provider            = azurerm.devopskv
}

data "azurerm_key_vault_secret" "name" {
  name         = var.name
  key_vault_id = data.azurerm_key_vault.kv.id
  provider     = azurerm.devopskv
}

resource "azurerm_resource_group" "resource_group" {
  name     = data.azurerm_key_vault_secret.name.value
  location = var.location
  tags     = var.tags
}

预期输出: RG 在 Staging 订阅 Staging 中创建,名称从驻留在 DEVOPS 订阅中的 KV 中获取。

实际输出: 错误: 未找到资源组“my-kv-rg”。

跟踪详细信息: TF 正在尝试从订阅“Staging”而非“DEVOPS”中获取 KV“my-kv”。

上面有什么问题吗?

要在模块中使用多个提供程序,我建议您在模块中也设置所有提供程序。看看link。应该是这样的:

## Module

provider "azurerm" {}

provider "azurerm" {
  alias = "devopskv"
}

data "azurerm_key_vault" "kv" {
  name                = "my-kv"
  resource_group_name = "my-kv-rg"
  provider            = azurerm.devopskv
}

data "azurerm_key_vault_secret" "name" {
  name         = var.name
  key_vault_id = data.azurerm_key_vault.kv.id
  provider     = azurerm.devopskv
}

resource "azurerm_resource_group" "resource_group" {
  name     = data.azurerm_key_vault_secret.name.value
  location = var.location
  tags     = var.tags
}

另外,你还需要设置模块内部的变量来接受根级的输入。如果您已经这样做了,请忽略此建议。