使用AzureRM提供程序从terraform_remote_state读取

问题描述 投票:1回答:1

我正在尝试在一个模块中部署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}”

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

运行计划出错:发生1个错误:\ n \ n * azurerm_kubernetes_cluster.aks:无法解析\“agent_pool_profile.0.vnet_subnet_id \”作为资源ID:无法解析Azure ID:解析2019-04-09 15: 21:55.916021 +0000 UTC:请求的URI无效\ n \ n \ n“}

不知何故,它将子网ID转换为Date。甚至以为我在这里找到了类似的问题https://github.com/hashicorp/terraform/issues/20147我仍然无法将这种解决方法应用于我的案例。

azure terraform terraform-provider-azure
1个回答
1
投票

在可能的情况下,您应该避免使用远程状态数据源并使用对您的提​​供程序有效的本机数据源。

在这种情况下,您应该使用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}"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.