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



我有以下文件夹结构:

infrastructure
└───security-groups
│   │   main.tf
│   │   config.tf
│   │.  security_groups.tf
│   
└───instances
│   main.tf
│   config.tf
│   instances.tf

我想通过引用引用在安全组文件夹中实例化的安全组id。我尝试使用在security_groups.tf文件中输出所需的ID

output "sg_id" {
value = "${aws_security_group.server_sg.id}"
}

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

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

这种方法的问题是,当我在实例文件夹中进行terraform应用时,它也会尝试创建安全组(我已经通过在安全组文件夹中进行terraform应用创建了安全组(,但它失败了,因为SG已经存在。

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

谢谢。

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

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

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

您还应该考虑是否真的只想将地形应用于整棵树,而不是单独应用于每个文件夹。然后,您可以像尝试的那样直接在所有托管资源之间引用,并且不必调用terraform apply那么多次。

虽然lxop的答案是更好的做法,但如果您确实需要引用另一个本地文件夹中的输出,您可以这样做:

data "terraform_remote_state" "sg" {
backend = "local"
config = {
path = "../security-groups/terraform.tfstate"
}
}

然后使用例如参考

locals {
sgId = data.terraform_remote_state.sg.outputs.sg_id
}

相关内容

  • 没有找到相关文章