如何修复Terraform lookup函数报错?动态配置Route53记录遇问题
修复Terraform Route53记录的lookup函数错误
问题根源
错误日志显示当前Terraform工作区为default,但你的subdomain变量未定义default对应的子域名条目,导致lookup函数无法找到匹配项。
解决方法
方法1:补充工作区对应的子域名映射
在subdomain变量的默认配置中添加当前工作区(比如你提到的sandbox或错误中的default)的映射:
variable "subdomain" { description = "Subdomain per environment" type = map(string) default = { production = "api" staging = "api.staging" dev = "api.dev" sandbox = "api.sandbox" # 新增sandbox工作区的子域名 default = "api.default" # 可选:新增default工作区的子域名 } }
方法2:用lookup的默认值参数兜底
lookup函数支持传入第三个参数作为默认值,当找不到对应工作区的键时自动使用该值,避免报错:
resource "aws_route53_record" "app" { zone_id = data.aws_route53_zone.zone.zone_id name = "${lookup(var.subdomain, terraform.workspace, "api.sandbox")}.${data.aws_route53_zone.zone.name}" type = "CNAME" ttl = "300" records = [aws_lb.api.dns_name] }
将第三个参数"api.sandbox"替换为你需要的默认子域名即可。
方法3:切换到已配置的工作区
如果你的目标工作区是sandbox,先执行命令切换工作区:
terraform workspace select sandbox
同时确保subdomain变量中包含sandbox的映射(参考方法1)。
内容的提问来源于stack exchange,提问作者bruvio
相关产品推荐
相关产品推荐

