我正在尝试在一个模块中部署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我仍然无法将这种解决方法应用于我的案例。
在可能的情况下,您应该避免使用远程状态数据源并使用对您的提供程序有效的本机数据源。
在这种情况下,您应该使用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}"
}
}