Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 引用在不同文件夹中创建的地形资源_Terraform_Terraform Provider Aws - Fatal编程技术网

Terraform 引用在不同文件夹中创建的地形资源

Terraform 引用在不同文件夹中创建的地形资源,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我有以下文件夹结构: infrastructure └───security-groups │ │ main.tf │ │ config.tf │ │. security_groups.tf │ └───instances │ main.tf │ config.tf │ instances.tf 我想通过引用引用security groups文件夹中实例化的安全组id。 我已尝试在security_groups.tf文件中使用 o

我有以下文件夹结构:

infrastructure
└───security-groups
│   │   main.tf
│   │   config.tf
│   │.  security_groups.tf
│   
└───instances
    │   main.tf
    │   config.tf
    │   instances.tf
我想通过引用引用security groups文件夹中实例化的安全组id。 我已尝试在security_groups.tf文件中使用

output "sg_id" {
  value = "${aws_security_group.server_sg.id}"
}
然后在实例文件中将其添加为模块:

module "res" {
  source = "../security-groups"
}
这种方法的问题是,当我在instances文件夹中应用terraform时,它也会尝试创建安全组(我已经通过在security groups文件夹中应用terraform创建了安全组),但它失败了,因为SGs已经存在

在不改变代码结构的情况下,引用在不同文件夹中创建的资源的最简单方法是什么


谢谢。

要引用现有资源,您需要使用
数据块。您不会直接引用另一个文件夹中的资源块,而是指定一个名称或ID或它具有的任何其他唯一标识符。因此,对于一个例子,您可以添加如下内容

data "aws_security_group" "sg" {
  name = "the-security-group-name"
}
转到您的instances文件夹,并引用该实体以将您的实例与该安全组关联


你还应该考虑你是否真的想把TrRAFrm应用到整个树上,而不是单独使用每个文件夹。然后,您可以像尝试做的那样直接在所有托管资源之间引用,并且不必多次调用

terraform apply

要引用现有资源,您需要使用
数据块。您不会直接引用另一个文件夹中的资源块,而是指定一个名称或ID或它具有的任何其他唯一标识符。因此,对于一个例子,您可以添加如下内容

data "aws_security_group" "sg" {
  name = "the-security-group-name"
}
转到您的instances文件夹,并引用该实体以将您的实例与该安全组关联

你还应该考虑你是否真的想把TrRAFrm应用到整个树上,而不是单独使用每个文件夹。然后,您可以像正在尝试的那样直接在所有托管资源之间进行引用,并且不必多次调用

terraformapply