使用AzureRM提供程序从terraform_remote_state读取

时间:2019-04-09 15:28:56

标签: azure terraform terraform-provider-azure

我试图在一个模块中部署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转换为日期。甚至以为我在这里https://github.com/hashicorp/terraform/issues/20147发现了类似的问题,我仍然无法将该变通方法应用于我的案件。

1 个答案:

答案 0 :(得分:0)

在可能的情况下,应避免使用远程状态数据源,而应使用对提供商不利的本机数据源。

在这种情况下,您应该改用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}"
  }
}