Terraform v0.9.11使用locals报错“Unknown root level key”求助
解决Terraform v0.9.11中
locals根级别报错问题 你遇到的这个问题很典型——Terraform v0.9.11不支持在根模块中使用locals块,根级locals是Terraform v0.10.0才正式引入的特性,而你参考的官方文档是针对新版本的,所以直接照搬会触发Unknown root level key: locals错误。
下面给你两个可行的解决思路:
方案一:用带默认值的变量模拟locals效果
在根模块中,你可以把原本的本地变量换成带默认值的variable块,这样既不需要用户输入,又能实现类似本地变量的复用效果:
# 用带默认值的变量替代locals variable "default_name_prefix" { default = "${var.project_name}-web" } resource "aws_instance" "module_instance" { ami = "<my ami>" # 示例:如果需要用到这个前缀,比如给实例加标签 tags { Name = "${var.default_name_prefix}-instance" } } # 别忘了定义project_name变量 variable "project_name" { description = "Name of the project" }
这个方案不需要调整代码结构,最适合快速解决问题。
方案二:将代码迁移到子模块中
Terraform v0.9.x虽然不支持根模块的locals,但子模块是支持locals块的。你可以把相关代码放到子模块里,然后在根模块中引用它:
- 创建子模块目录(比如
./web_instance),在目录下创建main.tf:
locals { default_name_prefix = "${var.project_name}-web" } resource "aws_instance" "module_instance" { ami = "${var.ami}" tags { Name = "${local.default_name_prefix}-instance" } } # 定义子模块需要的输入变量 variable "project_name" {} variable "ami" {}
- 在根模块的
main.tf中引用这个子模块:
module "web_instance" { source = "./web_instance" project_name = "<你的项目名称>" ami = "<my ami>" }
这个方案更符合模块化的最佳实践,适合后续代码扩展。
内容的提问来源于stack exchange,提问作者Snowcrash
相关产品推荐
相关产品推荐

