You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中从其他文件输出资源值?

Terraform输出配置报错解决方法

问题场景

项目目录结构如下:

  • services
    • dns.tf
  • app
    • outputs.tf

services/dns.tf中定义了两个Cloudflare DNS记录资源:

resource "cloudflare_record" "pgsql_master_record" {
  count   = var.pgsql_enabled ? 1 : 0
  zone_id = data.cloudflare_zone.this.id
  name    = "${var.name}.pg.${var.jurisdiction}"
  value   = module.db[0].primary.ip_address.0.ip_address
  type    = "A"
  ttl     = 3600
}

resource "cloudflare_record" "redis_master_record" {
  count   = var.redis_enabled ? 1 : 0
  zone_id = data.cloudflare_zone.this.id
  name    = "${var.name}.redis.${var.jurisdiction}"
  value   = module.redis[0].host
  type    = "A"
  ttl     = 3600
}

尝试在app/outputs.tf中添加输出配置:

output "psql_master_record" {
  value = cloudflare_record.pgsql_master_record[*].hostname
}

output "redis_master_record" {
  value = cloudflare_record.redis_master_record[*].hostname
}

执行Terraform时收到错误:

未在根模块中声明托管资源 "cloudflare_record" "redis_master_record"。

报错原因

Terraform默认仅加载根目录下的配置文件,子目录(如services、app)中的代码不会被自动纳入根模块作用域。app/outputs.tf属于独立子目录,无法直接引用另一个子目录services中定义的资源,因为这些资源不在根模块的识别范围内。

解决方法

方法1:迁移输出配置到根目录

直接将app/outputs.tf移动到项目根目录,此时输出配置处于根模块作用域,可直接引用services目录中定义的资源(Terraform会自动加载所有子目录下的.tf文件到根模块)。

方法2:通过模块规范引用资源

如果需要保留子目录结构,需将services声明为模块,通过模块输出暴露资源属性,再在根模块中引用:

  1. 在services目录下创建outputs.tf,暴露需要的资源属性:
output "pgsql_master_hostname" {
  value = cloudflare_record.pgsql_master_record[*].hostname
}

output "redis_master_hostname" {
  value = cloudflare_record.redis_master_record[*].hostname
}
  1. 在根目录创建main.tf,调用services模块并传递所需变量:
module "services" {
  source = "./services"

  # 根据services模块的变量声明传递对应值
  pgsql_enabled = var.pgsql_enabled
  redis_enabled = var.redis_enabled
  name          = var.name
  jurisdiction  = var.jurisdiction
}
  1. 修改输出配置(建议移至根目录),引用模块输出:
output "psql_master_record" {
  value = module.services.pgsql_master_hostname
}

output "redis_master_record" {
  value = module.services.redis_master_hostname
}

内容的提问来源于stack exchange,提问作者eljoeyjojo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:35:18