首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用在不同文件夹中创建的Terraform资源

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

Stack Overflow用户
提问于 2020-09-28 01:52:06
回答 2查看 6.4K关注 0票数 8

我有以下文件夹结构:

代码语言:javascript
复制
infrastructure
└───security-groups
│   │   main.tf
│   │   config.tf
│   │.  security_groups.tf
│   
└───instances
    │   main.tf
    │   config.tf
    │   instances.tf

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

代码语言:javascript
复制
output "sg_id" {
  value = "${aws_security_group.server_sg.id}"
}

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

代码语言:javascript
复制
module "res" {
  source = "../security-groups"
}

这种方法的问题是,当我在实例文件夹中应用terraform时,它也尝试创建安全组(我已经通过在security文件夹中执行terraform应用来创建安全组),但由于SGs的存在,它失败了。

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-28 03:36:59

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

代码语言:javascript
复制
data "aws_security_group" "sg" {
  name = "the-security-group-name"
}

引用该实体将您的实例与该安全组相关联。

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

票数 7
EN

Stack Overflow用户

发布于 2021-10-07 06:54:28

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

代码语言:javascript
复制
data "terraform_remote_state" "sg" {
  backend = "local"

  config = {
    path = "../security-groups/terraform.tfstate"
  }
}

然后使用例如,引用。

代码语言:javascript
复制
locals {
  sgId = data.terraform_remote_state.sg.outputs.sg_id
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64094992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档