如何在Terraform中从另一个文件输出值



我有两个文件夹,每个文件夹中有几个文件

  • 服务
    • dns.tf
  • 应用程序
    • outputs.tf

在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输出中。如果我想为上述资源添加输出

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

但是我一直得到这个错误:

管理资源"cloudflare_record"redis_master_record">

你不能这么做。您的dns.tfoutputs.tf应该在同一个文件夹

或者作为示例,您可以使用具有远程状态

的数据块在Terraform中,您可以使用输出块从配置中输出值。然后,这些输出可以在相同的配置中使用插值语法引用,或者从使用terraform_remote_state数据源的另一个配置中引用。

下面是一个如何使用输出块输出EC2实例ID值的示例:

resource "aws_instance" "example" {
# ...
}
output "instance_id" {
value = aws_instance.example.id
}

然后您可以使用"output.instance_id.value"在相同的配置中引用输出值。

要使用来自另一个配置的输出值,首先需要使用terraform_remote_state数据源为远程状态创建一个数据源。下面是一个示例:

data "terraform_remote_state" "example" {
backend = "s3"
config {
bucket = "my-tf-state-bucket"
key    = "path/to/state/file"
region = "us-west-2"
}
}

然后,您可以使用"data.terraform_remote_state.example.output.instance_id.value"从远程配置引用输出值。

据我所知,您必须为每个目录运行terraform。在同一个目录中,您可以有多个地形文件,并在文件b中使用文件A中的变量。您目前将其拆分为两个目录,这只能通过模块方法实现。而且这不能开箱即用。

这个线程应该澄清一下。

相关内容

  • 没有找到相关文章

最新更新