引用在其他文件夹中创建的Terraform资源

时间:2020-09-28 01:52:06

标签: 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文件中输出所需的ID。
output "sg_id" {
  value = "${aws_security_group.server_sg.id}"
}

然后在实例文件中将其添加为模块:

module "res" {
  source = "../security-groups"
}

此方法的问题在于,当我在Instances文件夹中进行terraform应用时,它也会尝试创建安全组(我已经通过在security-groups文件夹中进行terraform apply创建了安全组),但由于失败而失败SG已经存在。

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

谢谢。

1 个答案:

答案 0 :(得分:3)

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

data "aws_security_group" "sg" {
  name = "the-security-group-name"
}

到您的instances文件夹中,并引用该实体将您的实例与该安全组关联。

您还应该考虑您是否只想将terraform应用于整个树,而不是分别应用于每个文件夹。然后,您可以像尝试做的那样直接在所有托管资源之间进行引用,而不必调用terraform apply多次。