AzureRM 多个提供商中断

AzureRM Multiple Providers breaking

我不确定我是否做错了什么,但我正在尝试使用多个提供商[带有别名 + 订阅,以便我可以在不同的 sub 中使用 keyvault]

简化事情。


稍作更新。我消除了任何复杂性,并在一个简单的 main.tf:

中执行了以下操作
terraform {
  required_version = ">= 0.13.0"

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=2.93.1"
    }
    random = {
      source  = "hashicorp/random"
      version = "=3.1.0"
    }
  }
}


provider "azurerm" {
  features {}
  skip_provider_registration = true
}


provider "azurerm" {
  skip_provider_registration = true
  alias           = "kvaccess"
  subscription_id = "subforkvaccess"
  features {}
}


data "azurerm_key_vault" "this" {
  provider            = azurerm.kvaccess
  name                = "kvname"
  resource_group_name = "kvresourcegroup"
}


resource "azurerm_key_vault_secret" "secret" {
  key_vault_id = data.azurerm_key_vault.this.id
  name         = "test"
  value        = "test"
  provider     = azurerm.kvaccess
}

密钥已创建,然后超时并出现以下错误:

2022-03-18T19:45:54.921-0400 [ERROR] vertex "azurerm_key_vault_secret.secret" error: Provider produced inconsistent result after apply
╷
│ Error: Provider produced inconsistent result after apply
│
│ When applying changes to azurerm_key_vault_secret.secret, provider "provider[\"registry.terraform.io/hashicorp/azurerm\"].kvaccess" produced an unexpected new value: Root resource was present, but now
│ absent.
│
│ This is a bug in the provider, which should be reported in the provider's own issue tracker.

没有子模块或任何花哨的东西。只是一个主要的 TF 试图在本地创建一个秘密。我是不是做错了什么?

在我的环境中测试工作正常。使用下面的 terraform 代码,我已在您的代码中进行了更改。

  1. 您未能创建资源组,或者如果您想使用现有资源组,请使用数据源
  2. 确保在 terraform apply
  3. 之前点击 terraform init

地形代码:

        terraform {
        required_version = ">= 0.13.0"
        required_providers {
        azurerm = {
        source  = "hashicorp/azurerm"
        version = "=2.93.1"
        }
        random = {
        source  = "hashicorp/random"
        version = "=3.1.0"
        }
        }
        }
        provider "azurerm" {
        
        features {}
        skip_provider_registration = true
        }
        provider "azurerm" {
        skip_provider_registration = true
        alias  = "kvaccess"
        subscription_id = "b83XXXXXXXXXXXXXXXXX-b5ba-2b83"
        features {}
        }
        data "azurerm_resource_group" "example" {
        name = "v-XXXXXXdtree"
        }
        data "azurerm_key_vault" "this" {
        provider  = azurerm.kvaccess
        name  = "kvname342"
        resource_group_name = data.azurerm_resource_group.example.name
        }
        resource "azurerm_key_vault_secret" "secret" {
        key_vault_id = data.azurerm_key_vault.this.id
        name  = "test"
        value  = "test"
        provider  = azurerm.kvaccess
        }

输出

存在与 Hashicorp 一起打开的现有错误 11059

它已被讨论为一个不能总是复制的偶发问题,并且与 ARM 缓存不同步有关。

讨论了以下变通步骤:

  1. 捕获这个确切的错误
  2. 将具有任何值(如 test:test)的标签添加到 KeyVault 资源
  3. 运行 terraform import 命令用于显式导入已经存在的现有秘密,并且 terraform 在应用阶段无法获得。
  4. 再次执行apply即可通过

虽然这似乎不太可能在您的自动化中实现,但我认为除了上面讨论的解决方法之外没有其他解决方法。

免责声明::我无法复制各种场景。因此,分享 as-is..