我有两个文件夹,每个文件夹中有几个文件
- 服务
- 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.tf
和outputs.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中的变量。您目前将其拆分为两个目录,这只能通过模块方法实现。而且这不能开箱即用。
这个线程应该澄清一下。