使用 AzureRM 提供程序从 terraform_remote_state 中读取

Reading from terraform_remote_state with AzureRM provider

我正在尝试在一个模块中部署一个 VNET,并将远程状态的子网 ID 存储在 Azure Blob 存储中。

我看到我的输出似乎正确存储在远程状态 blob 中。

当我试图读取另一个模块中的子网 ID 时出现问题

terraform {
  backend "azurerm" {
    storage_account_name  = "mystorage"
    container_name        = "tfstate"
    key                   = "terraform.tfstate"

  }
}

resource "azurerm_subnet" "defaultsubnet" {
  name  = "default"
  address_prefix = "10.10.1.0/24"
  resource_group_name = "my-rg"
  virtual_network_name = "my-vnet"
}

output "id" {
  value = "${azurerm_subnet.defaultsubnet.id}"
}
"outputs": {
                "id": {
                    "sensitive": false,
                    "type": "string",
                    "value": "/subscriptions/***/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/default"
                },
data "terraform_remote_state" "sub" {
  backend = "azurerm"
  config = {
    storage_account_name = "mystorage"
    container_name       = "tfstate"
    key                  = "terraform.tfstate"

  }
}

resource "azurerm_kubernetes_cluster" "aks" {
.....
    agent_pool_profile {
        vnet_subnet_id = "${data.terraform_remote_state.sub.id}"
    }
}

vnet_subnet_id = "${data.terraform_remote_state.sub.id}"

此行失败并显示以下消息:

Error running plan: 1 error(s) occurred:\n\n* azurerm_kubernetes_cluster.aks: Can not parse \"agent_pool_profile.0.vnet_subnet_id\" as a resource id: Cannot parse Azure ID: parse 2019-04-09 15:21:55.916021 +0000 UTC: invalid URI for request\n\n\n"}

它以某种方式将子网 ID 转换为日期。甚至认为我在这里发现了类似的问题 https://github.com/hashicorp/terraform/issues/20147 我仍然无法将该解决方法应用到我的案例中。

您应尽可能避免使用远程状态数据源并使用不利于您的提供商的本机数据源。

在这种情况下,您应该改用 azurerm_subnet data source

data "azurerm_subnet" "subnet" {
  name                 = "default"
  virtual_network_name = "my-vnet"
  resource_group_name  = "my-rg"
}

resource "azurerm_kubernetes_cluster" "aks" {
  #...
  agent_pool_profile {
    vnet_subnet_id = "${data.azurerm_subnet.subnet.id}"
  }
}