使用AzureRM Provider读取Terraform远程状态时子网ID解析异常
解决Terraform读取远程状态子网ID时被解析为日期的错误
我一眼就看出问题所在了——你在读取远程状态的时候,访问属性的方式错了!
问题根源
data.terraform_remote_state.sub.id 并不是你定义的子网ID输出值,而是这个远程状态数据源本身的内置id属性,它的值其实是状态的最后更新时间戳(也就是你错误日志里看到的2019-04-09 15:21:55.916021 +0000 UTC),这也就是为什么系统会把它当成日期格式解析,进而报错无法识别为Azure资源ID。
你在第一个模块里定义的输出值,是存储在远程状态的outputs字段下的,必须通过outputs路径才能正确访问到。
修正后的代码
把读取子网ID的代码改成下面这样:
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 { # Terraform 0.12+ 推荐直接属性访问 vnet_subnet_id = data.terraform_remote_state.sub.outputs.id # 如果是更老的Terraform版本,也可以用插值语法:"${data.terraform_remote_state.sub.outputs.id}" } }
额外说明
- 你之前存储子网ID的模块配置完全正确,远程状态里的输出内容也没问题,问题就出在读取时的属性路径错误。
- 如果使用Terraform 0.12及以上版本,建议使用直接属性访问的写法,不用包裹插值语法的引号,代码更简洁易读。
内容的提问来源于stack exchange,提问作者maximumfrustration
相关产品推荐
相关产品推荐

